ネットワークドライブの永続割り当て
コマンドラインからネットワークドライブの割り当ては、通常 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 つのネットワークドライブへ一括で割り当てることができます。
実行すると、以下のように表示されます。