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-ID: 3484993362

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

Ausgedruckt am: 09.11.2024 um 01:11 Uhr

erikro
erikro 29.07.2022 aktualisiert um 13:50:51 Uhr
Goto Top
Moin,

warum so kompliziert? Warum nicht foreach?

Ansonsten:

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

hth

Erik
dispatcher
dispatcher 29.07.2022 aktualisiert um 13:55:18 Uhr
Goto Top
Hi Erik,
bei mir sieht die Ausgabe immer noch genauso aus
colinardo
Lösung colinardo 29.07.2022 aktualisiert um 15:25:37 Uhr
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
dispatcher
dispatcher 01.08.2022 um 09:39:47 Uhr
Goto Top
@colinardo
Wollte es eigentlich innerhalb einer Fensters ausführen, aber so geht's natürlich auch face-smile funktioniert sehr gut.
erikro
erikro 01.08.2022 um 16:54:58 Uhr
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
colinardo
colinardo 01.08.2022 aktualisiert um 17:22:03 Uhr
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
erikro
erikro 02.08.2022 um 08:54:14 Uhr
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