Estou usando o Powershell para criar scripts de exclusão de impressoras e seus drivers. Estou ligando para os Printing_admin_scripts
que estão localizados na pasta System32 no Windows 7+. Esses scripts geram MUITA saída, e eu gostaria de capturar a saída (jogar fora a maior parte dela) e gerar minha própria saída, dependendo do status.
Por que você não pode usar
$LASTEXITCODE
?
Porque esses scripts não geram nenhum código de saída! Eles sempre representam 0.
Meu objetivo é procurar "0x80041002"
na saída do comando. Se sim, faça isso... Se não, faça aquilo. Abaixo está o que eu tentei, mas falhei:
.\prnmngr.vbs -d -p "$_" | findstr "0x80041002" | out-null
If ($LASTEXITCODE = 0) {
Write-Host "$_ does not exist"
} else {
Write-Host "$_ removed"
}
Eu também tentei:
& .\prnmngr.vbs -d -p "$_".ToString() | findstr "0x80041002" | out-null
If ($LASTEXITCODE = 0) {
Write-Host "$_ does not exist"
} else {
Write-Host "$_ removed"
}
Isso oculta a saída, mas sempre imprime que a impressora foi removida, mesmo que ela não existisse (o que normalmente gera "0x80041002"). Meu objetivo é encontrar essa string, mesmo que ela não esteja escrita no host (espero), então escrever meu próprio texto no lugar e continuar.
Responder1
Basta alterar oPowerShelllógica para usar -eq
em vez de =
dentro dosedoença. Isso ajudará a garantir que seus comandos condicionais sejam executados conforme o esperado com base no arquivo $LASTEXITCODE
.
Se sintaxe de comando
If ($LASTEXITCODE -eq 0) {
Write-Host "$_ does not exist"
} else {
Write-Host "$_ removed"
}
Recursos adicionais
Responder2
Armazenar o resultado em um array está funcionando para mim:
$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"
}