将命令的输出作为字符串传递给 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 命令语法

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

相关内容