0

下面的代码工作正常,当我在PowerShell ISE中运行它以管理员身份(即我开始PS ISE作为管理员)调用命令运行作为管理员OK,但不作为当前用户

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的正确配置和运行,并且我的$凭证是正确的设置。然而,当我尝试运行在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 

我将取代更多的东西的脚本块码由于依赖于32位DLL,因此需要以32位模式运行,并且用户能够以64位模式运行部分代码,而在32位模式下运行其他部分则非常重要。

有什么想法?

+0

凭证是否与您的登录相同? – Jimbo

+0

@Jimbo - 是的,这就是为什么这是如此混乱。此外,在管理员或用户模式下相同的cerdential,并且在管理员模式下工作正常。 – hsbatra

回答

2

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

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

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

+0

谢谢@TommyMaynard - 由于$凭证是相同的,无论脚本是在管理员还是用户ISE中运行,并且它在管理员ISE中工作 - 我假设(a)用户已被添加(使用当前登录(b)用户具有所需的访问权限,因为它在Admin ISE中运行(c)在命令2和3中使用-Credential参数。因此混淆依然存在!人们如何去了解建议#4? btw - Get-PSSessionConfig仅适用于管理员ISE - 如何或可能以用户模式运行? – hsbatra

+0

对于建议#4,您的意思是使用:Set-PSSessionConfiguration Microsoft.Powershell32 -ShowSecurityDescriptorUI。我确实这样做了,但它的效果似乎并没有持久!当我回到配置时,我的执行权限似乎消失了。 – hsbatra

+0

请忽略关于持久性的先前评论。对于建议#4你是否想要使用:Set-PSSessionConfiguration Microsoft.Powershell32 -ShowSecurityDescriptorUI。我也是这样做的,所有用户都有FullControl。 – hsbatra

相关问题