1

我有一个非常简单的 powershell 脚本,它具有不同的行为,具体取决于我是通过 Invoke-Command / Enter-PSSession 在本地还是远程执行脚本。其他脚本工作正常。我想知道远程会话与本地会话的环境有什么不同会导致这种差异。

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

有关受约束端点的更多信息,请参阅本文。话虽如此,您很可能正在使用通常不受约束的默认端点。另一个区别可能是位数。例如,您可以在 x86 shell 中运行,但连接到 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 回答