1

シナリオ:Powershellホストが組み込まれたWindowsサービス。起動時に単一のランスペースが割り当てられます。マルチdllソリューション。PSSessionConfigurationファイル経由でのEnter-PSHostProcess動作の取得

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

Enter-PSHostProcess -Name MyService 

...私が.NETクラスにアクセスできるので、私が欲しいものを私に与えます。

[MyNameSpace.MyClass]::CallStaticFunction() 

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

これをPSSessions経由で拡張することはできますか?あるいは、最初にEnter-PSSessionコマンドまたはInvoke-Commandコマンドを実行するだけですか?

+1

あなたの質問は興味深いですが、私は本当にシナリオを理解していません。実行中のサービスを変更するために、サービスの外部から(おそらくインタラクティブセッションから) 'Enter-PSHostProcess'を呼び出すデバッグまたは設定ツールとして使用する予定ですか? –

+0

@Burt_Harris、あなたはそれを打ちました。私はデバッグと設定ツールの両方に使いたいと思っています。数年前、私はTclと似たようなことをしました。とても素晴らしかったです。 Enter PSHostProcessと同様の環境を実現する方法があるかどうかを探しています。 – craigdfrench

+0

私は間違った質問に誤解して答えているかもしれません...サービスを実行しているマシンから、または別のマシンからこれを行うことを検討していますか? –

答えて

2

ソースを確認すると、Enter-PSHostProcessEnter-PSSessionは非常に独立したメカニズムであるようです。 Enter-PSHostProcessは、名前付きパイプ経由で通信しますが、Enter-PSSessionはWinRMを使用します(実際にはポート5985/5986を介してhttpを使用しています)。Enter-PSHostProcessを通じて対話的にアクセスする場合は、Enter-PSSessionまたはInvoke-Commandのいずれかが必要と思われません。

あなたはすでにこれを行っているかもしれないが、私はたpowershell.exeとPowershell_ise.exeの両方を起動し、これを試してみることが、その後から、このコマンドを使用する前者は、後に接続します。

get-process Powershell_ise | Enter-PSHostProcess 

とプロンプトをISEのPIDを含むように変更されました静的メソッドが期待通りに機能していることを確認するために、私はPoweからISEを削除しましたコマンドを使用してrshell.exeコマンドライン:

[System.Environment]::exit(0) 

PowerShellは、このプロセスが実行されている一般的にだけではLocalSystem、管理者へのアクセスを可能にするスレッドのデフォルトのセキュリティ記述子、およびアカウントを使用して接続している名前付きパイプを作成し、下。両方のプロセスが同じアカウントで実行されているため、私のテストはうまくいった(私は管理者権限は必要ありませんでした)。

しかし、Enter-PSHostProcessは別のマシンのプロセスに接続するための準備をしていません。ダブルホップ、最初にEnter-PSSessionを使用してマシンに接続し、次にEnter-PSHostProcessを使用してプロセスに接続することは可能です。

+0

訂正、デフォルトのセキュリティ記述子*は*管理者グループへのアクセスを許可しているようですので、アクセス権を握ることはできません。 –

関連する問題