ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PowerShellでネットワークドライブに接続

PowerShellを学んでいると記事に書きました。
ajya.hatenablog.jp

以前ツイートした、ネットワークドライブの割り当てを行うという目的のために学んでいます。

試行錯誤した結果、PowerShellスクリプトでは、New-PSDriveコマンドレットでネットワークドライブを接続すると、スクリプトの実行中のみ、エクスプローラにも、接続したネットワークドライブも表示されます。
スクリプトの実行が終わると、接続したネットワークドライブは切断されて、エクスプローラに表示されなくなります。

PowerShellスクリプトを、Windowsの起動時に実行して、ネットワークドライブを接続して、常駐するプログラムを起動させようと考えています。
常駐するプログラムは、ドライブを意識して処理はしますが、ドライブが接続されているのか判定して、接続されていなかったら、接続を行う処理は実装したくありません。

どうすれば、PowerShellスクリプトで、ネットワークドライブを接続して、スクリプトの実行が終了しても、エクスプローラに表示され続けるのか試しました。
結果は、net useコマンドを使えばできるのが、わかりました。

スクリプトを実行中
Photo by Aman Upadhyay on Unsplash

ネットワークドライブが接続されていなかったら、念のため切断後、ネットワークドライブを接続する

PowerShellでは、Test-Pathコマンドレットでドライブの存在を確認できます。
Test-Pathコマンドレットで、ドライブの存在を確認して、ドライブが存在しなければ、net useコマンドで、ネットワークドライブを接続します。
念のため、net useコマンドで、ネットワークドライブを切断してから、net useコマンドで、ネットワークドライブ接続するようにしたのが、以下のスクリプトです。

if (Test-Path Z:) {
} else {
    net use Z: /delete /yes
    net use Z: \\192.168.1.1\data Password /user:Admin /persistent:yes
}

このスクリプトで、PowerShellスクリプトの実行が終わっても、ドライブが接続できるようになりました。

常駐プログラムの起動は、Start-Processコマンドレットでできるので、ドライブの接続の後に、起動を行います。

if (Test-Path Z:) {
} else {
    net use Z: /delete /yes
    net use Z: \\192.168.1.1\data Password /user:Admin /persistent:yes
}

Start-Process -FilePath "C:\testpg\test.exe"

これで目的の動作が実現できました。


New-PSDriveコマンドレットでは、PowerShellスクリプトの実行が終了すると、エクスプローラにネットワークドライブが表示されなくて、驚きました。
幸い、代替手段があったので、対処できました。
このような使い方は、想定されていない使い方なのかもしれませんが、できれば、すべてコマンドレットで解決したかったです。