我是脚本世界的新手。 作为专线迁移的一部分,我需要测试对两个数据中心中的服务器的RDP访问。我有2000多台服务器,并且无法手动测试与所有服务器的RDP连接。我希望大家能帮助我编写一个脚本,在其中提供脚本中所有服务器的IP地址,并测试到所有这些服务器的RDP连接,并给出RDP连接成功与否的结果。 / p>
预先感谢 拉维
答案 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
更新
根据我的评论,您应该只需要这样的东西。
(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
#>