【PowerShell】ネットワークドライブの接続状態を監視して自動で再接続する方法

【PowerShell】ネットワークドライブの接続状態を監視して自動で再接続する方法 PowerShell

ネットワークドライブは業務でよく使われる一方、接続が切断されてアクセスできなくなることもあります。特にスリープ復帰時やネットワーク変更後に切断が発生しやすく、毎回手動で再接続するのは手間です。この記事では、PowerShellを使ってネットワークドライブの接続状態を監視し、切断されていた場合に自動で再接続する方法を解説します。

ネットワークドライブの状態を確認する方法

PowerShellでは Get-PSDrive を使って、現在マウントされているドライブの情報を取得できます。以下は、ネットワークドライブ(ProviderがFileSystemでRootがUNCパス)だけを抽出する方法です。

Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Root -like "\\*" }

ただし、この方法では接続が切れている場合にドライブ情報自体が表示されないため、切断状態の監視には WScript.Network オブジェクトか、net use コマンドを併用すると便利です。

net use を使った接続状況の判定

net use コマンドを実行することで、マウントされているすべてのネットワークドライブとその状態を確認できます。

net use

出力の中に「切断」と表示されるドライブがあれば、再接続対象と判断できます。

自動再接続スクリプトの例

以下は、ドライブZにマウントされているネットワークドライブの接続を監視し、切断されていれば自動で再接続を試みるスクリプトです。

# ネットワークドライブ情報
$driveLetter = "Z:"
$remotePath = "\\server\shared"
$username = "domain\username"
$password = "your_password"

# 接続状況を取得
$netUseOutput = net use $driveLetter 2>&1

# 「切断」と出ているかをチェック
if ($netUseOutput -match "切断" -or $netUseOutput -match "The network connection could not be found") {
    Write-Host "ドライブが切断されています。再接続を試みます..."

    # 一度切断(念のため)
    net use $driveLetter /delete /yes

    # 再接続コマンドの実行
    net use $driveLetter $remotePath /user:$username $password /persistent:yes

    Write-Host "再接続処理が完了しました。"
} else {
    Write-Host "ドライブは正常に接続されています。"
}

スクリプトを定期実行する方法

このスクリプトをタスクスケジューラで定期実行すれば、ネットワークドライブの接続状態を自動で維持できます。以下のように設定すると便利です。

  • トリガー:PC起動時 または 一定間隔(例:5分ごと)
  • 操作:PowerShell.exe を指定
    引数に -ExecutionPolicy Bypass -File “スクリプトのフルパス” を指定

パスワードを平文で保存しないための工夫

セキュリティ上、パスワードの平文保存は避けるべきです。ConvertTo-SecureString と Get-Credential の組み合わせや、資格情報マネージャー(Credential Manager)の利用も検討してください。