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

相關問題