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

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

WSHでネットワーク・プリンタやネットワーク・ドライブを操作してみよう。プリンタの追加や、ネットワーク・ドライブのマップ方法について解説する。

[牟田口大介(Microsoft MVP Data Center Management - Admin Frameworks),著]
基礎解説 演習方式で身につけるチェック式WSH超入門
Windows Server Insider


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

連載目次

 前回まででWSHの内部オブジェクトであるWshShellオブジェクトについて解説した。今回は、これもWSHの内部オブジェクトの1つである、WshNetworkオブジェクトについて解説する。

WshNetworkオブジェクト

 これまでの例にならって、まずはWshNetworkオブジェクト(ProgIDは"WScript.Network")をオブジェクト・モデル図で概観してみよう。

WshNetworkオブジェクトのオブジェクト・モデル図
WshNetworkオブジェクトにはこのようなメンバ(プロパティ/メソッド)およびそこから呼び出し可能なWshCollectionオブジェクトが存在する。

 このように、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メソッドの使用例
このように「ローカル・ポート名 : ネットワーク・プリンタのUNCパス」のリストが表示される。この例では2つのプリンタが列挙されている。

 このスクリプトで注意するポイントは、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というネットワーク・プリンタに接続し、それをデフォルト・プリンタにするスクリプトを考えてもらいたい。

CHECK!

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


Option Explicit

Dim objWshNetwork
Set objWshNetwork = WScript.CreateObject("WScript.Network")

Dim strPrinterPath
strPrinterPath = "\\windowsxppro\umauma"

'プリンタを接続
objWshNetwork.AddWindowsPrinterConnection strPrinterPath

'接続したプリンタをデフォルト・プリンタにする
objWshNetwork.SetDefaultPrinter strPrinterPath

Set objWshNetwork = Nothing

 特に難しいところはないだろう。


       1|2 次のページへ

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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