Geben Sie Powershell die Ausgabe eines Befehls als Zeichenfolge aus

Geben Sie Powershell die Ausgabe eines Befehls als Zeichenfolge aus

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"
}

verwandte Informationen