Powershellにコマンドの出力を文字列のように渡す

Powershellにコマンドの出力を文字列のように渡す

私は Powershell を使用して、プリンターとそのドライバーの削除のスクリプトを作成しています。Windows Printing_admin_scripts7 以降の System32 フォルダーにある を呼び出しています。これらのスクリプトは大量の出力を生成するので、その出力をキャプチャし (大部分は破棄します)、ステータスに応じて独自の出力を生成したいと考えています。

なぜ使えないのですか$LASTEXITCODE

これらのスクリプトは終了コードを生成しません。常に 0 を表します。

"0x80041002"私の目標は、コマンドの出力で探すことです。もしそうなら、これを実行し、そうでなければ、あれを実行します。以下は私が試したが失敗したことです:

.\prnmngr.vbs -d -p "$_" | findstr "0x80041002" | out-null
        If ($LASTEXITCODE = 0) {
            Write-Host "$_ does not exist"
        } else {
            Write-Host "$_ removed"
        }

私も試しました:

& .\prnmngr.vbs -d -p "$_".ToString() | findstr "0x80041002" | out-null
        If ($LASTEXITCODE = 0) {
            Write-Host "$_ does not exist"
        } else {
            Write-Host "$_ removed"
        }

これにより、出力は非表示になりますが、プリンターが存在しなくても (通常は「0x80041002」が出力されます)、プリンターが削除されたことが常に出力されます。私の目標は、その文字列がホストに書き込まれていなくても (うまくいけば)、その文字列を見つけて、その場所に独自のテキストを書き込んで、続行することです。

答え1

単にパワーシェルロジックを使用するので-eqはなく、=もし条件。これを行うと、条件に基づいて条件付きコマンドが期待どおりに実行されるようになります$LASTEXITCODE

コマンド構文

If ($LASTEXITCODE -eq 0) {
    Write-Host "$_ does not exist"
} else {
    Write-Host "$_ removed"
}

その他のリソース

答え2

結果を配列に保存するとうまくいきます:

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

関連情報