使用双跃点调用命令

时间:2016-08-17 18:12:11

标签: powershell

我需要连接到另一个域中的服务器。从该服务器,我连接到其他3个域,以在每个域中查找用户帐户。

我连接到终端服务器,然后运行' invoke-command'。出现了一些问题:

1st - 我指定了我的凭据,但是当我运行脚本时,它会提示输入凭据。

第二 - 我收到一条错误,指出invokemethod为null

这是脚本:

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

1 个答案:

答案 0 :(得分:0)

脚本块有自己的范围,因此$apcred在您正在运行的脚本块的上下文中为空。您可以在-ArgumentList参数中传递对象,或使用"在变量前面加上",如$using:apcred中所示。这会导致ScriptBlock进入外部范围以获取$apcred变量。