¿hay alguna manera fácil en PowerShell de enviar una cadena a variable y consola al mismo tiempo?cómo dar salida a una cadena a variable y consola al mismo tiempo
quiero capturar el resultado de mi script en una variable para poder analizarlo al final del script, guardarlo en un archivo de registro y también enviar un correo electrónico a un operador.
mi intención es tener una salida de $ variable y añadir cualquier cadena de salida a la misma y también de salida a la consola de inmediato algo así como
$output="Process started"
$output=+"Doing step 1"
"Doing step 1"
$output=+"Doing step 2"
"Doing step 2"
así que al final me puedo ahorrar $ salida a un archivo de registro, correo electrónico y analizarlo.
Jugué con tee-object que podría funcionar para ese propósito, pero desafortunadamente reescribía mi variable de salida $ en lugar de anexarle una cadena.
ACTUALIZACIÓN Esta es la solución final que decidí seguir, gracias a manojlds!
$script:output = ""
filter mylog {
$script:output+= $_+"`n"
return $_
}
"doing step {0}" -f 1 | mylog
"doing step {0}" -f 2 | mylog
"doing step {0}" -f 3 | mylog
#in the end of the script
$script:output
así es como lo implementé primero, pero terminé con dos scripts. Ahora tengo un script más complejo y necesito hacer un análisis en el script de llamada, lo que hace que mi script de llamada sea complejo. Acabo de encontrar esta publicación http://get-powershell.com/post/2008/06/26/Stuffing-the-output-of-the-last-command-into-an-automatic-variable.aspx y estoy pensando ahora si puedo hacer algo así anulando-predeterminado – mishkin
lo siento solo para dejarme en claro ... Tengo mi script principal (digamos main.ps) y launcher.ps (algo así como tu. \ test.ps1 | Tee- Object -file log.txt) para que el iniciador capture el resultado del script principal. Si bien funciona, tengo dos problemas con este enfoque: no veo nada en la consola hasta que mi script principal haya finalizado y no pueda hacer ningún análisis/análisis en mi script principal – mishkin
@mishking - '. \ Test.ps1 | Tee-Object -file log.txt' - si está haciendo eso, verá el resultado en la consola cuando ocurra. Agregue un 'sleep 10' entre las cadenas en el script anterior y vea. También vea mi respuesta actualizada – manojlds