dispatcher
Goto Top

Replace Befehl in Ausgabe

Hallo Zusammen,


Ich würde gern eine Abfrage aller installierten Drucker starten, mit abschließender Abfrage, auf welchem alle bestehenden Druckjobs gelöscht werden sollen.
Ich habe ein Problem beim replace meiner Ausgabe aller installierten Drucker und dem Löschen aller Jobs
$printer = Get-WmiObject Win32_Printer | Select-Object name 

for($i=1; $i -lt $printer.count;$i++){ 
    "$($i): $($printer[$i])"} %{ $_ -replace "@{name=}","" }  
$printer[$iN] 
$iNi = $printer[$iN]
Remove-PrintJob -PrinterName "Using:Ini" -ID 1  

Content-Key: 3484993362

Url: https://administrator.de/contentid/3484993362

Printed on: April 24, 2024 at 07:04 o'clock

Member: erikro
erikro Jul 29, 2022 updated at 11:50:51 (UTC)
Goto Top
Moin,

warum so kompliziert? Warum nicht foreach?

Ansonsten:

-replace '(@{name=)(.*)(})','$2'  

hth

Erik
Member: dispatcher
dispatcher Jul 29, 2022 updated at 11:55:18 (UTC)
Goto Top
Hi Erik,
bei mir sieht die Ausgabe immer noch genauso aus
Member: colinardo
Solution colinardo Jul 29, 2022 updated at 13:25:37 (UTC)
Goto Top
Servus.
Zitat von @dispatcher:
Ich würde gern eine Abfrage aller installierten Drucker starten, mit abschließender Abfrage, auf welchem alle bestehenden Druckjobs gelöscht werden sollen.
Dafür gibt es einen wunderschönen Einzeiler, da muss man nicht hin und her replacen ... face-wink
Get-Printer | Out-GridView -Passthru -Title "Einen oder mehrere Drucker für das Löschen aller seiner Druckjobs auswählen" | Get-Printjob | Remove-Printjob  
Oder wenn man es auf die althergebrachte Art machen möchte (Ohne Printer-CMDLets) mit den WMI/CIM CMDLets geht es natürlich auch
Get-CimInstance win32_Printer | Out-GridView -Passthru -Title "Einen oder mehrere Drucker für das Löschen aller seiner Druckjobs auswählen" |  %{$printer = $_;Get-CimInstance win32_Printjob | ?{$_.Name.split(',') -eq $printer.Name} | Remove-CimInstance}  
Grüße Uwe
Member: dispatcher
dispatcher Aug 01, 2022 at 07:39:47 (UTC)
Goto Top
@colinardo
Wollte es eigentlich innerhalb einer Fensters ausführen, aber so geht's natürlich auch face-smile funktioniert sehr gut.
Member: erikro
erikro Aug 01, 2022 at 14:54:58 (UTC)
Goto Top
Zitat von @dispatcher:

Hi Erik,
bei mir sieht die Ausgabe immer noch genauso aus

Bei mir klappt das:

PS G:\> "@{name=\\server\drucker}" -replace '(@{name=)(.*)(})','$2'  
\\server\drucker
Member: colinardo
colinardo Aug 01, 2022 updated at 15:22:03 (UTC)
Goto Top
Zitat von @erikro:
Bei mir klappt das:

PS G:\> "@{name=\\server\drucker}" -replace '(@{name=)(.*)(})','$2'  
\\server\drucker

Macht aber ehrlich gesagt keinen Sinn hier die String-Interpretation eines PS-Objects zu bearbeiten die er wegen folgender Zeile bekommt
$printer = Get-WmiObject Win32_Printer | Select-Object name 
Ihm hätte eigentlich schon das Expandieren der Property gereicht, dann wäre auch das Ersetzen obsolet.
$printer = Get-WmiObject Win32_Printer | Select-Object -ExpandProperty name 
Naja sind eben Fehler die PS Anfänger vom Umstieg von Batch gerne machen da sie es dort gewohnt waren alles als "String" zu sehen statt mit Objekten zu arbeiten face-smile.

Für den TO bleibt dann nur noch eine Empfehlung
Powershell Leitfaden für Anfänger

Grüße Uwe
Member: erikro
erikro Aug 02, 2022 at 06:54:14 (UTC)
Goto Top
Zitat von @colinardo:

Zitat von @erikro:
Bei mir klappt das:

PS G:\> "@{name=\\server\drucker}" -replace '(@{name=)(.*)(})','$2'  
\\server\drucker

Macht aber ehrlich gesagt keinen Sinn hier die String-Interpretation eines PS-Objects zu bearbeiten die er wegen folgender Zeile bekommt

Da hast Du vollkommen recht. face-wink