![Предоставьте Powershell вывод команды, как если бы это была строка](https://rvso.com/image/1557590/%D0%9F%D1%80%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D1%8C%D1%82%D0%B5%20Powershell%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B%2C%20%D0%BA%D0%B0%D0%BA%20%D0%B5%D1%81%D0%BB%D0%B8%20%D0%B1%D1%8B%20%D1%8D%D1%82%D0%BE%20%D0%B1%D1%8B%D0%BB%D0%B0%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0.png)
Я использую 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"
}