2016-08-17 62 views
0

我需要連接到另一個域中的服務器。在該服務器上,我連接到3個其他域以查找每個域中的用戶帳戶。invoke-command with double hop

我連接到終端服務器,然後運行'invoke-command'。幾個問題發生:

1st - 我指定我的憑據是什麼,但是當我運行腳本時,它會提示輸入憑據。

2日 - 我得到一個錯誤,指出的InvokeMethod是空

這裏的腳本:

PARAM (
    [Parameter(ValueFromPipeline)] 
    $FullName 
) 
###Creds### 
$Password = Read-Host -AsSecureString "Enter Your Password" 
$apcred = New-Object System.Management.Automation.PSCredential 
("server\username",$Password) 

### Double Hop ### 
$Session = New-PSSession -Name RDP -ComputerName Server.com -Credential 
($apcred) 
Enable-WSManCredSSP -Role Client -DelegateComputer server.com -Force 
Invoke-Command -Session $session -ScriptBlock {Enable-WSManCredSSP -Role 
Server -Force} 

    Invoke-Command -Session $session -ScriptBlock { 
$rrs = Get-ADUser -Filter * -Server server2.com -Credential ($apcred) 
$rrsusers = ($rrs | Where-Object{$_.name -eq $Name}) 

這是錯誤我得到:

You cannot call a method on a null-valued expression. 
+ CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
+ FullyQualifiedErrorId : InvokeMethodOnNull 
+0

所以我已經嘗試了在另一個問題中指定的兩個方法(從本地範圍傳遞變量到遠程)。 param方法不起作用 - 它仍然促使我輸入用戶名/密碼 - 並給出了相同的錯誤: 您無法在空值表達式上調用方法。 + CategoryInfo:InvalidOperation:(:) [],RuntimeException + FullyQualifiedErrorId:InvokeMethodOnNull |但是,當我使用$使用:它沒有提示我輸入密碼...但它仍然給出了錯誤 - 空值表達式。有任何想法嗎? –

回答

0

腳本塊都有自己的範圍,因此$apcred在您正在運行的腳本塊的上下文中爲null。您可以在-ArgumentList參數中傳遞對象,或者在$using:apcred中用「using」作爲變量的前綴。這會導致ScriptBlock進入外部範圍以獲取$apcred變量。

相關問題