Windows

ネットワークプリンターを設定するVBS

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 説明:   ネットワークプリンターを設定する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
このページの先頭へ