Pergunta principal

Pergunta principal

Estou lutando com algo que deveria ser obviamente simples, mas não parece tão simples de resolver. Eu tenho uma sequência dinâmica de comandos do PowerShell para executar. É parte de alguns modelos que escrevi para mim mesmo para facilitar 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 isso $commandsusando Invoke-Command. Então, eventualmente, tenho esta função que lida com isso:

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

Isso funciona bem. Ele executa os comandos no objeto da janela. Mas com o tempo, adicionei mais funcionalidades a ele. Para cada nova instrução, tenho que abrir o PowerShell todas as vezes para isso... Isso porque às vezes, quando um script está sendo executado, não consigo emitir outra função. Então, meu objetivo agora é executar o grupo de comandos acima em umnovowindow para que eu possa usar a mesma janela do shell para invocar várias tarefas (que são executadas em suas próprias janelas). Achei que seria simples, então alterei a função para

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

Isso leva a este resultado:

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

A navegação funcionou. No entanto, minhas informações de saída foram perdidas. Alguns comandos adicionaram instruções como deploy S1 fooou deploy FS -src "data". Às vezes são difíceis de memorizar. Para isso, tenho duas pequenas perguntas: (1) Onde estão meus Write-Outputdados? E (2) o que é aquela CLIXMLcoisa estranha (parece XML "especial" do PowerShell de acordo com o Google)? Quando resolvo exitfechar essa janela, vejo um monte de coisas XML antes que a janela feche.

Pergunta principal

É possível abrir uma nova janela do PowerShell,entãoexecutar os comandos no meu $commandsobjeto corretamente (incluindo os Write-Outputdados)?

Eu já tentei adicionar Invoke-Commandao acima como

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

mas a nova janela exibe muita coisa XML...

ps: loucura


informação 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

informação relacionada