Powershell: use um grupo de comandos dinamicamente adicionados em uma nova janela

1
Estou lutando com algo que deveria ser obviamente simples, mas não parece tão simples de resolver. Eu tenho uma seqüência dinâmica de comandos do PowerShell para executar. É uma parte de alguns modelos que escrevi para me tornar mais fácil no meu fluxo de trabalho.

Aqui está um exemplo simples de comandos agrupados gerados:

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

É possível executar este $commands usando Invoke-Command . Então, eventualmente, eu tenho essa função que lida com isso:

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

Isso funciona bem. Executa os comandos no objeto na janela. Mas com o tempo, adicionei mais funcionalidades a ele. Para cada nova instrução, eu tenho que abrir o powershell a cada vez que isso acontece ... Isso acontece porque, às vezes, quando um script está em execução, não consigo emitir outra função. Então, meu objetivo agora é executar o grupo de comandos acima em uma nova janela para que eu possa usar uma mesma janela de shell para invocar várias tarefas (que são executadas em suas próprias janelas). Eu pensei que seria simples, então eu alterei a função para

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

Isso leva a esse resultado:

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

A navegação funcionou. No entanto, minhas informações de saída são perdidas. Alguns comandos adicionaram instruções como deploy S1 foo ou deploy FS -src "data" . Aqueles são difíceis de memorizar às vezes. Para isso, tenho duas pequenas perguntas: (1) Onde estão meus Write-Output data? E (2) o que é aquela estranha coisa CLIXML (parece XML especial "powershell" de acordo com o google)? Quando eu emito exit para fechar essa janela, vejo um monte de coisas XML antes que a janela seja fechada.

Pergunta principal

É possível abrir uma nova janela do powershell, então executar os comandos no meu objeto $commands corretamente (assim incluindo os Write-Output data)?

Eu já tentei adicionar Invoke-Command ao acima, como

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

mas a nova janela mostra muito material XML ...

informações da versão

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
    
por KarelG 16.04.2018 / 12:13

0 respostas