Hi,
ich lese schon lange in eurem Forum und konnte viele Anregungen holen und Probleme lösen, aber momentan habe ich eines, was hier noch nicht besprochen wurde. Es geht um das leidige Thema der Druckerinstallation. Ich habe ein Tool geschrieben was von mehreren Servern per WMI die Installierten Netzwerkdrucker holt und dem Benutzer zur Auswahl stellt.
Der Aufruf des Namens, des Kommentares, des Ortes etc. funltioniert wunderbar. Aber sobald ich den ServerName wert Auslesen möchte, kriege ich NULL zurück.
Hier ist der Quellcode des Aufrufes:
[autoit]
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$objWMIService = ObjGet("winmgmts:\\server1\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$Output = $Output & "\\server1\" & $objItem.Name & " "
;~ if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
;~ $Output=""
Next
GUICtrlSetData($List1,$Output)
Else
Endif
[/autoit]Das Funktioniert auch wunderbar. Ich kriege die Namen des Druckers aufgelistet. Wenn ich aber den wert "ServerName" auslesen möchte:
[autoit]$objWMIService.ExecQuery("Select servername FROM Win32_Printer")
[/autoit]passiert gar nichts, bzw. ich kriege keine ausgabe. Im Internet gibt es einige Scripte (Auch in anderen Scriptsprachen) wie man die ServerName ausliest, aber hier in meinem Fall scheint es nicht zu funktionieren. Mein Rechner läuft mit Windows Xp, der Server mit Windows 2003
Für jede Hilfe wäre ich sehr dankbar, ich kann auch das komplette Script posten, aber es ist stark durcheinander und kaum Dokumentiert:
[autoit]#include <GUIConstants.au3>
#Include <GuiListView.au3>
#include <ListboxConstants.au3>
#Region ### START Koda GUI section ### Form=C:\Dokumente und Einstellungen\user\Eigene Dateien\Form1.kxf
$Form1_1 = GUICreate("Form1", 633, 447, 369, 337)
$List1 = GUICtrlCreateList("", 0, 56, 177, 383)
$Label1 = GUICtrlCreateLabel("Druckerinstaller", 264, 8, 208, 28)
GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
;$Icon1 = GUICtrlCreateIcon("C:\WINDOWS\system32\shell32.dll", -17, 560, 8, 32, 32,, )
$Label2 = GUICtrlCreateLabel("Verfügbare Drucker:", 8, 24, 100, 17)
;$Label3 = GUICtrlCreateLabel("", 376, 104, 4, 4)
;$Edit1 = GUICtrlCreateEdit("", 312, 80, 73, 49, $ES_WANTRETURN)
GUICtrlSetData(-1, "verfügbare Drucker:")
;$Progress1 = GUICtrlCreateProgress(192, 416, 161, 25)
;$Label4 = GUICtrlCreateLabel("Label4", 440, 80, 36, 17)
$Button1 = GUICtrlCreateButton("Installieren", 184, 72, 113, 57, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
AutoItSetOption("GUIDataSeparatorChar", " ")
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItem = ""
$Output=""
$colItem2 = ""
$Output2=""
$strComputer = "wupper"
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
[/autoit][autoit][/autoit][autoit]For $objItem In $colItems
$Output = $Output & "\\wupper\" & $objItem.Name & " "
;~ if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
;~ $Output=""
Next
GUICtrlSetData($List1,$Output)
Else
Endif
[/autoit][autoit][/autoit][autoit]$objWMIService2 = ObjGet("winmgmts:\\" & "spree" & "\root\CIMV2")
$colItems2 = $objWMIService2.ExecQuery("SELECT * FROM Win32_Printer", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems2) then
[/autoit][autoit][/autoit][autoit]For $objItem2 In $colItems2
$Output2 = $Output2 & $objItem2.Name & " "
;~ if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
;~ $Output=""
Next
GUICtrlSetData($List1,$Output2)
Else
Endif
$auswahl = 0
$fArray = 0
$auswahl = GUICtrlRead($List1)
If $auswahl > 0 then
MsgBox(1,"",$auswahl)
EndIf
$test = 0
$test = $objWMIService.ExecQuery("Select servername FROM Win32_Printer where name='S6_Flur'")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$auswahl = GUICtrlRead($List1)
;MsgBox(1,"",$objWMIService.ExecQuery("SELECT Status FROM Win32_Printer WHERE Name = S6_Flur", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly))
MsgBox(1,"",$test)
;Run("rundll32 printui.dll,PrintUIEntry /q /in /n "& $auswahl,"",@SW_HIDE )
EndSwitch
WEnd