1

Invoke-Command / Enter-PSSession を介してスクリプトをローカルで実行するかリモートで実行するかによって、動作が異なる非常に単純な powershell スクリプトがあります。他のスクリプトは問題なく動作します。この違いの原因となるリモート セッションとローカル セッションの環境の違いについて疑問に思っています。

4

1 に答える 1

2

リモート エンドポイントが資格情報を使用するように設定されていると仮定すると、リモート セッションで使用可能なモジュールのセットが異なる (またはバージョンが異なる) 可能性があり、リモート セッション用に実行するように構成されたプロファイル スクリプトが存在する可能性があり、環境が異なる可能性があります。 . また、リモート エンドポイントは、コマンド (アプリケーションを含む) へのアクセスを制限したり、言語モードを制限したりするように構成できることにも注意してください。スクリプトは、さまざまな変数と関数をウォークして、それらの可視性を制限することもできます。セッション状態を見ると、リモーティング エンドポイントを構成するときに微調整できるいくつかのプロパティを確認できます。

PS> $ExecutionContext.SessionState


Drive                         : System.Management.Automation.DriveManagementIntrinsics
Provider                      : System.Management.Automation.CmdletProviderManagementIntrinsics
Path                          : System.Management.Automation.PathIntrinsics
PSVariable                    : System.Management.Automation.PSVariableIntrinsics
LanguageMode                  : FullLanguage
UseFullLanguageModeInDebugger : False
Scripts                       : {*}
Applications                  : {*}
Module                        :
InvokeProvider                : System.Management.Automation.ProviderIntrinsics
InvokeCommand                 : System.Management.Automation.CommandInvocationIntrinsics

制約付きエンドポイントの詳細については、この記事を参照してください。そうは言っても、通常は制約されていないデフォルトのエンドポイントを使用している可能性があります。もう 1 つの違いはビット数です。たとえば、x86 シェルで実行していて 64 ビット エンドポイントに接続している場合や、その逆の場合があります。32 ビットのエンドポイントに接続する必要がある場合は、次のことを試してください。

PS> $s = New-PSSession -cn localhost -ConfigurationName microsoft.powershell32
PS> icm -Session $s { [IntPtr]::Size }
4
PS> Remove-PSSession $s
于 2013-01-02T22:00:30.783 に答える