Ich verwende Powershell, um das Löschen von Druckern und deren Treibern per Skript zu programmieren. Ich rufe die Skripte auf Printing_admin_scripts
, die sich unter Windows 7+ im Ordner System32 befinden. Diese Skripte erzeugen eine MENGE Ausgabe, und ich möchte die Ausgabe erfassen (den Großteil davon wegwerfen) und je nach Status meine eigene Ausgabe erzeugen.
Warum können Sie nicht verwenden
$LASTEXITCODE
?
Denn diese Skripte erzeugen keine Exit-Codes! Sie stellen immer 0 dar.
"0x80041002"
Mein Ziel ist es, in der Ausgabe des Befehls nachzuschauen . Wenn ja, dann tue dies... Wenn nicht, dann tue das. Unten ist, was ich versucht habe, aber nicht funktioniert hat:
.\prnmngr.vbs -d -p "$_" | findstr "0x80041002" | out-null
If ($LASTEXITCODE = 0) {
Write-Host "$_ does not exist"
} else {
Write-Host "$_ removed"
}
Ich habe auch versucht:
& .\prnmngr.vbs -d -p "$_".ToString() | findstr "0x80041002" | out-null
If ($LASTEXITCODE = 0) {
Write-Host "$_ does not exist"
} else {
Write-Host "$_ removed"
}
Dadurch wird die Ausgabe ausgeblendet, aber immer gedruckt, dass der Drucker entfernt wurde, auch wenn er nicht vorhanden war (was normalerweise „0x80041002“ ausgibt). Mein Ziel ist es, diese Zeichenfolge zu finden, auch wenn sie (hoffentlich) nicht auf den Host geschrieben wird, dann meinen eigenen Text an die Stelle zu schreiben und fortzufahren.
Antwort1
Ändern Sie einfach diePower ShellLogik zu verwenden -eq
, anstatt =
innerhalb derWennBedingung. Dadurch wird sichergestellt, dass Ihre bedingten Befehle basierend auf der Bedingung wie erwartet ausgeführt werden $LASTEXITCODE
.
Wenn Befehlssyntax
If ($LASTEXITCODE -eq 0) {
Write-Host "$_ does not exist"
} else {
Write-Host "$_ removed"
}
Weitere Ressourcen
Antwort2
Das Speichern des Ergebnisses in einem Array funktioniert bei mir:
$script = "C:\Windows\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs"
$result = cscript $script -g
if($result -match 'foo') {
write-host "match"
}
else {
write-host "no match"
}