ネットワークドライブの割り当て2

にメンテナンス済み

コマンドラインからネットワークドライブの割り当ては、通常 net use を使います。

ですが、これだけでは PC 再起動の度に割り当て情報が消えてしまいます。

persistent コマンドを使うことで解決しますが、今度は資格情報が保持されません。

  • エクスプローラを開き、ネットワークドライブの割り当てを行う。
  • ネットワークパスを指定し、ドライブを割り当てる。
  • 資格情報を入力し、資格情報の保存をクリックする。

このページでは、上記の操作と同等の処理を、バッチファイルで表現する方法を分かりやすくご紹介いたします。

ソースコード

まず結論から。以下のコードで実現できます。

cmdkey /add:%server1% /user:%username% /pass:%password%
net use O: %directory%
変数名内容
%server1%接続するサーバ名(\〇〇… の〇〇の部分)
%username%資格情報(ユーザ名)
%password%資格情報(パスワード)
%directory%割り当てるネットワークパス

上記を当てはめて実行することで、ネットワークドライブ、資格情報がともに保持されます。

cmdkeynet use の使い方

前述したサンプルでは、再起動しても消えないネットワークドライブの割り当て方として、cmdkeyコマンドとnet useコマンドを使用しました。

それぞれのコマンドの役割について説明します。

cmdkey

cmdkeyコマンドは、Windows 資格情報を操作するための関数です。

ファイルエクスプローラーからサーバーに初めてアクセスした際、資格情報の入力を求められることがあります。

この入力と同じ役割を持つのがcmdkeyコマンドです。

cmdkey のオプション

cmdkey /add:%server% /user:%username% /pass:%password%
変数名内容
addIP アドレス、またはコンピュータ名
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

set /p username=ユーザー名を入力してください:
set /p password=パスワードを入力してください:

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として実装します。

network.cmd
@echo off
setlocal

cmdkey /add:%1 /user:%2 /pass:%3

echo %1の資格情報を追加しました

net use %4: %5

echo %4ドライブへ%5を割り当てました

endlocal
start.cmd
@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 つのネットワークドライブへ一括で割り当てることができます。

実行すると、以下のように表示されます。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>start.cmd
server_name1の資格情報を追加しました
Oドライブへdirectory1を割り当てました
server_name2の資格情報を追加しました
Pドライブへdirectory2を割り当てました
server_name3の資格情報を追加しました
Qドライブへdirectory3を割り当てました
server_name4の資格情報を追加しました
Rドライブへdirectory4を割り当てました
C:\users\user>
#PowerShell