Estoy usando Powershell para programar la eliminación de impresoras y sus controladores. Estoy llamando a los Printing_admin_scripts
que 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 -eq
en 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"
}