2

powershellがpowershellモジュールをどのように処理するのだろうか-AppDomain、PSSession、Runspaceについて読んでいます.powershellがモジュールをインポートするのはいつですか、モジュールは同じAppDomain、同じ実行空間にロードされますか?

C# コードを PowerShell に配置すると、C# コードがコンパイルされて同じ AppDomain に読み込まれることがわかっています。ただし、Powershell モジュールに関する関連情報が見つかりません。

- 編集 -

私はちょうどいくつかのテストを実行します

[System.AppDomain]::CurrentDomain.FriendlyName

モジュールが同じ AppDomain に読み込まれていることを示しています。しかし、私はまだPSSessionについて知りません..

4

1 に答える 1

4

ロードされているモジュールを知りたい場合は、 を実行しGet-Moduleます。ただし、PowerShell モジュールと ProcessModule (.dll) を混同しないでください。プロセス モジュールがバイナリ PowerShell モジュールまたは PSSnapin の一部である場合、プロセス モジュールは PowerShell に関連している可能性があります。OTOH PowerShellモジュールは、単なるPSM1ファイルである可能性があります(そして多くの場合そうです)-dllはまったくありません。

AppDomain は、すべての .NET プロセスに適用される非常に広範な .NET の概念です。PowerShell には、パイプラインが実行される環境である実行空間があり、セッション状態が管理されます (グローバル変数、プロバイダー状態など)。通常、各 PowerShell プロセスは実行空間を取得しますが、PowerShell_ISE の場合は、複数の実行空間 (PowerShell タブごとに 1 つ) を持つことができます。これは、次の方法で確認できます。

PS> $ExecutionContext.Host.Runspace


Events                 : System.Management.Automation.PSLocalEventManager
ThreadOptions          : ReuseThread
JobManager             : System.Management.Automation.JobManager
RunspaceConfiguration  :
InitialSessionState    : System.Management.Automation.Runspaces.InitialSessionState
Version                : 3.0
RunspaceStateInfo      : Opened
RunspaceAvailability   : Busy
ConnectionInfo         :
OriginalConnectionInfo :
LanguageMode           : FullLanguage
ApartmentState         : STA
InstanceId             : b80ae2aa-a70b-43b2-a63f-def6c92fd032
SessionStateProxy      : System.Management.Automation.Runspaces.SessionStateProxy
Debugger               : System.Management.Automation.Debugger

通常、InstanceId は PowerShell プロンプトで同じになることに注意してください。例外は、異なる実行空間 (通常は異なるプロセス) で実行されるジョブ、イベント ハンドラー、およびワークフローです。

PSSession は、リモート コンピューターへの永続的なリモート セッションを指定するために使用される、やや異なるビーストです。

于 2013-01-13T18:33:03.970 に答える