批量检查主机名是不是有效

Posted

技术标签:

【中文标题】批量检查主机名是不是有效【英文标题】:Check if a hostname is valid or not in batch批量检查主机名是否有效 【发布时间】:2022-01-09 15:06:13 【问题描述】:

我想用一个简单的批处理脚本检查计算机是否可以 ping。 在某些情况下,我输入错误并且主机名不正确,但反馈是“成功”。

@echo off
REM stor.bat:
ping -n 1 %1 | find "TTL=" >nul
if errorlevel 1 (
        echo Reachable
        explorer.exe \\%1\c$\   
    
) else (
        echo Not reachable
)

【问题讨论】:

【参考方案1】:

你的命令是基于 find "TTL=" 的,它适用于 ip4 号码,所以这应该可以工作

@echo off
REM stor.bat:
ping -n 1 %1 | find "TTL="
if %errorlevel%==0 (echo Reachable & explorer.exe \\%1\c$\) else (echo Not reachable & pause)

所以

stor 127.0.0.1
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reachable

但 ping 并不理想,名称请参阅此响应,其中未显示成功

stor advent
Not reachable

但是ping -n 1 advent 没有返回“TTL”的提示

Pinging ADVENT [fe80::6467:ace9:6aef:cb1a%10] with 32 bytes of data:
Reply from fe80::6467:ace9:6aef:cb1a%10: time=1ms

Ping statistics for fe80::6467:ace9:6aef:cb1a%10:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 1ms, Maximum = 1ms, Average = 1ms

一种方法是“查找”响应,例如“往返”

@echo off
REM stor.bat:
ping -n 1 %1 | find "round trip"
if %errorlevel%==0 (echo Reachable & explorer.exe \\%1\c$\) else (echo Not reachable & pause)

[Edit] 正如@Stephen 提醒的那样,我们可以使用您的第一种方法,通过添加 -4 来强制 TTL=

@echo off
REM stor.bat:
ping -4 -n 1 %1 | find "TTL="
if %errorlevel%==0 (echo Reachable & explorer.exe \\%1\c$\) else (echo Not reachable & pause)

【讨论】:

强制ping 使用IP4:ping -4ping ... | findstr /c:"(0%%" 与IP4 或IP6 一起使用(只有一个% 直接在命令行上)【参考方案2】:

这个batch-file 将ping 主机以确定它是否可用。这使用 PowerShell 核心。如果您只使用 Windows PowerShell,请将 pwsh.exe 更改为 powershell.exe

请记住,某些主机可能禁用了 ICMP (ping)。

此外,如果您输入错误的联机主机名(host02 而不是 host01),它也会返回成功。

SET "THEHOST=%1"
FOR /F "delims=" %%A IN ('pwsh.exe -NoLogo -NoProfile -Command ^
    "if (Test-Connection -TargetName %THEHOST% -Count 1 -Quiet)  1  else  0 "') DO (
    SET /A "ISCONNECTED=%%A"
)
IF %ISCONNECTED% EQU 1 (
    ECHO The %THEHOST% is connected
) ELSE (
    ECHO The %THEHOST% is NOT connected
)

【讨论】:

以上是关于批量检查主机名是不是有效的主要内容,如果未能解决你的问题,请参考以下文章

linux 批量修改主机名脚本

网站IP地址有效,但不是主机名

笔记二:ansible批量设置主机名

使用dns批量管理普通主机名相关问题

批量更新zabbix中的主机名

用于阿里云批量修改主机名