0

vstest.console.exe のいくつかのインスタンスを起動し、テスト結果を .trx ファイルまたは tfs に発行する C# で作成したカスタム PowerShell コマンドレットがあります。このコマンドレットは、PowerShell をローカルで使用する場合に単独で機能します。

ただし、v3 PowerShell リモート処理を使用してコマンドレットをリモートで実行すると、invoke-command は完了しますが、2 つの問題があります。

  1. 結果ファイルが公開されていないため、テスト実行プロセスは完了しません
  2. リモートコンソールでは結果が得られませんが、ローカルの場合、新しく開始されたプロセスからバブルアップします

これは、リモート PowerShell 呼び出しスクリプトで使用したリモート呼び出しです。

$j = Invoke-Command -Session $currentPSSession -AsJob -ScriptBlock {
    Add-PSSnapin "IntegrationTestTools"
    Start-IntegrationTests -someotherUnimportantArgs
} | Wait-Job

$results = $j | Receive-Job

スクリプトをステップ実行すると、実際にジョブを待ちますが、結果は空です。

Keith Hill の投稿に従って、リモーティングをセットアップしたことに注意してください 。また、Wsmanをセットアップしました

set-item WSMan:\localhost\Shell\MaxMemoryPerShellMB 0
set-item WSMan:\localhost\Shell\MaxProcessesPerShell 0
set-item WSMan:\localhost\Shell\MaxShellsPerUser 0

したがって、プロセスと許可されたメモリがこの特定の演習を制限するべきではありません。

何か案は?

4

1 に答える 1

2

ある時点でこれが起こるほど不運な人がいる場合に備えて、共有したいと思いました. リモート PowerShell セッションに接続するときに認証列挙型として credssp を使用する場合、ユーザー トークンは「偽装」としてマークされます。これは、SID 5-1 として WCF 名前付きパイプが表示されないことを意味する NETWORK USER グループの一部であることを意味します。 -5-2 (より一般的には Network SID として知られています) は、名前付きパイプへのアクセスを拒否されます。これについては、啓発的な記事があります: KennyW のブログ.

PowerShellコマンドレットでリモートで開始していたプロセスは、名前付きパイプを介して通信していた子プロセスを開始しました:(
したがって、最終的に、そのプロセスをリモートセッション内でローカルに実行するには、システムとしてpsexec(sysinternals)を実行する必要がありました。エレガントではありませんが、私が利用できるすべて。

また、PowerShell のトラブルシューティングを手伝ってくれたKeith Hillにも感謝します。

私の調査結果を詳述した私のブログ記事 - http://josephkirwin.com/2013/05/06/the-named-pipes-had-a-party-and-imposters-were-not-invited/

于 2013-05-06T16:25:19.723 に答える