Darle a Powershell la salida de un comando como si fuera una cadena

Darle a Powershell la salida de un comando como si fuera una cadena

Estoy usando Powershell para programar la eliminación de impresoras y sus controladores. Estoy llamando a los Printing_admin_scriptsque se encuentran en la carpeta System32 en Windows 7+. Estos scripts generan MUCHOS resultados y me gustaría capturarlos (desechar la mayor parte) y generar mi propio resultado, según el estado.

¿Por qué no puedes usar $LASTEXITCODE?

¡Porque estos scripts no generan ningún código de salida! Siempre representan 0.

Mi objetivo es buscar "0x80041002"en la salida del comando. Si es así, haz esto... Si no, haz aquello. A continuación se muestra lo que intenté, pero fallé:

.\prnmngr.vbs -d -p "$_" | findstr "0x80041002" | out-null
        If ($LASTEXITCODE = 0) {
            Write-Host "$_ does not exist"
        } else {
            Write-Host "$_ removed"
        }

También probé:

& .\prnmngr.vbs -d -p "$_".ToString() | findstr "0x80041002" | out-null
        If ($LASTEXITCODE = 0) {
            Write-Host "$_ does not exist"
        } else {
            Write-Host "$_ removed"
        }

Esto oculta la salida, pero siempre imprime que la impresora fue eliminada, incluso si no existía (lo que normalmente genera "0x80041002"). Mi objetivo es encontrar esa cadena, aunque no esté escrita en el host (con suerte), luego escribir mi propio texto en su lugar y continuar.

Respuesta1

Simplemente cambia elPotencia Shelllógica a utilizar -eqen lugar de =dentro de lasicondición. Hacer esto ayudará a garantizar que sus comandos condicionales se ejecuten como se espera según el archivo $LASTEXITCODE.

Si la sintaxis del comando

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

Recursos adicionales

Respuesta2

Almacenar el resultado en una matriz me funciona:

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

información relacionada