2010-11-04 25 views
0

Je résolvais certains vbscript conçu pour interroger l'imprimante par défaut d'un ordinateur distant lorsque j'ai découvert que l'erreur dans le script était en réalité parce que WMI renvoie des informations contradictoires ou même erronées. S'il vous plaît voir cette capture d'écran: alt textPourquoi WMI renvoie-t-il des résultats différents pour le même ordinateur?

Les deux sont contre le même ordinateur (CLIFGRIFFIN-PC). Celui de gauche est exécuté à partir d'une installation de Windows Server 2003. La bonne est exécutée sur le PC lui-même.

La gauche, en plus d'avoir moins de résultats, montre également que AUCUNE des imprimantes est par défaut. Quelle est la cause de l'erreur de script qui m'a conduit à enquêter sur cela.

Des idées? C'est juste bizarre.

EDIT: Voici le code que je utilise ...

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 
+1

Je crois que les résultats dépendent de l'utilisateur compte le script est exécuté par. Différents comptes peuvent avoir une imprimante par défaut différente, et certaines imprimantes peuvent ne pas être installées pour tous les comptes. –

+0

Les comptes sont les mêmes. C'est une bonne idée cependant ... quelque chose à retenir pour l'avenir. D'autres idées? :) – clifgriffin

Répondre

0

Il peut dépendre du loged en tant qu'utilisateur ont été dit. Lorsque vous interrogez à partir d'un ordinateur distant, vous n'obtiendrez que des imprimantes installées localement. Lorsque vous interrogez à partir du même ordinateur, vous obtenez également toutes les imprimantes connectées au réseau. Le réseau connecté ici signifie qu'ils sont partagés sur d'autres ordinateurs.

Il y a un peu de confusion lorsque vous ajoutez une imprimante réseau mais elle est appelée locale dans Windows mais elle possède un port ip.

+0

Le nombre d'imprimantes n'est pas aussi dérangeant pour moi que celui par défaut. C'est celui qui provoque la bombe de ma requête WMI. – clifgriffin

0

Essayez de régler le niveau d'emprunt d'identité pour usurper l'identité savoir

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
+0

J'ai mis à jour mon message avec le code que j'essaie d'utiliser qui échoue à cause de cela. J'utilise en fait usurpation d'identité ... aurait probablement dû vous donner toutes les informations. Pardon :) – clifgriffin