测试与多个服务器的RDP连接的脚本

时间:2020-05-21 23:11:04

标签: python-3.x powershell

我是脚本世界的新手。 作为专线迁移的一部分,我需要测试对两个数据中心中的服务器的RDP访问。我有2000多台服务器,并且无法手动测试与所有服务器的RDP连接。我希望大家能帮助我编写一个脚本,在其中提供脚本中所有服务器的IP地址,并测试到所有这些服务器的RDP连接,并给出RDP连接成功与否的结果。 / p>

预先感谢 拉维

1 个答案:

答案 0 :(得分:1)

创建服务器名称的文本文件或直接从ADDS读取。 使用ForLoop中用于RDP协议的CommonTCPPort开关,将该管道中的计算机名传递到Test-NetConnection cmdlet。

# Get specifics for a module, cmdlet, or function
(Get-Command -Name Get-Content).Parameters
(Get-Command -Name Get-Content).Parameters.Keys
Get-help -Name Get-Content -Examples
Get-help -Name Get-Content -Full
Get-help -Name Get-Content -Online


(Get-Command -Name Get-ADComputer).Parameters
(Get-Command -Name Get-ADComputer).Parameters.Keys
Get-help -Name Get-ADComputer -Examples
Get-help -Name Get-ADComputer -Full
Get-help -Name Get-ADComputer -Online


(Get-Command -Name Test-NetConnection).Parameters
(Get-Command -Name Test-NetConnection).Parameters.Keys
Get-help -Name Test-NetConnection -Examples
Get-help -Name Test-NetConnection -Full
Get-help -Name Test-NetConnection -Online

About_loops

Youtube

更新

根据我的评论,您应该只需要这样的东西。

(Get-ADComputer).Name | 
ForEach {Test-NetConnection -ComputerName $PSItem -CommonTCPPort RDP}

Get-Content -Path 'D:\ServerNames.txt' | 
ForEach {Test-NetConnection -ComputerName $PSItem -CommonTCPPort RDP}

更新

作为答复的文件外评论的后续内容。再次,退后一步,花些时间学习PowerShell(内置帮助文件,Youtube,文章,书籍,博客等),以限制/避免混乱,错误,不良的编码习惯,挫败感以及可能的严重危害。创建,更新,删除计算机或环境时,可能会在以后使用。

因此,您的文件用例就是其中之一:

$env:COMPUTERNAME | 
ForEach {Test-NetConnection -ComputerName $PSItem -CommonTCPPort RDP}

<#
# Results

ComputerName           : Labhost001
RemoteAddress          : ...
RemotePort             : 3389
InterfaceAlias         : ...
SourceAddress          : ...
PingSucceeded          : True
PingReplyDetails (RTT) : ...
TcpTestSucceeded       : False
#>

You should only need these ....
ComputerName, RemotePort, PingSucceeded, TcpTestSucceeded
... that last property says whether the connection worked.

$env:COMPUTERNAME | 
ForEach {Test-NetConnection -ComputerName $PSItem -CommonTCPPort SMB}


<#
# Results

ComputerName     : Labhost001
RemoteAddress    : ...
RemotePort       : 445
InterfaceAlias   : ...
SourceAddress    : ...
TcpTestSucceeded : True
#>

$env:COMPUTERNAME | 
ForEach {
    Test-NetConnection -ComputerName $PSItem -CommonTCPPort SMB | 
    Select-Object -Property ComputerName, RemotePort, PingSucceeded, TcpTestSucceeded
}  

<#
# Results

ComputerName RemotePort PingSucceeded TcpTestSucceeded
------------ ---------- ------------- ----------------
Labhost001     445         False             True
#>


$env:COMPUTERNAME | 
ForEach {
    Test-NetConnection -ComputerName $PSItem -CommonTCPPort SMB | 
    Select-Object -Property ComputerName, RemotePort, PingSucceeded, TcpTestSucceeded | 
    Out-File -FilePath 'D:\Temp\TNCResults.txt' -Append
}  
Get-Content -Path 'D:\Temp\TNCResults.txt'
<#
# Results

ComputerName RemotePort PingSucceeded TcpTestSucceeded
------------ ---------- ------------- ----------------
Labhost001     445         False             True
#>


$env:COMPUTERNAME | 
ForEach {
    Test-NetConnection -ComputerName $PSItem -CommonTCPPort SMB | 
    Select-Object -Property ComputerName, RemotePort, PingSucceeded, TcpTestSucceeded | 
    Export-Csv -Path 'D:\Temp\TNCResults.csv' -NoTypeInformation -Append
}  

Get-Content -Path 'D:\Temp\TNCResults.csv'
<#
# Results

"ComputerName","RemotePort","PingSucceeded","TcpTestSucceeded"
"Labhost001","445","False","True"
#>

Import-Csv -Path 'D:\Temp\TNCResults.csv'
<#
# Results

ComputerName RemotePort PingSucceeded TcpTestSucceeded
------------ ---------- ------------- ----------------
Labhost001     445        False         True 
#>