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.
É 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
Tags command-line powershell