連載
» 2008年02月20日 00時00分 公開

基礎解説 演習方式で身につけるチェック式WSH超入門:第15回 WshNetworkオブジェクトを利用する (2/2)

[牟田口大介(Microsoft MVP Data Center Management - Admin Frameworks),著]
前のページへ 1|2       

 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

 これを実行すると例えば次のようになる。

EnumNetworkDrivesメソッドの実行例
ローカル・ドライブ名とそこに割り当てているネットワーク・ドライブのUNCパスが一覧表示される。


 ここでもEnumPrinterConnectionsで使ったときと同様の方法を使って、偶数項目のローカル・ドライブ名と奇数項目の共有フォルダのUNCパスを取り出している。

 少し応用例を考えよう。共有フォルダのUNCパスのリストを用意し、それらにX:やY:など決め打ちではなく、状況に応じて適当な空きローカル・ドライブ名に割り当てたいということがあるだろう。ドライブ・レターの若い順に使用可能なローカル・ドライブ名を求め、そこに共有フォルダのUNCパスを順に割り当てるスクリプトを考えてみよう。このスクリプトを実行するにはProgIDがScripting.FileSystemObjectのFileSystemObjectオブジェクトを使わなくてはならないが、これは次回以降に解説予定である。しかし使用しているメソッドは、引数に与えられたドライブが存在するかどうかをブール値で返すDriveExistsメソッドだけなので難しくはないだろう。

CHECK!

マーカーで隠れたところを選択してチェックしてみよう。


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を用いたファイル操作についての話題を数回にわたって取り上げる。


「基礎解説 演習方式で身につけるチェック式WSH超入門」のインデックス

基礎解説 演習方式で身につけるチェック式WSH超入門

前のページへ 1|2       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。