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

时间:2017-10-10 17:26:02

标签: powershell 32bit-64bit credentials remote-server access-denied

以管理员身份在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已正确配置并正在运行,并且我的$ 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位模式很重要。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

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

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