小赖子的英国生活和资讯

Powershell 脚本用来批量测试服务器是否在线

阅读 桌面完整版

最近在学习 Powershell 编程, 发现 Powershell 是一门简单但是非常强大的语言, 主要是用于 Windows 服务器上. 用于完成各项服务器维护的任务.

下面的 Powershell 会测试命令行给的IP段里的所有机器是否可以联接, 也就是IPv4 地址的最后一位从1变化到254, 0和255 有特殊用途,不作为具体机器的地址. 你可以同时在命令行里指定多个IP段.

测试联结的命令是 ping 如果联接可以成功, 则返回是 0 否则是 1. Ping 命令的参数 -n 1 指定的是每个IP地址只尝试联接1次, 这样不会让脚本检查显得缓慢. 在 DOS/Windows 批处理中, %errorlevel% 变量用于返回上一次程序/命令执行的情况, 而在 Powershell 中, 需要用 $LASTEXITCODE 来检查.

在 Powershell 中, 可以使用 $? 来判断上条命令的执行情况 True 或者是 False. 而 $LASTEXITCODE 只是返回上个WIN32程序的返回值.

<#
    A Powershell Script to check machines are up/down in a IP
    Example: PPing 192.168.0 192.168.3
    https://HelloACM.com
#>

if  ($args.count -eq 0) {
    Write-Host "使用例子: PPing 192.168.0"
    exit
}

for ($j = 0; $j -lt $args.count; $j ++) {
    # loop current ip range    
    $ip = $args[$j] + "."
    for ($i = 1; $i -lt 255; $i ++) {
        # get each ip
        $cur = $ip + $i
        # ping once 
        ping -n 1 $cur | Out-Null
        if ($LASTEXITCODE -eq 0) {
            Write-Host "$cur 在线"
        } else {
            Write-Host "$cur 离线"
        }
    }
}

在 Powershell 中 用对象 $args 来获取命令行参数 . count 属性返回总共有多少个命令行参数. 而访问每一个参数的时候就像访问数组一样, 第一个参数是 $args[0].

英文同步: https://helloacm.com/batch-check-machines-updown-in-ip-ranges-using-powershell/

强烈推荐

微信公众号: 小赖子的英国生活和资讯 JustYYUK

阅读 桌面完整版
Exit mobile version