2

Я использую 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"). Моя цель - найти эту строку, даже если она не записана на хост (надеюсь), затем написать свой собственный текст и продолжить.

2 ответа2

1

Сохранение результата в массиве работает для меня:

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

Просто измените логику PowerShell на использование -eq вместо = в условии if . Это поможет обеспечить выполнение ваших условных команд в соответствии с ожидаемым значением на основе $LASTEXITCODE .

Если синтаксис команды

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

Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .