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