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

powershell—本地执行和远程执行之间的区别,powershell,invoke-command,Powershell,Invoke Command,我有一个非常简单的powershell脚本,它具有不同的行为,这取决于我是通过Invoke命令/Enter PSSession在本地还是远程执行脚本。其他脚本工作正常。我想知道远程会话的环境与本地会话的环境有什么不同,这会导致这种差异。假设远程端点设置为使用您的凭据,远程会话可能有不同的可用模块集(或不同版本),可能有配置文件脚本配置为运行远程会话,并且环境可能不同。还请注意,可以将远程端点配置为限制对命令(包括应用程序)的访问以及限制语言模式。脚本还可以遍历各种变量和函数,以限制它们的可见性。

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

假设远程端点设置为使用您的凭据,远程会话可能有不同的可用模块集(或不同版本),可能有配置文件脚本配置为运行远程会话,并且环境可能不同。还请注意,可以将远程端点配置为限制对命令(包括应用程序)的访问以及限制语言模式。脚本还可以遍历各种变量和函数,以限制它们的可见性。如果查看会话状态,可以看到在配置远程处理端点时可以调整的一些属性,例如:

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