以管理员身份在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位模式很重要。
有什么想法吗?
答案 0 :(得分:2)
PSRemoting在远程计算机上使用端点或会话配置。您显然知道这一点,因为您的第三个命令包含ConfigurationName参数。这些端点--Microsoft.PowerShell,Microsoft.PowerShell32等 - 包括指示谁可以连接到它们的权限。
转到远程计算机(本例中为本地计算机),然后运行Get-PSSessionConfiguration并查看Permission属性。您很快就会意识到您需要管理访问权限。这是设计的;这是件好事!
您的选择是一个,编辑端点并添加您的用户,两个,授予您的用户所需的访问权限(无论是管理员还是潜在的远程管理用户访问权限),三,使用凭据对象当您运行Invoke-Command,传递凭证或四个凭证,创建具有必要权限的自己的端点。