无法使远程RDP脚本工作

时间:2015-02-18 17:17:13

标签: powershell rdp mstsc

我正在编写一个脚本,用于从按钮网格启动MSTSC。这些按钮将分别打开不同的服务器连接。我有一个单独的按钮来获取和存储管理员信用,我从另一个脚本借用。单击时,该按钮会调用getAdmin函数:

function getAdmin {
$returnObject = $null; $credValid = $null;

$cred = Get-Credential #Read credentials
$username = $cred.username
$password = $cred.GetNetworkCredential().password

$CurrentDomain = "LDAP://" + ([ADSI]"").distinguishedName
$domain = New-Object System.DirectoryServices.DirectoryEntry($CurrentDomain,$UserName,$Password)

if ($domain.name -eq $null)
{
    $credValid = $false
    $cred = $null
} else {
    $credValid = $true
}
$returnobject = new-object psobject -property @{ Valid = $credValid; Credentials = $cred }
return $returnObject }

然后我有我的"服务器按钮:"

$btnServ = new-object system.windows.forms.button
$btnServ.location = new-object system.drawing.point (10,200)
$btnServ.text = "Server Name (SERVER)"
$btnServ.width=250
$btnServ.height = 30
$btnServ.add_click({ Start-Process mstsc -ArgumentList "/v:SERVER" -Credential $cred })

现在,当我使用我的第一个按钮存储信用卡时,然后我单击btnServ按钮,它仍然提示我" Windows PowerShell凭据请求"而不是从前一个动作中获取存储的信用。如果我从通话中删除了-Credential $cred,我是否点击了第一个getAdmin按钮,它只是说我的登录尝试失败了,而且我提供的信息不正确。

理想情况下,我想存储我的信用卡,然后无论我按哪个服务器按钮,它都会登录,而不是两次输入我的信用卡。

1 个答案:

答案 0 :(得分:1)

这很可能是scoping issue - 点击事件代理中的代码(.add_click({})操作)将$cred变量视为本地变量,默认为$null。< / p>

由于您尚未在$cred函数中指定getAdmin变量的范围,因此它们被视为两个单独的变量,无法查看&#34;请参阅&#34 ;海誓山盟

您可以像这样指定范围:

$Script:cred 

结果代码变为:

function getAdmin(){
    # code code code
    $Script:cred = Get-Credential
    # more code
}

然后:

$btnServ.add_click({ Start-Process mstsc -ArgumentList "/v:SERVER" -Credential $Script:cred })

现在,两个ScriptBlock都引用父作用域中的相同变量,并且-Credential开关应该可以正常工作