批处理文件按名称对网络上的计算机进行 MASS ping 组,检查回复并解析主机名

tbo*_*one 3 scripting windows active-directory

所以,我的 Windows Active Directory 网络上有 5000 台计算机的列表,这些计算机可能仍然存在,也可能不存在(我知道,不要问......我需要知道一个项目,当然网络人员的帮助很少,以及他们给我的数据中有很多错误)

计算机名称在 SAT1 到 SAT5000 之间。但是,其中一些可能已升级到新操作系统并重命名。所以在这种情况下,我也想检测新名称。

我想知道是否有人可能有一个脚本,给定一个包含计算机名称列表的文本文件,每个脚本: 1. ping 计算机以检查是否存在(是的,它必须打开,我知道)
2. 在收到第一次 ping 的 ip,执行 ping -a 以获取主机名
3. 将结果写入文本文件

(更好的是......是否有可能以某种方式将初始文件拆分为多个文件,并生成多个批处理文件以同时运行,以降低同步 ping 5000 台机器的速度??)

更新

这篇文章似乎与我正在寻找的内容有些相关:http : //www.enterpriseitplanet.com/networking/features/article.php/1571771

更新 2

这就是我最终的结果:

@echo off
rem del output.txt
rem Loop thru list of computer names in file specified on command-line

for /f %%i in (%1) do call :check_machine %%i
goto end

:check_machine

rem Check to see if machine is up.
echo %1
ping -n 2 %1 >NUL 2>NUL
if errorlevel 1 goto down

rem Reverse-lookup machine name and report
  for /f "usebackq tokens=2,3" %%d in (`ping -n 1 -a %1 ^| find "Pinging "`) do echo %1, %%d,%%e >> output.txt
goto end

:down
  rem Report machine down
  echo %1 >> output.txt

:end
Run Code Online (Sandbox Code Playgroud)

输出格式如下:

SAT10 
SAT1209 
SAT601, CGY2601.na.sat.com,[110.3.111.70] 
SAT3592, CGY3592.na.sat.com,[110.0.237.45] 
Run Code Online (Sandbox Code Playgroud)

如果将计算机列表拆分为多个较小的文件,则可以像这样异步 ping:

del output.txt
start MassPing.cmd Computers1.txt
start MassPing.cmd Computers2.txt
start MassPing.cmd Computers3.txt
start MassPing.cmd Computers4.txt
start MassPing.cmd Computers5.txt
start MassPing.cmd Computers6.txt
Run Code Online (Sandbox Code Playgroud)

Eva*_*son 7

这是给您的批处理文件:

@echo off
rem Loop thru list of computer names specified on command-line
for /f %%i in (%1) do call :check_machine %%i
goto end

:check_machine

rem Check to see if machine is up.
ping -n 2 %1 >NUL 2>NUL
if errorlevel 1 goto down

rem Reverse-lookup machine name and report
for /f "usebackq tokens=2" %%d in (`ping -n 1 -a %1 ^| find "Pinging"`) do echo %1:Up:%%d
goto end

:down
rem Report machine down
echo %1:Down

:end
Run Code Online (Sandbox Code Playgroud)

将一个包含计算机名称列表的文本文件传递给它,它会 PING 它们(2 次尝试 - 您可以通过增加第一个 PING 命令行中“-n”之后的数字来增加它),如果它得到响应,执行名称的反向查找。它返回结果为:

computer-name-1:Up:name-it-resolved-to
computer-name-2:Down
computer-name-3:Up:name-it-resolved-to
...
Run Code Online (Sandbox Code Playgroud)

要并行运行多个,只需使用不同的机器名称列表制作多个文本文件并并行启动几个副本。

又快又脏,省心省力。