主な質問

主な質問

明らかに単純なはずなのに、解決がそれほど簡単ではない問題に苦労しています。実行する PowerShell コマンドの動的なシーケンスがあります。これは、ワークフローを簡素化するために自分で作成したテンプレートの一部です。

以下は生成されたグループ化されたコマンドの簡単な例です。

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

これを実行するに$commandsは を使用しますInvoke-Command。最終的に、これを処理する次の関数を用意しました。

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

これはうまく動作します。ウィンドウ内のオブジェクト内のコマンドを実行します。しかし、時間の経過とともに、さらに機能を追加しました。新しい命令ごとに、そのたびにPowerShellを開く必要があります...スクリプトの実行中に別の関数を発行できないことがあるためです。したがって、現在の目標は、上記のコマンドグループを新しいウィンドウを作成して、同じシェルウィンドウを使用して複数のタスク(独自のウィンドウで実行される)を呼び出すことができるようにしました。これは簡単だと思ったので、関数を変更して

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

その結果、次のようになります。

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

ナビゲーションは機能しました。ただし、出力情報は失われています。一部のコマンドには、deploy S1 fooまたは のような命令が追加されていますdeploy FS -src "data"。これらは時々覚えるのが困難です。そのため、2 つの小さな質問があります。(1)Write-Outputデータはどこにありますか? (2) その奇妙なものは何ですかCLIXML(Google によると「特別な」PowerShell XML のようです)? そのウィンドウを閉じるように発行するとexit、ウィンドウが閉じる前に一連の XML が表示されます。

主な質問

新しいPowerShellウィンドウを開くことは可能ですか?それからオブジェクト内のコマンドを$commands正しく実行しますか (Write-Outputデータも含めて)?

私はすでにInvoke-Command上記のように追加しようとしました

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

しかし、新しいウィンドウには大量の XML が出力されます...

追伸 狂気


バージョン情報

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

関連情報