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