Dê ao Powershell a saída de um comando como se fosse uma string

Dê ao Powershell a saída de um comando como se fosse uma string

Estou usando o Powershell para criar scripts de exclusão de impressoras e seus drivers. Estou ligando para os Printing_admin_scriptsque 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 -eqem 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"
}

informação relacionada