2015-05-12 1 views
0

Я пытаюсь использовать Powershell для открытия RDP-соединения с сервером, и до того, как он запустит соединение, я хочу проверить AD и подтвердить существование сервера и вытащить полное доменное имя и использовать FQDN для имени соединения.Использование Powershell для открытия сеанса RDP с FQDN

function Connect-RDP 
{ 

param (
    [Parameter(Mandatory = $true)] 
    $ComputerName, 
    [System.Management.Automation.Credential()] 
    $Credential 
) 

# take each computername and process it individually 
$ComputerName | ForEach-Object { 


    mstsc.exe /v $_ /f 
} 
} 

Это то, что я использую сейчас, но он не проверяет AD, и я не знаю, как включить это в сценарий.

Любая помощь, получаемая в правильном направлении, оценивается.

Люк

+0

У вас есть доступ к командлетам AD. «Get-Adcomputer» будет работать для этого. '[adsi]' будет работать, если у вас нет этих – Matt

+0

@Matt, это будет get-ADObject? – Luke

ответ

2

Если у вас есть доступ к командлетам AD это можно было бы сделать довольно легко.

$ComputerName | ForEach-Object{Get-ADComputer $_ -ErrorAction SilentlyContinue} | 
    Select-Object -ExpandProperty DNSHostName | ForEach-Object { 
    mstsc.exe /v $_ /f 
} 

Это займет каждое имя и попытаться получить объект компьютера. Если он не существует, ошибка не будет отображаться, и запись будет пропущена.

Update

-ErrorAction не работал так, как я хотел, чтобы в моем коде выше. Вместо этого я использовал блок catch try. Если ничего другого не является еще одним примером

$ComputerName | ForEach-Object{ 
    Try{ 
     $computer = $_ 
     mstsc.exe /v (Get-ADComputer $computer -ErrorAction Stop | Select-Object -ExpandProperty DNSHostName) /f 
    } catch { 
     Write-Host "Could not locate computer '$computer' in AD." -ForegroundColor Red 
    } 
} 

Примечание: Я думаю, что название $ComputerName вводит в заблуждение, так как вы лечите его как массив.

+0

Я бы изменил «имя_компьютера», на самом деле я не уверен, почему я даже сделал это в цикле, так как я только подключаюсь к одному за раз, но это помогает, спасибо! – Luke

+0

@ Luke Если это так, то просто удалите всю структуру цикла и сохраните ее содержимое. Все будет хорошо. Мне было интересно, почему вы все равно подключаетесь к нескольким машинам. – Matt

+0

Это фрагмент кода, который, как я полагаю, получил один из моих сотрудников из веб-сайта сценария, и я просто сохранил его таким образом, но я удалил цикл и добавил поиск в Get-ADComputer, чтобы он искал весь наш лес, а не просто один домен, на котором находится моя рабочая станция. – Luke

1

Следующий должен делать это (требуется модуль ActiveDirectory):

$ComputerName | % { 

    try { 
    $fqdn = (Get-ADComputer -Identity $_).DNSHostname 
    }catch{//do whatever you want with the error} 

    if($fqdn){ 
    mstsc.exe /v $fqdn /f 
    } 

} 
+0

Поскольку возможно получить ошибки, было бы желательно выполнить некоторую обработку с помощью «Get-ADComputer». – Matt

+0

мудрые слова, вы знаете i'm lazy – Paul

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