2015-02-18 4 views
0

Я пишу скрипт для запуска MSTSC из сетки кнопок. Эти кнопки будут открывать другое соединение с сервером. У меня есть отдельная кнопка, которая получает и хранит админы администратора, которые я заимствовал из другого скрипта. При нажатии на кнопку вызывает getAdmin функцию:Проблема с удаленным RDP-скриптом для работы

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 или нет, он просто говорит, что моя попытка входа в систему завершилась неудачно и я предоставил неверную информацию.

В идеале, я хочу сохранить свои кредитные карточки, то независимо от того, какая кнопка сервера я нажимаю, он будет вводить меня в систему вместо того, чтобы делать мой тип в моих кредитах дважды.

+0

Где вы звоните 'getAdmin'? У вас есть строка где-то, которая заполняет '$ cred'? Функция возвращает объект с свойством Credentials. Я бы ожидал чего-то подобного в вашем коде. '$ cred = (getAdmin) .Credentials' внутри if, если бы он проверял, были ли они' .Valid' или нет. – Matt

ответ

1

Это наиболее вероятно scoping issue - код внутри делегата события мышей (.add_click({}) действия) обрабатывает переменную $cred как локальные, недобросовестный $null.

Поскольку вы не указали рамки для $cred переменной внутри функции getAdmin, они рассматриваются как два отдельных переменных, которые не могут «видеть» друг друга

Вы можете указать область, как это:

$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 }) 

Теперь оба ScriptBlocks относятся к же переменной в родительской области, и ваш -Credential переключатель должен работать

Смежные вопросы