使用Powershell打开带有FQDN的{RDP会话

时间:2015-05-12 16:20:26

标签: powershell

我正在尝试使用Powershell打开与服务器的RDP连接,在启动连接之前,我希望它检查AD,并确认服务器存在并拔出FQDN并使用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,我不知道如何将其合并到脚本中。

任何帮助指向正确方向的人都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

如果您可以访问AD cmdlet,则可以轻松完成。

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

这将获取每个名称并尝试获取计算机对象。如果它不存在则不会显示任何错误,并且将跳过该条目。

<强>更新

-ErrorAction在上面的代码中没有像我想要的那样工作。我用了一个try catch块代替。如果没有别的,那就是另一个例子

$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具有误导性,因为您将其视为数组。

答案 1 :(得分:1)

以下应该这样做(需要模块ActiveDirectory):

$ComputerName | % {

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

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

 }