Предоставьте Powershell вывод команды, как если бы это была строка

Предоставьте Powershell вывод команды, как если бы это была строка

Я использую Powershell для скрипта удаления принтеров и их драйверов. Я вызываю , Printing_admin_scriptsкоторые находятся в папке System32 в Windows 7+. Эти скрипты генерируют МНОГО выходных данных, и я хотел бы захватить выходные данные (выбросить большую их часть) и сгенерировать собственные выходные данные в зависимости от статуса.

Почему вы не можете использовать $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

Просто изменитеPowerShellлогика для использования -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"
}

Связанный контент