第8回 WshNetworkオブジェクトの詳細:Windows管理者のためのWindows Script Host入門(3/3 ページ)
ユーザー情報に基づく処理を可能にするユーザー名やコンピュータ名の取得方法と、ネットワーク・ドライブ/プリンタの利用法。
ネットワーク・プリンタの接続 ―― AddWindowsPrinterConnection、AddPrinterConnectionメソッド ――
新しいクライアント・コンピュータを追加する場合や新しいユーザーをネットワークに追加する場合など、利用可能なプリンタの設定は煩わしい作業の1つだろう。モノクロ・レーザーやカラー・レーザー、カラー・インクジェットなど、用途に応じて複数のプリンタを選択可能にしている場合には、各プリンタの場所を確認してインストールし、デフォルトのプリンタ(デフォルトの出力先になるプリンタ)を設定しなければならない。WSHを利用して、あらかじめプリンタの設定用スクリプトで準備しておけば、そのような面倒な設定作業を効率化できる。
AddWindowsPrinterConnectionメソッドとAddPrinterConnectionメソッドは、ネットワーク上のプリンタへの接続を行うメソッドである。AddWindowsPrinterConnectionメソッドは、コントロール・パネルの「プリンタとFAX」でプリンタを追加するのと同様に、Windowsベースの接続を行う。この方法でプリンタを接続すれば、以後はWindowsアプリケーションから印刷できるようになる(Windowsアプリケーションの「印刷」ダイアログに表示されるようになる)。
一方AddPrinterConnectionメソッドでは、MS-DOSベースのプリンタ接続を行う。MS-DOSベースのプリンタ接続とは、コマンド・プロンプトの「LPT1」などのプリンタ・ポートにプリンタを接続することだ。ここで接続したプリンタへの印刷は、コマンド・プロンプトからprintコマンドなどを利用して行う。
Windows NT、2000、XP、2003上からWindowsベースの接続を行うには、単にプリンタのUNC名をAddWindowsPrinterConnectionメソッドに渡すだけでよい。次のコードで「\\Server\Printer1」というプリンタに接続を行うことができる。Windows 95、98、MeではプリンタのUNC名だけでなくドライバ名を指定する必要があるが、この連載では説明しない。これらの詳細が必要なら、MSDNライブラリを参照されたい。
Set objNetwork = WScript.CreateObject("WScript.Network")
objNetwork.AddWindowsPrinterConnection "\\Server\Printer1"
AddPrinterConnectionメソッドを利用してMS-DOSベースの接続を行うには、プリンタのUNC名に加え、接続するポート名を指定する。また、MapNetworkDriveメソッド同様、省略可能な第3、第4、第5パラメータで、プロファイル設定の記録(TrueまたはFalse)と、接続先のユーザー名、パスワードを指定できる。
objNetwork.AddPrinterConnection ポート名, UNC名 [,プロファイル設定][,ユーザー名][,パスワード]
接続に成功しても、MS-DOSベースの接続はコントロール・パネルの「プリンタとFAX」には表示されないので、接続状況を確認するには、コマンド・プロンプトで「net use」コマンドを実行するか、後述するEnumPrinterConnectionsを利用したスクリプトなどを使う。次の例では、プリンタ・ポートに「LPT2」を指定している。
Set objNetwork = WScript.CreateObject("WScript.Network")
objNetwork.AddPrinterConnection "LPT2", "\\Server\Printer2"
ネットワーク・プリンタの切断 ―― RemovePrinterConnectionメソッド ――
RemovePrinterConnectionメソッドは、ネットワーク・プリンタを切断するメソッドである。次のようにして使う。
objNetwork.RemovePrinterConnection プリンタ名[,強制切断][,プロファイル設定]
パラメータ | 型 | デフォルト* | 意味 |
---|---|---|---|
第1パラメータ(strName) | 文字列 | − | 切断するネットワーク・プリンタのプリンタ名(省略不可) |
第2パラメータ(bForce) | Boolean | False | 強制切断の可否(使用中でも強制的に切断するかどうか) |
第3パラメータ (bUpdateProfile) |
Boolean | False | ユーザー・プロファイル情報の削除 |
RemovePrinterConnectionのパラメータ *パラメータ指定を省略した場合の選択肢 |
RemoveNetworkDrive同様、第2、第3パラメータは省略可能である。このメソッドはAddWindowsPrinterConnection、AddPrinterConnectionのどちらを利用した接続でも切断することができる。AddWindowsPrinterConnectionを使用して接続したプリンタを切断するにはプリンタ名としてプリンタのUNC名を指定し、AddPrinterConnectionを使用して接続した場合には接続の際に設定したポート名を指定する。第2パラメータにはプリンタが使用中だった場合の処理方法(True=強制切断する、False=強制切断しない)を、第3パラメータにはプロファイル設定から接続情報を削除するかどうか(True=削除する、False=削除しない)を指定する。この2つのパラメータが省略された場合には、いずれもFalseとして処理される。
次にRemoveNetworkDriveを使用したコードのサンプルを挙げておく。
Set objNetwork = WScript.CreateObject("WScript.Network")
objNetwork.RemoveNetworkDrive "\\Server\Printer1"
objNetwork.RemoveNetworkDrive "LPT2"
ネットワーク・プリンタ一覧の取得 ―― EnumPrinterConnectionsメソッド ――
EnumPrinterConnectionsメソッドは、ネットワーク・プリンタの一覧を返すメソッドである。EnumNetworkDrivesと同様に、ローカル名とUNC名を交互に格納したコレクションが返される。0番目、2番目、4番目など偶数番目のアイテムがローカル名、1番目、3番目、5番目など奇数番目のアイテムがUNC名となる。次のサンプルはネットワーク・プリンタの個数とそれぞれの接続先を表示する。
1: Set objNetwork = WScript.CreateObject("WScript.Network")
2: Set colPrinters = objNetwork.EnumPrinterConnections
3: WScript.Echo "ネットワーク・プリンタは" & (colPrinters.Count / 2) & "個あります。"
4: WScript.Echo "ネットワーク・プリンタの一覧を表示します:"
5: For i = 0 to colPrinters.Count - 1 Step 2
6: Wscript.Echo colPrinters.Item(i) & " → " & colPrinters.Item (i + 1)
7: Next
実行結果は以下のようになる。
D:\WSH > cscript enumprinter.vbs
ネットワーク・プリンタは3個あります。
ネットワーク・プリンタの一覧を表示します:
LPT2 → \\Server01\PM-890C
192.168.0.92:lp2 → \\Server01\IPSiO Color 2200
IP_192.168.0.93 → \\SERVER01\LP-7900
D:\WSH>
デフォルト・プリンタの設定 ―― SetDefaultPrinterメソッド ――
SetDefaultPrinterメソッドは、デフォルトのプリンタを変更するメソッドである。印刷時に明示的にプリンタを指定しなければ、デフォルトのプリンタが使用される。MS-DOSベースのプリンタ接続では、デフォルトのプリンタを設定することはできないので、このメソッドは、AddWindowsPrinterConnectionで接続したプリンタか、手作業で接続したWindowsベースのプリンタ接続でのみ利用できる。使い方は、プリンタのUNC名を指定するだけである。
objNetwork.SetDefaultPrinter プリンタ名
次のコードは、\\Server\Printer1をデフォルトのプリンタに指定する。
Set objNetwork = WScript.CreateObject("WScript.Network")
objNetwork.SetDefaultPrinter "\\Server\Printer1"
コンピュータ名とユーザー情報の取得 ―― ComputerNameプロパティ、UserDomainプロパティ、UserNameプロパティ ――
ComputerName、UserDomain、UserNameの各プロパティを利用すると、スクリプトを実行しているコンピュータの名前と、スクリプトを実行しているユーザーのドメイン・ユーザー名を取得できる。ただしWshNetworkオブジェクトで取得できる情報はこの3つだけだ。Active Directoryに登録されている名前(姓と名)や表示名、メール・アドレス、所属するグループなど、さらに詳細な情報が必要な場合は、ADSI(Active Directory Service Interface)を利用する必要がある。
典型的な用途としては、UserNameプロパティで、スクリプトを実行するユーザーによって処理を切り替えるなどがあるだろう。ただしこれら3つのプロパティは読み取り専用で、データを変更することはできない。
Set objNetwork = WScript.CreateObject("WScript.Network")
WScript.Echo objNetwork.ComputerName
WScript.Echo objNetwork.UserDomain
WScript.Echo objNetwork.UserName
この例は、コンピュータ名とドメイン名、ユーザー名を単に出力するだけのコードである。実行すると次のような情報が得られる。
D:\WSH > cscript userinfo.vbs
DAPC21
D-ADVANTAGE
tomo-k
D:\WSH>
ユーザーによって処理を切り替えるには、次のようにする。この例では、「tomo-k」というユーザーが実行したときのみネットワーク・ドライブの設定を行う。
Set objNetwork = WScript.CreateObject("WScript.Network")
If objNetwork.UserName = "tomo-k" Then
objNetwork.MapNetworkDrive "X:", "\\Server\Share1"
End If
今回はWshNetworkオブジェクトについて解説した。次回はWshControllerオブジェクトの解説を行う。
Copyright© Digital Advantage Corp. All Rights Reserved.