Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Powershell Get-WMIObject

Frage Microsoft Windows 7

Mitglied: chrrs83

chrrs83 (Level 1) - Jetzt verbinden

28.01.2014 um 14:32 Uhr, 5105 Aufrufe, 11 Kommentare, 2 Danke

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

$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











Mitglied: colinardo
28.01.2014, aktualisiert um 15:23 Uhr
Hallo Chris, Wilkommen im Forum!
das kann ja wohl unmöglich der Name deines Druckers sein:
\\PC12004\root\cimv2:Win32_Printer.DeviceID="Kyocera TASKalfa 3500i KX"
der solltte wohl eher
Kyocera TASKalfa 3500i KX
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:
gwmi "Win32_Printer" | %{$LSTBox.Items.Add($_.Name)}
Grüße Uwe
Bitte warten ..
Mitglied: chrrs83
28.01.2014, aktualisiert um 15:30 Uhr
Hiho und danke für´s willkommen heißen

Das habe ich mir auch schon gedacht und mir mal die Variable ausgeben lassen:

Ergebniss:

$Auswahl = $AllPrinter[$LSTBox.SelectedIndex].name
Write-Host $Auswahl

Kyocera TASKalfa 3500i KX

Der Listbox Eintrag dient mir in erster Linie ja nur als Index für mein $AllPrinter Array. Ich lese ja die Namen direkt aus dem Array.

Hmm.... sollte ja dann passen.
Bitte warten ..
Mitglied: colinardo
28.01.2014, aktualisiert um 15:35 Uhr
sehe glaub ich deinen Fehler:
schreib die Zeile mal so:
(Get-WmiObject -Class win32_printer -Filter "Name='$($allprinter[$LSTBox.SelectedIndex].name)'").CancelAllJobs()
Bitte warten ..
Mitglied: chrrs83
28.01.2014 um 15:35 Uhr
Danke schon mal für deine Bemühungen... wirklich.

Wenn ich das so änder kommt die folgende Fehlermeldung:

get-wmiobject : Die Anfrage ist ungültig. "select * from win32_printer where name=Kyocera TASKalfa 3500i KX"
In C:\Users\halasz\Documents\001. Powershell\print_device_mngr_gui.ps1:110 Zeichen:6

(get-wmiobject -class win32_printer -Filter "name=$($AllPrinter[$LSTBox.Sele ...

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ 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:\Users\halasz\Documents\001. Powershell\print_device_mngr_gui.ps1:110 Zeichen:57

(get-wmiobject -class win32_printer -Filter "name=$($AllPrinter[$LSTBox.Sele ...

~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : InvalidOperation: ( [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Bitte warten ..
Mitglied: colinardo
28.01.2014, aktualisiert um 15:39 Uhr
hatte den Code nochmal nachträglich geändert, dir fehlen die einfachen Anführungszeichen um den Namen in der SQL Query
Bitte warten ..
Mitglied: chrrs83
28.01.2014, aktualisiert um 15:45 Uhr
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

Zwei verschiedene Drucker... kann das sein das der Name wegen den "\\" nicht genommen wird bzw. genommen werden kann?

Leider ist das aber der Druckername wie er ihn durch Get-WMIObject ausliest!

Oder soll ich dort den Sharename nehmen?
Bitte warten ..
Mitglied: colinardo
28.01.2014, aktualisiert um 15:46 Uhr
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 nicht
Bitte warten ..
Mitglied: chrrs83
28.01.2014 um 15:46 Uhr
Ich danke schon mal für alle Einträge... bin jetzt erstmal im Aussendienst und erst gg Abend oder morgen früh wieder da.
Bitte warten ..
Mitglied: chrrs83
28.01.2014 um 15:49 Uhr
Die habe ich... mein Script prüft vorab sogar den Status:

$objIdentity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$objSecPrinc = New-Object System.Security.Principal.WindowsPrincipal($objIdentity)

if(!$objSecPrinc.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))
{
........
}

Oder meinst du das die Berechtigungen nicht ausreichen könnten? Du magst recht haben...

Was mich aber da noch stört, das beim ersten Eintrag alles wunderbar klappt (druch deine Hilfe)... nur bei den anderen beiden (noch) nicht.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 28.01.2014, aktualisiert 29.01.2014
Schreib die Zeile besser so, dann bekommst du keine Probleme mit Backslashes im SQL-Filter
Get-WmiObject -Class win32_printer | ?{$_.Name -eq $allprinter[$LSTBox.SelectedIndex].name} | %{$_.CancelAllJobs()}
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 -Filter "Name='$($allprinter[$LSTBox.SelectedIndex].name.Replace("\","\\"))'").CancelAllJobs()
Bitte warten ..
Mitglied: chrrs83
29.01.2014 um 07:40 Uhr
Hab deine Zeile mal übernommen... und siehe da es klappt
Vielen dank dafür!

Ich werde sicherlich, in meinem Projekt, die ein oder andere Frage haben. Also sehen wir uns in Zukunft sicherlich öfter .
Bis dahin alles gute und danke.


Gruß
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Get-WmiObject, nach Netzwerkadapter filtern (11)

Frage von Flodsche zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell Windows Update Management - get-WUinstall bleibt hängen (10)

Frage von MartinAD zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Batch & Shell
gelöst PowerShell Domain Join (2)

Frage von Patrick-IT zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...