powershell - 本地执行和远程执行之间的区别

时间:2013-01-02 21:08:04

标签: powershell invoke-command

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

1 个答案:

答案 0 :(得分: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

有关constrained endpoints的更多信息,请参阅此文章。总而言之,您可能正在使用通常不受约束的默认端点。另一个区别可能是比特。例如,您可以在x86 shell中运行但是连接到64位端点,反之亦然。如果需要连接到32位端点,请尝试以下操作:

PS> $s = New-PSSession -cn localhost -ConfigurationName microsoft.powershell32
PS> icm -Session $s { [IntPtr]::Size }
4
PS> Remove-PSSession $s