![Pergunta principal](https://rvso.com/image/1558694/Pergunta%20principal.png)
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 $commands
usando 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 foo
ou deploy FS -src "data"
. Às vezes são difíceis de memorizar. Para isso, tenho duas pequenas perguntas: (1) Onde estão meus Write-Output
dados? E (2) o que é aquela CLIXML
coisa estranha (parece XML "especial" do PowerShell de acordo com o Google)? Quando resolvo exit
fechar 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 $commands
objeto corretamente (incluindo os Write-Output
dados)?
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 exibe muita coisa XML...
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