''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 説明: ネットワークプリンターを設定するVBS
' 作成日: 2008/02/29
' 改定日: 2008/04/04
'
' 補足1: 上手く動作しない時は On Error Resume Next をコメントアウトして実行すること
' 補足2: 自分自身(このスクリプトを動作させるPC)がプリンターサーバーだと
' 上手く動作しない可能性アリ。何故かは現時点で不明 -仕様の可能性アリ-
' エラーメッセージは 8007007B
' 補足3: プリンター設定用フラグを用意。
' 各クライアントPCでプリンターの(再)設定を行う場合は、printerSettingFlagパラメータを1に設定のこと
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'変数宣言を強制
Option Explicit
' プリンターを追加するFunction
Function connectPrinter(printerPath)
On Error Resume Next
Dim net
Set net = WScript.CreateObject("WScript.Network")
net.AddWindowsPrinterConnection printerPath
End Function
' デフォルトプリンターを設定するFunction
Function setDefaultPrinter(printerPath)
On Error Resume Next
Dim net
Set net = WScript.CreateObject("WScript.Network")
net.SetDefaultPrinter printerPath
End Function
'ローカルPCのプリンタエントリを消去
Sub delPrinters
On Error Resume Next
Dim strComputer
Dim objWMIService
Dim colInstalledPrinters
Dim objPrinter
Dim net
Dim OSInfoCollection
Dim OSInfo
Dim i
Set OSInfoCollection = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
' OSによって初期化方法が違うので分岐させる
' ループはコレクションの1番目を参照するためのみの役割
For Each OSInfo In OSInfoCollection
'Windows2000
If OSInfo.Version = "5.0.2195" Then
Set net = createobject("wscript.network")
Set objPrinter = net.EnumPrinterConnections
For i = objPrinter.count-1 To 1 step -2
If Instr(objPrinter.item(i),"[") <> 0 or Instr(objPrinter.item(i),"\") <> 0 Then
net.RemovePrinterConnection objPrinter.item(i)
End If
Next
' Windows XP
ElseIf OSInfo.Version >= "5.1.2600" Then
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer Where Network = TRUE")
For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next
End If
Next
End Sub
Sub main
On Error Resume Next
Dim strComputer
Dim objWMIService
Dim colItems
Dim objItem
Dim arrIPAddress
Dim printerSettingFlag
' 1の場合は再設定(再設定用フラグ)
printerSettingFlag = 0
'ローカルPCのネットワークアダプタオブジェクトを取得
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
For Each objItem in colItems
'IPアドレスを"."で分割し、ネットワーク部とホスト部に分ける
arrIPAddress = Split(objItem.IPAddress(0), ".")
'ネットワーク部が 192.168.* か?
If arrIPAddress(0) = "192" and arrIPAddress(1) = "168" Then
Select Case arrIPAddress(2)
''' Debug '''
Case 1
'printerSettingFlag = 1
If printerSettingFlag = 1 Then
delPrinters
connectPrinter "\\192.168.1.100\PIX"
setDefaultPrinter "\\192.168.1.100\PIX"
'End If
'ネットワーク部が 172.16.* か?
If arrIPAddress(0) = "172" and arrIPAddress(1) = "16" Then
Select Case arrIPAddress(2)
Case 0,1,2,3
'本社
'printerSettingFlag = 1
If printerSettingFlag = 1 Then
delPrinters
connectPrinter "\\dc\ PRT01 LBP-300"
...
setDefaultPrinter "\\dc\ PRT01 LBP-300"
End If
End Select
End If
Next
End Sub
main
' 説明: ネットワークプリンターを設定するVBS
' 作成日: 2008/02/29
' 改定日: 2008/04/04
'
' 補足1: 上手く動作しない時は On Error Resume Next をコメントアウトして実行すること
' 補足2: 自分自身(このスクリプトを動作させるPC)がプリンターサーバーだと
' 上手く動作しない可能性アリ。何故かは現時点で不明 -仕様の可能性アリ-
' エラーメッセージは 8007007B
' 補足3: プリンター設定用フラグを用意。
' 各クライアントPCでプリンターの(再)設定を行う場合は、printerSettingFlagパラメータを1に設定のこと
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'変数宣言を強制
Option Explicit
' プリンターを追加するFunction
Function connectPrinter(printerPath)
On Error Resume Next
Dim net
Set net = WScript.CreateObject("WScript.Network")
net.AddWindowsPrinterConnection printerPath
End Function
' デフォルトプリンターを設定するFunction
Function setDefaultPrinter(printerPath)
On Error Resume Next
Dim net
Set net = WScript.CreateObject("WScript.Network")
net.SetDefaultPrinter printerPath
End Function
'ローカルPCのプリンタエントリを消去
Sub delPrinters
On Error Resume Next
Dim strComputer
Dim objWMIService
Dim colInstalledPrinters
Dim objPrinter
Dim net
Dim OSInfoCollection
Dim OSInfo
Dim i
Set OSInfoCollection = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
' OSによって初期化方法が違うので分岐させる
' ループはコレクションの1番目を参照するためのみの役割
For Each OSInfo In OSInfoCollection
'Windows2000
If OSInfo.Version = "5.0.2195" Then
Set net = createobject("wscript.network")
Set objPrinter = net.EnumPrinterConnections
For i = objPrinter.count-1 To 1 step -2
If Instr(objPrinter.item(i),"[") <> 0 or Instr(objPrinter.item(i),"\") <> 0 Then
net.RemovePrinterConnection objPrinter.item(i)
End If
Next
' Windows XP
ElseIf OSInfo.Version >= "5.1.2600" Then
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer Where Network = TRUE")
For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next
End If
Next
End Sub
Sub main
On Error Resume Next
Dim strComputer
Dim objWMIService
Dim colItems
Dim objItem
Dim arrIPAddress
Dim printerSettingFlag
' 1の場合は再設定(再設定用フラグ)
printerSettingFlag = 0
'ローカルPCのネットワークアダプタオブジェクトを取得
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
For Each objItem in colItems
'IPアドレスを"."で分割し、ネットワーク部とホスト部に分ける
arrIPAddress = Split(objItem.IPAddress(0), ".")
'ネットワーク部が 192.168.* か?
If arrIPAddress(0) = "192" and arrIPAddress(1) = "168" Then
Select Case arrIPAddress(2)
''' Debug '''
Case 1
'printerSettingFlag = 1
If printerSettingFlag = 1 Then
delPrinters
connectPrinter "\\192.168.1.100\PIX"
setDefaultPrinter "\\192.168.1.100\PIX"
'End If
'ネットワーク部が 172.16.* か?
If arrIPAddress(0) = "172" and arrIPAddress(1) = "16" Then
Select Case arrIPAddress(2)
Case 0,1,2,3
'本社
'printerSettingFlag = 1
If printerSettingFlag = 1 Then
delPrinters
connectPrinter "\\dc\ PRT01 LBP-300"
...
setDefaultPrinter "\\dc\ PRT01 LBP-300"
End If
End Select
End If
Next
End Sub
main





