0

スクリプトのエラーが実際にはWMIが競合する情報や誤った情報を返していることが原因であることがわかったときに、リモートコンピューターの既定のプリンターを照会するように設計されたvbscriptのトラブルシューティングを行っていました。このスクリーンショットを参照してください: 代替テキスト

どちらも同じコンピューター(CLIFGRIFFIN-PC)に対してです。左側は、WindowsServer2003のインストールから実行されます。正しいものはPC自体で実行されます。

左側の1つは、結果が少ないことに加えて、デフォルトのプリンターがないことも示しています。これが、私がこれを調査することになったスクリプトエラーの原因です。

何か案は?それはただ奇妙です。

編集: これが私が使用しているコードです...

Set WshShell = CreateObject("WScript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set oPrinters = WshNetwork.EnumPrinterConnections

Dim strComputer 
strComputer = WshShell.ExpandEnvironmentStrings("%CLIENTNAME%")

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters =  objWMIService.ExecQuery ("Select * from Win32_Printer Where Default = True")

For Each Printer in colInstalledPrinters
    For i = 0 to OPrinters.Count - 1 Step 2
        If InStr(objPrinters.Item(i+1), Printer.Name) > 0 Then
            WshNetwork.SetDefaultPrinter(objPrinters.Item(i+1))
            Exit For
        End If
    Next
Next 
4

2 に答える 2

0

言われたように、ログインしているユーザーに依存する場合があります。

リモート PC からクエリを実行すると、結果としてローカルにインストールされたプリンターのみが取得されます。同じ PC からクエリを実行すると、ネットワークに接続されたすべてのプリンターも取得されます。ここにネットワークが接続されているということは、それらが他の PC で共有されていることを意味します。

ネットワーク プリンターを追加するときに少し混乱しますが、Windows ではローカルと呼ばれますが、IP ポートがあります。

于 2010-11-14T15:31:27.887 に答える
0

偽装レベルを偽装するように設定してみてください。

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
于 2010-11-15T07:01:37.933 に答える