【VBS】ネットワークドライブに再接続できませんでしたなんて言わないよ絶対

2019年10月17日

networkdrive-vbs

前回、「プレゼントにピッタリな20,000円くらいのNAS」で、NASを取り上げました。
NASを設置したら、たぶんネットワークドライブを張る方が多いと思います。
が、PC起動時に「ネットワークドライブに再接続できませんでした」のエラーを見たことがある方も多いかと思います。
画面の右下にピョッと出てくるアレです。
自動ログオンしていれば、見ることがあると思います。

スポンサーリンク

これを回避したい

なんかイラっとしますよね、アレ。
ちょっと調べてみると、先人たちがVBSで回避しているという情報をもとに、わたしも同じ方法でやっておりました。
3行くらいコピペすればできる感じでした。
こんなかんじ。

WScript.sleep 2000
Set objNetwork = CreateObject("WScript.Network")
objNetWork.MapNetworkDrive "Z:", "\\192.168.1.10\NAS"

でも、NASの電源を落としていたタイミングがありまして、その時はエラーが出ていたんですよ。
こんなかんじ。

NetworkDriveError

いやいや、知ってるし。
NASの電源落としてたの、知ってるし。

これも回避したい

ということで、アレコレなんやかんや調べていじった結果、こうなりました。

' --------------------------------
' 定数
' --------------------------------
Const SERVER_IP = "192.168.1.10" ' NASのIPアドレス
Const DRIVE_LETTER = "Z:"        ' ネットワークドライブのドライブレター
Const SHARED_FOLDER = "NAS"      ' 共有フォルダ名
Const USER_NAME = "user"         ' アクセスするユーザー名
Const USER_PASS = "password"     ' ユーザーパスワード
Const WAIT_TIME = 2000           ' pingを打つまでの待機時間(ミリ秒)

' -------------------------------------
' ネットワークドライブの割り当て
' -------------------------------------
if fncPing(SERVER_IP) Then
  Dim connectFolder: connectFolder = "\\" + Server_IP + "\" + SHARED_FOLDER
  Set objFSO = CreateObject("Scripting.FileSystemObject")

' ドライブレターが使用されているか
  if Not objFSO.DriveExists(DRIVE_LETTER) Then
    Set objNetwork = CreateObject("WScript.Network")
    objNetWork.MapNetworkDrive DRIVE_LETTER, connectFolder, false, USER_NAME, USER_PASS
    Set objNetwork = Nothing
  Else
    MsgBox "「" + DRIVE_LETTER + "」" + " はすでに使用されています",,"エラー"
  End if
Else
  MsgBox "「" + SERVER_IP + "」" + "から応答がありません",,"エラー"
End if

' -------------------------------------
' pingが返ってくるか
' -------------------------------------
Function fncPing(host)
  WScript.sleep WAIT_TIME
  Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
  Set colItems = objWMI.ExecQuery("select * from Win32_PingStatus where address ='" & host & "'")

  For Each objItem In colItems
    If objItem.StatusCode = 0 Then
      fncPing = True
    Else
      fncPing = False
    End If
  Next

Set objItem = Nothing
Set colItems = Nothing
Set objWMI = Nothing
End Function

これで回避できる

あとは、起動時(ログオン時)に実行するために
%APPDATA%\Microsoft\Windows\Start Menu\Programs

上記のフォルダに、
vbsEdit

こんな感じでvbsファイルを作成・保存してもらえれば、「再接続できませんでした」というエラーもなく接続できると思います。
エラー文が日本語のため、メモ帳以外のエディターで編集する場合は、Shift JISで保存する必要があります。

やだ、恥ずかしい///

1.pingが通って
2.ドライブレターが使用されていなければ
3.ネットワークドライブの割り当て

という流れです。
それにしてもなんか、こんなコードを大っぴらにしたことがないので、変数名とか恥ずかしいですね。
英語の学のなさを露呈している感が、プンプンしてしまいます。
(Google翻訳さん、ありがとう)

そんなわたし自身に、先人のありがたいお言葉を贈ろうと思います。

「ちっちゃいことは気にすんな。それ、ワカチコワカチコ。」

↓↓↓ブログランキングに参加しています↓↓↓

にほんブログ村 PC家電ブログへ

スポンサーリンク