3

シナリオ: Powershell ホストが組み込まれた Windows サービス。起動時に単一の実行空間が割り当てられます。マルチ dll ソリューション。

要件: 実行中のサービス内の .NET クラスにアクセスする必要があります。を使用してローカル Powershell インスタンスから

Enter-PSHostProcess -Name MyService 

....NET クラスにアクセスできるため、必要なものが正確に得られます。

[MyNameSpace.MyClass]::CallStaticFunction()

質問: カスタム エンドポイントに対して Enter-PSSession を使用して、この Powershell の動作をリモート エンドポイントで利用できるようにするにはどうすればよいですか? Register-PSSessionConfiguration から dll を指定できますが、これはプロセスを生成し、実行中のインスタンスに接続しません。HTTPS や名前付きパイプを介してプロキシを作成することに興味はありませんが、.NET サポートのために Powershell で提供されるネイティブ機能を使用します。

これを PSSessions 経由で拡張することは可能ですか? それとも、最初に Enter-PSSession または Invoke-Command を実行する必要がありますか?

4

1 に答える 1

4

ソースを確認すると、Enter-PSHostProcessEnter-PSSessionは非常に独立したメカニズムであることがわかります。 Enter-PSHostProcess名前付きパイプを介して通信しますが、 Enter-PSSessionWinRM (ポート 5985/5986 で http(s) を効果的に使用します) を使用Enter-PSSessionInvoke-CommandますEnter-PSHostProcess

すでにこれを行っているかもしれませんが、これを試すために、Powershell.exe と Powershell_ise.exe の両方を起動し、前者から次のコマンドを使用して後者に接続しました。

get-process Powershell_ise | Enter-PSHostProcess

ISE の PID を含むようにプロンプ​​トが変更されました。静的メソッドが期待どおりに機能することを確認するために、次のコマンドを使用して Powershell.exe コマンド ラインから ISE を強制終了しました。

[System.Environment]::exit(0)

Powershell は、スレッドの既定のセキュリティ記述子を使用して接続先の名前付きパイプを作成します。これは通常、LocalSystem、管理者、およびプロセスが実行されているアカウントへのアクセスのみを許可します。両方のプロセスが同じアカウントで実行されていたため、テストは機能しました (管理者権限は必要ありませんでした)。

ただし、明確にEnter-PSHostProcessするために、別のマシン上のプロセスに接続するための準備はしていません。Enter-PSSession最初に を使用してマシンに接続し、次に を使用してプロセスに接続するという、ダブルホップが可能な場合がありますEnter-PSHostProcess

于 2016-09-13T22:01:12.697 に答える