WSHでネットワーク・プリンタやネットワーク・ドライブを操作してみよう。プリンタの追加や、ネットワーク・ドライブのマップ方法について解説する。
前回まででWSHの内部オブジェクトであるWshShellオブジェクトについて解説した。今回は、これもWSHの内部オブジェクトの1つである、WshNetworkオブジェクトについて解説する。
■連載目次
第1回 WSHを始めよう
第2回 VBScript基本(1)文字列の入出力
第3回 VBScript基本(2)計算と分岐処理
第4回 関数を使いこなす:文字列、数値、日付
第5回 データ型について理解を深めよう
第6回 VBScriptの配列を極める
第7回 Subプロシージャで処理を定義
第8回 Functionプロシージャで関数を定義
第9回 VBScriptのオブジェクトを使いこなす
第10回 WScriptオブジェクト(1)
第11回 WScriptオブジェクト(2)
第12回 WshShellオブジェクト(1)
第13回 WshShellオブジェクト(2)
第14回 WshShellオブジェクト(3)
第15回 WshNetworkオブジェクト
第16回 FileSystemObjectオブジェクト(1)
第17回 FileSystemObjectオブジェクト(2)
第18回 FileSystemObjectオブジェクト(3)
第19回 TextStream/Dictionaryオブジェクト
これまでの例にならって、まずはWshNetworkオブジェクト(ProgIDは"WScript.Network")をオブジェクト・モデル図で概観してみよう。
このように、WshNetworkオブジェクトはWindowsのネットワークに関係する機能を持ったメンバおよびオブジェクトを有することが分かる。今回はこのオブジェクトについて詳説していく。
WshNetworkオブジェクトには、ネットワーク・プリンタを操作するメソッドが含まれている。それをまとめたのが以下の表だ。
メソッド | 説明 |
---|---|
AddPrinterConnection/AddWindowsPrinterConnection | ネットワーク・プリンタの接続 |
RemovePrinterConnection | ネットワーク・プリンタの切断 |
EnumPrinterConnections | ネットワーク・プリンタの列挙 |
SetDefaultPrinter | デフォルト・プリンタの設定 |
ネットワーク・プリンタを操作するメソッド |
このように、ネットワーク・プリンタの接続、切断、列挙およびデフォルト・プリンタの設定が可能である。1つずつ見ていこう。
AddPrinterConnectionメソッド、AddWindowsPrinterConnectionメソッドは、ネットワーク・プリンタを接続するためのメソッドだ。前者はMS-DOSベースの接続(LPT1などのポート指定を行う)、後者は通常のネットワーク・プリンタの接続を行う。書式は次のとおりである。
※MS-DOSベースの接続の場合
objWshNetwork .AddPrinterConnection strLocalName, strRemoteName[,bUpdateProfile][,strUser][,strPassword]
strLocalNameはローカル・ポート名、strRemoteNameはリモート・プリンタのUNCパス、bUpdateProfileはプリンタのマッピング情報をプロファイルに保存するかどうかのブール値(省略可、デフォルトはFalse)、strUserはユーザー名、strPasswordはパスワードである。
※ネットワーク・ベースの接続の場合
objWshNetwork.AddWindowsPrinterConnection strPrinterPath,[strDriverName[,strPort]]
strPrinterPathはリモート・プリンタのUNCパスである。strDriverNameはドライバ名、strPortはプリンタ・ポート名であるが、Windows NT系列のOS(Windows 2000/Windows XP/Windows Vista/Windows Server 2003/Windows Server 2008など)では指定する必要はない。
例えばwindowsxpproという名前のコンピュータのumaumaという共有プリンタに接続するには、次のようにすればよい。
Option Explicit
Dim objWshNetwork
Set objWshNetwork = WScript.CreateObject("WScript.Network")
objWshNetwork.AddWindowsPrinterConnection "\\windowsxppro\umauma"
Set objWshNetwork = Nothing
また、LPT1ポートにプリンタを接続したい場合は次のようにする。
Option Explicit
Dim objWshNetwork
Set objWshNetwork = WScript.CreateObject("WScript.Network")
objWshNetwork.AddPrinterConnection "LPT1","\\windowsxppro\umauma"
Set objWshNetwork = Nothing
筆者の環境では、共有プリンタを使う側(すなわちスクリプトを実行する側)のPCにドライバがない場合、メソッドの実行は失敗した。あらかじめ、手動でインストールしておく必要があるようだ。
ネットワーク・プリンタの切断にはRemovePrinterConnectionメソッドを用いる。
objWshNetwork .RemovePrinterConnection strName, [bForce], [bUpdateProfile]
strNameはローカル・ポート名もしくはネットワーク・プリンタのUNCパスを指定する。すなわち、AddWindowsPrinterConnectionメソッドとAddPrinterConnectionメソッドのどちらで接続した場合でも、このメソッドで切断できる。bForceは強制切断をするためのフラグだ(省略可、デフォルトはFalse)。bUpdateProfileはAddPrinterConnectionメソッドの引数と同様の意味を持つ(省略可)。
例えば次のように使用する。
※通常のネットワーク・プリンタの切断例
Option Explicit
Dim objWshNetwork
Set objWshNetwork = WScript.CreateObject("WScript.Network")
objWshNetwork.RemovePrinterConnection "\\windowsxppro\umauma"
Set objWshNetwork = Nothing
※ローカル・ポートに接続したネットワーク・プリンタの切断例
Option Explicit
Dim objWshNetwork
Set objWshNetwork = WScript.CreateObject("WScript.Network")
objWshNetwork.RemovePrinterConnection "LPT1"
Set objWshNetwork = Nothing
前者は通常のネットワーク・プリンタの切断、後者はローカル・ポートに接続されたネットワーク・プリンタの切断である。
EnumPrinterConnectionsメソッドはネットワーク・プリンタの列挙を行うメソッドである(仕様かどうか不明であるが、Windows XPやWindows Vistaではネットワーク・プリンタであるかどうかにかかわらず、システムに含まれる全プリンタが列挙される)。ネットワーク・プリンタを接続した状態で以下のようなスクリプトを実行してもらいたい。
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
実行すると例えば次のように「ローカル・ポート名 : ネットワーク・プリンタのUNCパス」のようにネットワーク・プリンタの個数分だけリストが表示される。
このスクリプトで注意するポイントは、EnumPrinterConnectionsメソッドが、ネットワーク・プリンタの情報を格納したWshCollectionオブジェクト(コレクション)を返す点と、WshCollectionオブジェクトの偶数項目(Itemメソッドの引数=0、2、4、……)にはローカル・ポート名が、偶数項目(1、3、5、……)にはネットワーク・プリンタのUNCパスが格納されている点である。
文章だと分かりにくいかもしれないので表にしてみよう。
Itemメソッドの引数 | 格納される値 |
---|---|
0 | 1番目のネットワーク・プリンタのポート名 |
1 | 1番目のネットワーク・プリンタのUNCパス |
2 | 2番目のネットワーク・プリンタのポート名 |
3 | 2番目のネットワーク・プリンタのUNCパス |
…… | …… |
EnumPrinterConnectionsメソッドによって返されるWshCollectionオブジェクト・コレクションの内容 |
このため、For 〜 Nextループは0から2ずつ、総数(Countメソッドの戻り値)−1までカウンタを動かし、その中で偶数項目と対応する奇数項目(偶数項目+1)の値を参照しているわけだ。
SetDefaultPrinterメソッドは、その名のとおりデフォルト・プリンタを設定するメソッドだ。書式は次のとおり。
objWshNetwork.SetDefaultPrinter strPrinterName
strPrinterNameにはデフォルト・プリンタにするネットワーク・プリンタのUNCパスを指定する(実際はローカル・プリンタもデフォルト・プリンタに設定可能である)。
例えば「\\windowsxppro\umauma」というプリンタをデフォルト・プリンタにするには次のようにする。
Option Explicit
Dim objWshNetwork
Set objWshNetwork = WScript.CreateObject("WScript.Network")
objWshNetwork.SetDefaultPrinter "\\windowsxppro\umauma"
Set objWshNetwork = Nothing
例題を1つ出そう。\\windowsxppro\umaumaというネットワーク・プリンタに接続し、それをデフォルト・プリンタにするスクリプトを考えてもらいたい。
マーカーで隠れたところを選択してチェックしてみよう。
Option Explicit
Dim objWshNetwork
Set objWshNetwork = WScript.CreateObject("WScript.Network")
Dim strPrinterPath
strPrinterPath = "\\windowsxppro\umauma"
'プリンタを接続
objWshNetwork.AddWindowsPrinterConnection strPrinterPath
'接続したプリンタをデフォルト・プリンタにする
objWshNetwork.SetDefaultPrinter strPrinterPath
Set objWshNetwork = Nothing
特に難しいところはないだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.