一定時間ごとにネットワークドライブの接続を行うVBScript

投稿者: | 2008/11/18

一定の間隔を空けて指定回数分、ネットワークドライブの接続を行うスクリプトです。

常駐して一時間ごとにネットワークドライブの再接続を行う、といったものではありません。繋がれば役目を終えて終了します。

「ネットワークストレージの電源を入れて、バックアップ処理を行いたいけど立ち上がるのを待ってるのも面倒だし…」といった状況でのみ使います(笑)

オプションは、

  • /F: ネットワークの場所(\\SERVER\FOLDER 等)
  • /D: 割り当てるデバイス名(Z: 等)
  • /U: ユーザー名
  • /P: パスワード
  • /I: インターバル時間(秒)
  • /C: 再試行回数
  • /M: 途中経過メッセージを表示する

実際の起動例は、

cscript nduse.vbs /D:Z: /F:\\SERVER\FOLDER /I:10 /C:30 /M

\\SERVER\FOLDER を Z:ドライブに割り当てる。

接続できないときは10秒ごとに、30回リトライする。

途中経過のメッセージを表示する。

最終的に接続ができなかった場合には、ERRORLEVELに9を返しますので、ネットワーク接続がうまくいかなかったらそれ以降の処理はキャンセル、といったバッチが組めます。

バッチ例

cscript nduse.vbs /D:Z: /F:\\SERVER\FOLDER /I:10 /C:30 /M
if errorlevel 9 goto END
コピー処理
:END

注意事項

  • 全ての環境でのテストは行っていませんのでうまく動かない場合があります。
    (XPProSP3でのみテスト済み)
  • 特にユーザー、パスワードを指定した場合のテストが不十分です。
    (1回しかやっていません)
  • 変更、修正はご自由にどうぞ。
  • 「バグ」「もっとうまくやれる」情報がありましたら教えていただけると勉強になります。

ダウンロード nduse.lzh

‘nduse.vbs

‘2008/11/17 作成 ADDDRV

‘使用の手引き

‘cscript nduse.vbs /D:ドライブ名 /F:フォルダ名 /U:ユーザー名 /P:パスワード
‘                  /I:待ち時間間隔(秒) /C:試行回数
‘                  /M:(メッセージ表示有り)

‘ネットワークドライブの接続命令を待ち時間間隔を開けて試行回数分発行します
‘接続完了したときはERRORLEVELに0が、失敗した場合は9が返ります

Option Explicit

‘パラメータ
Dim Args

Dim objNetwork      ‘ Networkオブジェクト
Dim NetDrive        ‘ /D:   ドライブ名
Dim NetFolder       ‘ /F:   フォルダ名
Dim NetName         ‘ /U:   ユーザー
Dim NetPass         ‘ /P:   パスワード
Dim intInterval     ‘ /I:   待ち時間
Dim intLoopcount    ‘ /C:   試行回数
Dim intMess         ‘ /M:   メッセージ表示

Dim I

‘パラメータ取得
Set Args = WScript.Arguments

‘ドライブ名の取得
NetDrive = Args.Named(“D”)

‘フォルダ名の取得
NetFolder = Args.Named(“F”)

‘ユーザー名の取得
If Args.Named.Exists(“U”) Then
NetName = Args.Named(“U”)
Else
NetName = “”
End If

‘パスワードの取得
If Args.Named.Exists(“P”) Then
NetPass = Args.Named(“P”)
Else
NetPass = “”
End If

‘待ち時間の取得
If Args.Named.Exists(“I”) Then
If IsNumeric(Args.Named(“I”)) = False Then
WScript.Echo “/I:は数字で指定してください”
WScript.Quit (9)
End If
intInterval = CInt(Args.Named(“I”))
Else
intInterval = 0
End If

‘試行回数の取得
If Args.Named.Exists(“C”) Then
If IsNumeric(Args.Named(“C”)) = False Then
WScript.Echo “/C:は数字で指定してください”
WScript.Quit (9)
End If
intLoopcount = CInt(Args.Named(“C”))
Else
intLoopcount = 1
End If

‘メッセージ表示をする/しない
If Args.Named.Exists(“M”) Then
intMess = True
End If

On Error Resume Next

‘ネットワークオブジェクトの作成
Set objNetwork = WScript.CreateObject(“WScript.Network”)

‘既存のネットワークドライブがあれば切断
objNetwork.RemoveNetworkDrive NetDrive, True, True

If intMess Then
If Err.Number = 0 Then
WScript.Echo “切断完了”
Elseif Err.Number = -2147022646 Then
WScript.Echo “切断完了(既存ドライブなし)”
Else
WScript.Echo “切断:” & Err.Description & “(” & Err.Number & “)”
End If
End If

For I = 1 To intLoopcount

‘ネットワークドライブ接続
objNetwork.MapNetworkDrive NetDrive, NetFolder, False, NetName, NetPass

If Err.Number = 0 Then
If intMess Then
WScript.Echo I & “:割り当て完了”
End If
Set objNetwork = Nothing
WScript.Quit (0)
ElseIf Err.Number = -2147024811 Then
If intMess Then
WScript.Echo I & “:割り当て完了(割り当て済み)”
End If
‘正常終了
Set objNetwork = Nothing
WScript.Quit (0)
Else
If intMess Then
WScript.Echo I & “:接続:” & Err.Description & “(” & Err.Number & “)”
End If
End If
‘待ち時間
If I <> intLoopcount Then
If intMess Then
WScript.Echo intInterval & “秒後に再試行(あと” & intLoopcount – I & “回)”
End If
WScript.Sleep (intInterval * 1000)
End If
Next

‘異常終了
Set objNetwork = Nothing
WScript.Quit (9)