Invoke-Command 以管理员身份运行正常,但不能以当前用户身份运行

Invoke-Command runs OK as Administrator, but not as current user

当我在 PowerShell ISE 中以管理员身份 运行 以下代码工作正常(即我以管理员身份启动 PS ISE)

Invoke-Command -ScriptBlock {[IntPtr]::Size}

Invoke-Command -ScriptBlock {[IntPtr]::Size} -ComputerName $env:COMPUTERNAME -Credential $Credential

Invoke-Command -ScriptBlock {[IntPtr]::Size} -ComputerName $env:COMPUTERNAME -Credential $Credential -ConfigurationName Microsoft.PowerShell32

我得到了

的预期回应
8
8
4

这告诉我 WinRM 已正确配置并且 运行ning,并且我的 $Credential 已正确设置。但是,当我尝试 运行 在 PS ISE 中以用户身份(有或没有管理员权限)进行相同操作时,第二个和第三个命令出现以下错误

[<ComputerName>] Connecting to remote server <ComputerName> failed with the following error message : Access is denied. For more information, see the about_Remote_Troubleshooting Help topic.
    + CategoryInfo          : OpenError: (<ComputerName>:String) [], PSRemotingTransportException
    + FullyQualifiedErrorId : AccessDenied,PSSessionStateBroken

我将用更具实质性的内容替换 ScriptBlock 代码,由于依赖于 32 位 DLL,因此需要 运行 在 32 位模式下,并且用户能够 运行 一些64 位模式下的代码和 32 位模式下的其他部分很重要。

有什么想法吗?

PSRemoting 使用远程计算机上的终结点或会话配置。您显然已经意识到这一点,因为您的第三条命令包含 ConfigurationName 参数。这些端点 - Microsoft.PowerShell、Microsoft.PowerShell32 等 - 包含指示谁可以连接到它们的权限。

转到您的远程计算机(在本例中为您的本地计算机),然后 运行 Get-PSSessionConfiguration 并查看权限 属性。您很快就会意识到您的管理权限是必需的。这是设计使然;这是一件好事!

您的选择是:一,编辑端点并添加您的用户,二,授予您的用户所需的访问权限(无论是管理员还是潜在的远程管理用户访问权限),三,使用当您 运行 Invoke-Command 传递凭据时的凭据对象,或四次创建您自己的具有必要权限的端点。