為 Powershell 提供命令的輸出,就好像它是字串一樣

為 Powershell 提供命令的輸出,就好像它是字串一樣

我正在使用 Powershell 編寫刪除印表機及其驅動程式的腳本。我正在呼叫Printing_admin_scripts位於 Windows 7+ 上的 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"
}

相關內容