第15回 WshNetworkオブジェクトを利用する:基礎解説 演習方式で身につけるチェック式WSH超入門(2/2 ページ)
WSHでネットワーク・プリンタやネットワーク・ドライブを操作してみよう。プリンタの追加や、ネットワーク・ドライブのマップ方法について解説する。
WshNetworkオブジェクトには、ネットワーク・プリンタ同様、ネットワーク・ドライブを操作する各メソッドが用意されている。
メソッド | 説明 |
---|---|
MapNetworkDrive | ネットワーク・ドライブの接続 |
RemoveNetworkDrive | ネットワーク・ドライブの切断 |
EnumNetworkDrives | ネットワーク・ドライブの列挙 |
ネットワーク・ドライブを操作するメソッド |
順番に見ていこう。
MapNetworkDriveメソッドはローカル・ドライブにネットワーク・ドライブを接続するメソッドだ。書式は次のようになる。
objWshNetwork.MapNetworkDrive strLocalName, strRemoteName, [bUpdateProfile], [strUser], [strPassword]
strLocalNameは割り当てるローカル・ドライブ名、strRemoteNameはネットワーク・ドライブ(共有フォルダ)のUNCパス、そのほかはAddPrinterConnectionメソッドと同様である。共有フォルダにアクセスできるユーザー名とパスワードが、スクリプトを実行しているユーザー名とパスワードと異なる場合は指定が必要だ。
例えば、X:というドライブに\\windowsxppro\scriptという共有フォルダをネットワーク・ドライブとして割り当てるには次のようにする。
Option Explicit
Dim objWshNetwork
Set objWshNetwork = WScript.CreateObject("WScript.Network")
objWshNetwork.MapNetworkDrive "X:", "\\windowsxppro\script"
Set objWshNetwork = Nothing
RemoveNetworkDriveメソッドは逆にネットワーク・ドライブを切断するメソッドだ。
objWshNetwork.RemoveNetworkDrive strName, [bForce], [bUpdateProfile]
strNameにネットワーク・ドライブを割り当てたローカル・ドライブ名を入力する。
先ほど割り当てたネットワーク・ドライブを切断する例は次のようになる。
Option Explicit
Dim objWshNetwork
Set objWshNetwork = WScript.CreateObject("WScript.Network")
objWshNetwork.RemoveNetworkDrive "X:"
Set objWshNetwork = Nothing
EnumNetworkDrivesメソッドは、EnumPrinterConnectionsメソッドと同様、ローカル・ドライブ名(偶数項目)とネットワーク・ドライブ(共有フォルダ)のUNCパス(奇数項目)を含んだWshCollectionオブジェクトを返す。
ネットワーク・ドライブをいくつか割り当てた状態で次のスクリプトを実行してもらいたい。
ファイル:EnumNetworkDrives.vbs
Option Explicit
Dim objWshNetwork
Set objWshNetwork = WScript.CreateObject("WScript.Network")
Dim objPrinters
Set objPrinters = objWshNetwork.EnumPrinterConnections
Dim strPrinterList
strPrinterList = ""
Dim I
For I = 0 To objPrinters.Count - 1 Step 2
strPrinterList = strPrinterList & _
objPrinters.Item(I) & " : " & _
objPrinters.Item(I + 1) & _
vbCrLf
Next
MsgBox strPrinterList Set objWshNetwork = Nothing
これを実行すると例えば次のようになる。
ここでもEnumPrinterConnectionsで使ったときと同様の方法を使って、偶数項目のローカル・ドライブ名と奇数項目の共有フォルダのUNCパスを取り出している。
少し応用例を考えよう。共有フォルダのUNCパスのリストを用意し、それらにX:やY:など決め打ちではなく、状況に応じて適当な空きローカル・ドライブ名に割り当てたいということがあるだろう。ドライブ・レターの若い順に使用可能なローカル・ドライブ名を求め、そこに共有フォルダのUNCパスを順に割り当てるスクリプトを考えてみよう。このスクリプトを実行するにはProgIDがScripting.FileSystemObjectのFileSystemObjectオブジェクトを使わなくてはならないが、これは次回以降に解説予定である。しかし使用しているメソッドは、引数に与えられたドライブが存在するかどうかをブール値で返すDriveExistsメソッドだけなので難しくはないだろう。
マーカーで隠れたところを選択してチェックしてみよう。
Option Explicit
Dim objWshNetwork
Set objWshNetwork = WScript.CreateObject("WScript.Network")
Dim objFSO
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Dim strShareFolders
strShareFolders = Array("\\windowsxppro\script","\\windowsxppro\danjyo")
Dim intChr, intDrive, strDrive
intDrive = 0
'AからZの文字コードを調べる
For intChr = Asc("A") To Asc("Z")
'文字コードから文字を取り出しドライブ名とする
strDrive = Chr(intChr) & ":"
'もしドライブが存在してなければ
If Not objFSO.DriveExists(strDrive) Then
'配列の末端まで達してなければ、割り当て
If intDrive <= UBound(strShareFolders) Then
objWshNetwork.MapNetworkDrive strDrive, strShareFolders(intDrive)
End If
intDrive = intDrive + 1
End If
Next
Set objWshNetwork = Nothing
このスクリプトを実行後、先ほどのEnumNetworkDrives.vbsを実行すると例えば次のようにドライブ・レターの若い順に共有フォルダが割り当てられていることが分かるだろう。
逆に、全ネットワーク・ドライブを切断するにはこのスクリプトの応用で可能だ。次の例を見てもらいたい。If objFSO.GetDrive(strDrive).DriveType = 3 Thenの行は取りあえず、「それがネットワーク・ドライブであれば」という判定の式だと思っていただければよい。
Option Explicit
Dim objWshNetwork
Set objWshNetwork = WScript.CreateObject("WScript.Network")
Dim objFSO
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Dim intChr, strDrive
'AからZの文字コードを調べる
For intChr = Asc("A") To Asc("Z")
'文字コードから文字を取り出しドライブ名とする
strDrive = Chr(intChr) & ":"
'もしドライブが存在していれば
If objFSO.DriveExists(strDrive) Then
'ネットワーク・ドライブなら
If objFSO.GetDrive(strDrive).DriveType = 3 Then
'切断
objWshNetwork.RemoveNetworkDrive strDrive
End If
End If
Next
Set objWshNetwork = Nothing
WshNetworkオブジェクトのプロパティ
WshNetworkオブジェクトには、ユーザーのネットワーク環境に関する情報を格納したプロパティが存在する。
プロパティ名 | 説明 |
---|---|
ComputerName | コンピュータ名 |
UserDomain | ドメイン名 |
UserName | ユーザー名 |
ネットワーク環境に関するプロパティ |
使用方法は至って簡単である。
Option Explicit
Dim objWshNetwork
Set objWshNetwork = WScript.CreateObject("WScript.Network")
MsgBox _
"コンピュータ名: " & objWshNetwork.ComputerName & vbCrLf & _
"ドメイン名: " & objWshNetwork.UserDomain & vbCrLf & _
"ユーザー名: " & objWshNetwork.UserName
Set objWshNetwork = Nothing
実行結果は例えば次のようになる。
なお、ワークグループ環境にいる場合は、ComputerNameプロパティとUserDomainプロパティの値は同じになる。
今回はネットワークを扱うWshNetworkオブジェクトについて解説した。次回からはFileSystemObjectを用いたファイル操作についての話題を数回にわたって取り上げる。
Copyright© Digital Advantage Corp. All Rights Reserved.