Pregunta principal

Pregunta principal

Estoy luchando con algo que debería ser obviamente simple pero que no parece tan sencillo de resolver. Tengo una secuencia dinámica de comandos de PowerShell para ejecutar. Es parte de algunas plantillas que escribí para mí para facilitar mi flujo de trabajo.

Aquí hay un ejemplo simple de comandos agrupados generados:

$commands = {
  Write-Output "Navigating to tools->deploy";
  Set-Location "C:\tools\deploy\";
  Write-Output "OK. Run dd.ps1 [server name] to deploy.";
}

Es posible ejecutar esto $commandsusando Invoke-Command. Finalmente tengo esta función que lo maneja:

function invokeNow() {
  param([string]$c)
  Invoke-Command $c;
} 

Esto funciona bien. Ejecuta los comandos en el objeto en la ventana. Pero con el tiempo, le he añadido más funciones. Para cada nueva instrucción, tengo que abrir PowerShell cada vez... Esto se debe a que a veces, cuando se ejecuta un script, no puedo ejecutar otra función. Entonces, mi objetivo ahora es ejecutar el grupo de comandos anterior en unnuevoventana para poder usar una misma ventana de shell para invocar múltiples tareas (que se ejecutan en sus propias ventanas). Pensé que sería simple, así que modifiqué la función para

function invokeNow() {
  param([string]$c)
  Invoke-Expression "cmd /c start powershell -Command {$c} -NoProfile -NoExit";
} 

Eso lleva a este resultado:

#< CLIXML
#< CLIXML
PS C:\tools\deploy\>

La navegación funcionó. Sin embargo, mi información de salida se pierde. Algunos comandos tienen instrucciones agregadas como deploy S1 fooo deploy FS -src "data". A veces son difíciles de memorizar. Para eso tengo dos pequeñas preguntas: (1) ¿Dónde están mis Write-Outputdatos? Y (2) ¿qué es esa CLIXMLcosa rara (parece XML de PowerShell "especial" según Google)? Cuando pido exitcerrar esa ventana, veo un montón de cosas XML antes de que se cierre la ventana.

Pregunta principal

¿Es posible abrir una nueva ventana de PowerShell?entonces¿Ejecutar los comandos en mi $commandsobjeto correctamente (incluyendo así los Write-Outputdatos)?

Ya intenté agregar Invoke-Commanda lo anterior como

Invoke-Expression "cmd /c start powershell -Command {Invoke-Command -ScriptBlock $c} -NoProfile -NoExit";

pero la nueva ventana escupe muchas cosas XML...

PD: locura


Información de la versión

PS C:\> $PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.16299.251
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.16299.251
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

información relacionada