我正在尝试使用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,我不知道如何将其合并到脚本中。
任何帮助指向正确方向的人都会受到赞赏。
路
答案 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
}
}