ネットワークドライブの永続割り当て
コマンドラインからネットワークドライブの割り当ては、通常 net use を使います。
ですが、これだけでは PC 再起動の度に割り当て情報が消えてしまいます。
persistent コマンドを使うことで解決しますが、今度は資格情報が保持されません。
- エクスプローラを開き、ネットワークドライブの割り当てを行う。
- ネットワークパスを指定し、ドライブを割り当てる。
- 資格情報を入力し、資格情報の保存をクリックする。
このページでは、上記の操作と同等の処理を、バッチファイルで表現する方法を分かりやすくご紹介いたします。
ソースコード
まず結論から。以下のコードで実現できます。
cmdkey /add:%server1% /user:%username% /pass:%password%
net use O: %directory%
| 変数名 | 内容 |
|---|---|
| %server1% | 接続するサーバ名(\〇〇… の〇〇の部分) |
| %username% | 資格情報(ユーザ名) |
| %password% | 資格情報(パスワード) |
| %directory% | 割り当てるネットワークパス |
上記を当てはめて実行することで、ネットワークドライブ、資格情報がともに保持されます。
cmdkey、 net use の使い方
前述したサンプルでは、再起動しても消えないネットワークドライブの割り当て方として、cmdkeyコマンドとnet useコマンドを使用しました。
それぞれのコマンドの役割について説明します。
cmdkey
cmdkeyコマンドは、Windows 資格情報を操作するための関数です。
ファイルエクスプローラーからサーバーに初めてアクセスした際、資格情報の入力を求められることがあります。
この入力と同じ役割を持つのがcmdkeyコマンドです。
cmdkey のオプション
cmdkey /add:%server% /user:%username% /pass:%password%
| 変数名 | 内容 |
|---|---|
| add | IP アドレス、またはコンピュータ名 |
| user | 接続先のアカウント名 |
| pass | 接続先のパスワード |
net useコマンド
net useコマンドは、ネットワークドライブの操作を行うための関数です。
今回使用する割り当ての他、切断や、割り当て済みのドライブの一覧表示などが可能です。
net use のオプション
net use %drive_letter% %directory% %password% /user:%username% /savecred
| 変数名 | 内容 |
|---|---|
| 最初の引数 | 割り当てるドライブレター(システムドライブの C: にあたる部分) |
| 2 つ目の引数 | ネットワークドライブとして割り当てたいディレクトリパス |
| 3 つ目の引数 | 接続先のパスワード |
| /user | 接続先のアカウント名 |
| /savecred | 資格情報が必要な場合、入力されたアカウント名とパスワードを保存する。 |
| /persistent | この net use コマンドで設定したドライブ情報を、次回ログオン以降も自動的に復元する。 |
ネットワークドライブを割り当てる具体例
ここからは、実際に想定されるケースを例に、ネットワークドライブを割り当てる方法をご紹介します。
ユーザー名とパスワードをユーザーに入力させる
バッチファイルに直接ユーザー名とパスワードを記述するのは、セキュリティ上好ましくありません。
バッチファイル実行時に、ユーザー名とパスワードを入力させたい場合は、以下のように実装します。
@echo off
setlocal
rem ユーザーからユーザー名とパスワードを入力してもらう
set /p username=ユーザー名を入力してください:
set /p password=パスワードを入力してください:
rem ユーザー名とパスワードを使って資格情報を追加
cmdkey /add:server_name /user:%username% /pass:%password%
net use O: directory
endlocal
ユーザーからの入力を受け取るsetコマンドについては、以下のページで詳しく説明しています。
複数の IP アドレスに対して、ネットワークドライブを割り当てる
自宅や社内に複数のサーバーや NAS がある場合、同時に複数のネットワークドライブを割り当てたいケースがあると思います。
そのような場合、バッチファイルを 2 つ用意し、1 つ目に今回ご紹介したコード、2 つ目に実際に起動するコードを記述することで、シンプルに実現することができます。
ここでは 1 つ目のバッチファイルをnetwork.cmd、2 つ目のバッチファイルをstart.cmdとして実装します。
@echo off
setlocal
cmdkey /add:%1 /user:%2 /pass:%3
echo %1の資格情報を追加しました
net use %4: %5
echo %4ドライブへ%5を割り当てました
endlocal
@echo off
setlocal
call network.cmd server_name1 username1 password1 O: directory1
call network.cmd server_name2 username2 password2 P: directory2
call network.cmd server_name3 username3 password3 Q: directory3
call network.cmd server_name4 username4 password4 R: directory4
endlocal
callコマンドについて詳細を知りたい方は、以下の記事をご覧ください。
上記のコードを実行することで、4 つのネットワークドライブへ一括で割り当てることができます。
実行すると、以下のように表示されます。