2

我遇到一些麻煩與調用命令cmdlet的。我以我的域名身份登錄到本地計算機,該域名在$server上具有管理權限。如果我手動輸入我的憑據,然後使用Invoke-Command,我得到的錯誤:調用命令的行爲澄清

Cannot open Service Control Manager on computer ''. This operation might require other privileges.

# Works 
Get-Service -ComputerName $server-ErrorAction Ignore 

# Doesn't work 
$cred = Get-Credential 
Invoke-Command -ComputerName localhost -ScriptBlock {param($serverIPAddress) Get-Service -ComputerName $server -ErrorAction Ignore} -Credential $cred -ArgumentList $server 

是不是有什麼特別的內置憑據,使這項工作?

回答

1

這是經典的Kerberos雙躍點。

發生的事情的特別之處是,在本地計算機有您的憑據。它可以與遠程計算機通話並證明它具有憑據,而無需發送它們。

但是,如果遠程計算機需要在第三臺計算機(第二跳),也不能證明它有憑據(因爲它沒有),所以它不能驗證上訪問的東西。

這是Kerberos的按設計工作。

使用Invoke-Command爲localhost還在做着一個遠程連接,所以它仍然算作是一跳。 Get-Service呼叫是第二跳。


考慮:

Invoke-Command -ComputerName $server -ScriptBlock { Get-Service -ErrorAction Ignore } -Credential $cred 

,將工作(只要PowerShell遠程在遠程計算機上啓用)。

否則,您需要啓用kerberos委託或CredSSP,或者(最好如果可能的話)重做無論您正在做什麼而不需要雙跳。

Be wary of CredSSP (and delegation in general).

+0

我希望避免打開PowerShell遠程處理,因爲我從來沒有使用過它,不知道我是否可以出售給IT團隊。謝謝你的解釋! – Vlad274

+1

@ Vlad274認爲在Windows Server 2012及更高版本中,PowerShell遠程處理功能是開箱即用的。我認爲這是一個有力的論據,有利於實現這一目標,這似乎與其他猶豫不決的IT專業人員產生共鳴。 – briantist