Powershell Get-WMIObject
Hiho,
und die besten grüße aus Braunschweig.
Ich bastel mir imo ein kleines Tool (GUI), das folgendes können muss:
- alle installierten Drucker auslesen
- Druckerspooler starten/stoppen/restarten
- den Drucker Status auslesen kann und Fehler anzeigt
- und es soll die Möglichkeit geben die Druckaufträge für den ausgewählten Drucker zu löschen
HIER HABE ICH MEIN PROBLEM!
Und zwar:
$global:AllPrinter = Get-WmiObject Win32_Printer -ErrorAction SilentlyContinue
(Get-WmiObject -Class win32_printer -Filter "name=$allprinter[$LSTBox.SelectedIndex].name").CancelAllJobs()
In einer Listbox sind alle installierten Drucker eingetragen. Ich rufe den Index der ListBox ab, um den ausgewählten
Drucker herauszufinden. Beim ausführen kommt aber folgende Fehlermeldung
Get-WmiObject : Die Anfrage ist ungültig. "select * from win32_printer where name=\\PC12004\root\cimv2:Win32_Printer.DeviceID="Kyocera TASKalfa 3500i KX"
\\PC12004\root\cimv2:Win32_Printer.DeviceID="\\\\sv09004v02\\DR10016" \\PC12004\root\cimv2:Win32_Printer.DeviceID="\\\\sv09004v02\\Farblaser-Verwaltung"[System.Windows.Forms.ListBox,
Items.Count: 3, Items[0]: Kyocera TASKalfa 3500i KX.SelectedIndex].name"
In C:\print_device_mngr_gui.ps1:107 Zeichen:15
+ FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\print_device_mngr_gui.ps1:107 Zeichen:5
+ FullyQualifiedErrorId : InvokeMethodOnNull
Hat jemand eine Lösung oder Denkanstoss für mich.
Danke schon mal im Voraus.
Gruß
Chris
und die besten grüße aus Braunschweig.
Ich bastel mir imo ein kleines Tool (GUI), das folgendes können muss:
- alle installierten Drucker auslesen
- Druckerspooler starten/stoppen/restarten
- den Drucker Status auslesen kann und Fehler anzeigt
- und es soll die Möglichkeit geben die Druckaufträge für den ausgewählten Drucker zu löschen
HIER HABE ICH MEIN PROBLEM!
Und zwar:
$global:AllPrinter = Get-WmiObject Win32_Printer -ErrorAction SilentlyContinue
(Get-WmiObject -Class win32_printer -Filter "name=$allprinter[$LSTBox.SelectedIndex].name").CancelAllJobs()
In einer Listbox sind alle installierten Drucker eingetragen. Ich rufe den Index der ListBox ab, um den ausgewählten
Drucker herauszufinden. Beim ausführen kommt aber folgende Fehlermeldung
Get-WmiObject : Die Anfrage ist ungültig. "select * from win32_printer where name=\\PC12004\root\cimv2:Win32_Printer.DeviceID="Kyocera TASKalfa 3500i KX"
\\PC12004\root\cimv2:Win32_Printer.DeviceID="\\\\sv09004v02\\DR10016" \\PC12004\root\cimv2:Win32_Printer.DeviceID="\\\\sv09004v02\\Farblaser-Verwaltung"[System.Windows.Forms.ListBox,
Items.Count: 3, Items[0]: Kyocera TASKalfa 3500i KX.SelectedIndex].name"
In C:\print_device_mngr_gui.ps1:107 Zeichen:15
$Test = (Get-WmiObject -Class win32_printer -Filter "name=$allprinter[$LSTB ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: ( [Get-WmiObject], ManagementException+ FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\print_device_mngr_gui.ps1:107 Zeichen:5
$Test = (Get-WmiObject -Class win32_printer -Filter "name=$allprinter[$LSTB ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: ( [], RuntimeException+ FullyQualifiedErrorId : InvokeMethodOnNull
Hat jemand eine Lösung oder Denkanstoss für mich.
Danke schon mal im Voraus.
Gruß
Chris
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 227956
Url: https://administrator.de/contentid/227956
Ausgedruckt am: 22.11.2024 um 07:11 Uhr
15 Kommentare
Neuester Kommentar
Hallo Chris, Wilkommen im Forum!
das kann ja wohl unmöglich der Name deines Druckers sein:
der solltte wohl eher
lauten. Deswegen ist das Objekt Leer und hat keine Methode mit CancelJobs also musst du den korrekten Namen noch zurechtstutzen oder deine Listbox mit den richtigen Namen füllen wie hier:
Grüße Uwe
das kann ja wohl unmöglich der Name deines Druckers sein:
\\PC12004\root\cimv2:Win32_Printer.DeviceID="Kyocera TASKalfa 3500i KX"
Kyocera TASKalfa 3500i KX
gwmi "Win32_Printer" | %{$LSTBox.Items.Add($_.Name)}
Grüße Uwe
Zitat von @chrrs83:
Hab ich bemerkt und dann auch richtig übertragen:
Jetzt erhalte ich den Fehler bei 2 von 3 Testdruckern...
Der Eintrag geht: Kyocera TASKalfa 3500i KX
Der Eintrag geht nicht: \\sv09004v02\DR10016
hast du bzw. dein Script denn überhaupt die entsprechenden Berechtigungen die Warteschlange des Netzwerkdruckers zu löschen ? Normale User dürfen das nämlich normalerweise nichtHab ich bemerkt und dann auch richtig übertragen:
Jetzt erhalte ich den Fehler bei 2 von 3 Testdruckern...
Der Eintrag geht: Kyocera TASKalfa 3500i KX
Der Eintrag geht nicht: \\sv09004v02\DR10016
Schreib die Zeile besser so, dann bekommst du keine Probleme mit Backslashes im SQL-Filter
in SQL müssten die nämlich alle verdoppelt werden. Wenn dir obige Zeile nicht in den Kram passt dann mach sie so: die ersetzt eventuell vorhandene Backslashes durch doppelte:
Get-WmiObject -Class win32_printer | ?{$_.Name -eq $allprinter[$LSTBox.SelectedIndex].name} | %{$_.CancelAllJobs()}
(Get-WmiObject -Class win32_printer -Filter "Name='$($allprinter[$LSTBox.SelectedIndex].name.Replace("\","\\"))'").CancelAllJobs()
hallo,
Get-WmiObject -Class win32_printer | ?{$_.Name -eq $allprinter[$LSTBox.SelectedIndex].name} | %{$_.CancelAllJobs()}
hab den Befehl nun bei mir ausprobiert, aber ich bekomme natürlich einen Fehler. Es hängt mit dem Array zusammen, da es bei mir natürlich leer ist. Denke ich zumindest. Fehlermeldung sieht wie folgt aus:
Es ist nicht möglich, einen Index auf ein NULL-Array anzuwenden.
In Zeile:1 Zeichen:40
+ FullyQualifiedErrorId : NullArray
Ist meine Vermutung mit dem leeren Array richtig?
Gruß Saih
Get-WmiObject -Class win32_printer | ?{$_.Name -eq $allprinter[$LSTBox.SelectedIndex].name} | %{$_.CancelAllJobs()}
hab den Befehl nun bei mir ausprobiert, aber ich bekomme natürlich einen Fehler. Es hängt mit dem Array zusammen, da es bei mir natürlich leer ist. Denke ich zumindest. Fehlermeldung sieht wie folgt aus:
Es ist nicht möglich, einen Index auf ein NULL-Array anzuwenden.
In Zeile:1 Zeichen:40
... printer | ?{$_.Name -eq $allprinter[$LSTBox.SelectedIndex].name} | %{ ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: ( , RuntimeException+ FullyQualifiedErrorId : NullArray
Ist meine Vermutung mit dem leeren Array richtig?
Gruß Saih
da es bei mir natürlich leer ist.
Dann ist die Fehlermeldung ja auch logisch .Ist meine Vermutung mit dem leeren Array richtig?
Klar, wenn ein Objekt leer($null) ist gibt es auch keine gültigen Indexe.Also vorher einfach mit ner IF prüfen ob überhaupt was gewählt wurde.
Kann man diese IF-Abfrage in den Befehl einbauen? Ist das möglich?
Zitat von @145920:
Kann man diese IF-Abfrage in den Befehl einbauen? Ist das möglich?
Klar, einfach drum rum bauenKann man diese IF-Abfrage in den Befehl einbauen? Ist das möglich?
if($allprinter){
# ........
}
Btw. RTFM !
https://www.windowspro.de/script/if-else-switch-bedingte-anweisungen-pow ...