需求:日常中有很多IP需要测试在不在线,但是不连贯,一个个ping有浪费时间。现场写命令又麻烦。
用
PowrShell
编写的简单工具,可以看下代码注释也可以看下最后面的说明。使用方法:把此代码保存为.ps1格式。使用
PowerShell
运行,运行后会提示选择您要打开的txt文档。
- 以下是源码:
# 设置输出编码为UTF-8以支持非ASCII字符
$OutputEncoding = [System.Text.Encoding]::UTF8
# 导入System.Windows.Forms程序集以使用文件对话框
Add-Type -AssemblyName System.Windows.Forms
# 创建文件对话框以选择TXT文件
$openFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$openFileDialog.Filter = "Text Files (*.txt)|*.txt"
$openFileDialog.Title = "选择TXT文件"
# 如果用户选择了文件并点击了“确定”
if ($openFileDialog.ShowDialog() -eq "OK") {
# 获取所选文件的文件名
$txtFile = $openFileDialog.FileName
# 定义用于存储ping结果的文件名
$pingFailFile = "PingNO.txt"
$pingSuccessFile = "PingOK.txt"
# 如果存在,则删除现有的ping结果文件
Remove-Item $pingFailFile -ErrorAction SilentlyContinue
Remove-Item $pingSuccessFile -ErrorAction SilentlyContinue
# 逐行读取所选文件
Get-Content $txtFile | ForEach-Object {
# 将每行分割为IP和主机名
$ip, $hostname = $_ -split ',', 2
# 显示指示正在执行ping操作的消息
Write-Host "正在ping $ip - $hostname..."
# 执行ping操作
if (Test-Connection -ComputerName $ip -Count 3 -Quiet) {
# 如果ping成功,则追加到成功文件中
Add-Content -Path $pingSuccessFile -Value "$ip - $hostname Ping成功"
} else {
# 如果ping失败,则追加到失败文件中
Add-Content -Path $pingFailFile -Value "$ip - $hostname Ping失败"
}
}
# 显示完成消息
Write-Host "Ping操作完成."
# 检查是否有不可达的IP,并显示消息
if (Test-Path $pingFailFile) {
Write-Host "请查看 $pingFailFile 查看不可达的IP."
}
# 检查是否有可达的IP,并显示消息
if (Test-Path $pingSuccessFile) {
Write-Host "请查看 $pingSuccessFile 查看可达的IP."
}
}
用户交互部分: 使用
System.Windows.Forms.OpenFileDialog
创建一个文件对话框,允许用户选择一个包含IP地址的TXT文件。
Ping 操作: 通过Test-Connection cmdlet
对所选文件中的每个IP地址执行ping
操作。如果 ping成功,则将结果记录到一个名为PingOK.txt
的文件中;如果 ping 失败,则记录到一个名为PingNO.txt
的文件中。
结果反馈: 在完成ping
操作后,脚本会显示一条消息表明操作已完成。然后,它会检查是否有Ping不通的IP地址(记录在PingNO.txt
文件中);如果有Ping的通的IP地址(记录在PingOK.txt
文件中)。
错误处理: 脚本使用-ErrorAction SilentlyContinue
来忽略文件操作中的任何错误,以确保即使某些文件不存在,脚本也能够继续执行。