Forneça ao Powershell a saída de um comando como se fosse uma string

2

Estou usando o Powershell para criar scripts para a exclusão de impressoras e seus drivers. Eu estou chamando o Printing_admin_scripts que estão localizados na pasta System32 no Windows 7+. Esses scripts geram um monte de saída e eu gostaria de capturar a saída (jogar fora a maior parte) e gerar minha própria saída, dependendo do status.

Why can't you use $LASTEXITCODE?

Porque esses scripts não geram códigos de saída! Eles sempre representam 0.

Meu objetivo é procurar "0x80041002" na saída do comando. Se assim for, faça isso ... Se não, faça isso. 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 não existisse (o que normalmente gera "0x80041002"). Meu objetivo é encontrar essa string, mesmo que ela não seja gravada no host (espero), depois escrever meu próprio texto no lugar e continuar.

    
por Canadian Luke 04.04.2018 / 01:31

2 respostas

1

Basta alterar a lógica do PowerShell para usar -eq em vez de = dentro do if condição. Isso ajudará a garantir que seus comandos condicionais sejam executados conforme o esperado com base no $LASTEXITCODE .

Se a sintaxe de comando

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

Mais recursos

por 04.04.2018 / 07:06
1

Armazenar o resultado em uma matriz 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"
}
    
por 04.04.2018 / 14:27