どちらかと言うと、こちらの続きです。
ネットワークドライブの名前 - C#ATIA
近い将来、複数のPCで複数のネットワークドライブを設定する事に
なると思うのですが、ネットワーク担当者(僕じゃない)的には
”各自で設定して”
となりそうな雰囲気なので、さすがに面倒。
各自で行うと同じような設定にならない(過去に苦労した)可能性
もあり、プログラム的な方法で統一した設定にしたいです。
最初は”バッチファイルで設定させよう・・・”と思ったのですが、
僕の理解が不足し過ぎていて困難。
ひょっとしてVBScriptで出来るのでは?と調べた所出来る事が
分かりました。(社内PCはWindowsのみです)
こちらはネットワークドライブを設定するVBScriptです。
Sub main() Dim driveMap driveMap = Array( _ Array("O:", "\\hoge\share"), _ Array("P:", "\\piyo\share"), _ Array("Q:", "\\fuga\share") _ ) Dim userName userName = InputBox("ユーザー名を入力してください") If Len(userName) < 1 Then Exit Sub Dim pass pass = InputBox("パスワードを入力してください") If Len(pass) < 1 Then Exit Sub Dim i, driveNames driveNames = "" For i = 0 To UBound(driveMap) driveNames = driveNames & "[" & driveMap(i)(0) & "]," Next Dim msg msg = "以下" & UBound(driveMap) + 1 & "個のネットワークドライブを設定します。" & vbCrLf & driveNames & vbCrLf & "宜しいですか?" If MsgBox(msg, vbQuestion + vbYesNo) = vbNo Then Exit Sub End If Dim objWshNetwork Set objWshNetwork = WScript.CreateObject("WScript.Network") msg = "" On Error Resume Next Dim res For i = 0 To UBound(driveMap) objWshNetwork.MapNetworkDrive driveMap(i)(0), driveMap(i)(1), False, userName, pass If Err.Number = 0 Then res = "成功" Else res = "失敗" End If msg = msg & "ドライブ[" & driveMap(i)(0) & "]-" & res & vbCrLf Err.Number = 0 Next MsgBox msg End Sub call main()
driveMap変数内の各配列は
array("設定するドライブ名","該当するフォルダパス")
です。
当然、該当するフォルダパスにアクセスする権限の無いユーザー名では
失敗しますし、既に設定済みのドライブ名を指定すると失敗します。
テストする関係上、削除するVBScriptも必要だったため作成しました。
Sub main() Dim driveMap driveMap = Array( _ Array("O:", "\\hoge\share"), _ Array("P:", "\\piyo\share"), _ Array("Q:", "\\fuga\share") _ ) Dim i, driveNames driveNames = "" For i = 0 To UBound(driveMap) driveNames = driveNames & "[" & driveMap(i)(0) & "]," Next Dim msg msg = "以下" & UBound(driveMap) + 1 & "個のネットワークドライブを削除します。" & vbCrLf & driveNames & vbCrLf & "宜しいですか?" If MsgBox(msg, vbQuestion + vbYesNo) = vbNo Then Exit Sub End If Dim objWshNetwork Set objWshNetwork = WScript.CreateObject("WScript.Network") msg = "" On Error Resume Next Dim res For i = 0 To UBound(driveMap) objWshNetwork.RemoveNetworkDrive driveMap(i)(0) If Err.Number = 0 Then res = "成功" Else res = "失敗" End If msg = msg & "ドライブ[" & driveMap(i)(0) & "]-" & res & vbCrLf Err.Number = 0 Next MsgBox msg End Sub call main()
こちらのdriveMap変数内の配列は二次元配列になっていますが、
二次元目は不要です。(コピペで済ませたかった)
同じ結果が得られるのであれば、楽した方が良くないですか?