当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 在 PowerShell 中 Ping 计算机列表 [3 种方法]

作者:精品下载站 日期:2024-12-14 05:27:38 浏览:14 分类:玩电脑

在 PowerShell 中 Ping 计算机列表 [3 种方法]


[玩转系统] 在 PowerShell 中 Ping 计算机列表 [3 种方法]

在 PowerShell 中 Ping 计算机列表的不同方法

我们可以使用多种方法在 PowerShell 中 ping 计算机列表。现在,ping 是什么意思?对计算机执行 Ping 操作意味着确定联网计算机是否可用且有响应。如果联网计算机(我们也可以将其称为目标计算机)可用并做出响应,它将向发起 ping 请求的发送者发送回复。来自目标计算机的此回复表明它已在线并正在运行。

我们还对计算机或计算机列表执行 ping 操作,以检查网络问题并验证网络连接。例如,对计算机执行 ping 操作可以帮助我们了解问题是与目标计算机本身有关还是与网络连接有关。要 ping 计算机,我们可以使用以下方式:

  • 使用 Test-Connect Cmdlet
  • 使用 WMIGet-WmiObject Cmdlet
  • 使用 System.Net.NetworkInformation.Ping 类

为了了解如何 ping 计算机列表,我们将所有计算机的 IP 保存在包含以下数据的文本文件 (computersList.txt) 中。

ComputersList.txt的内容:

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4

请注意,您也可以将上述 IP 地址替换为计算机名称。

现在,我们知道什么是 ping 以及为什么使用它。我们还有一个要 ping 的计算机列表,因此让我们讨论 ping 这些计算机的各种方法。

使用 Test-Connect Cmdlet

要在 PowerShell 中 ping 计算机的 IP 列表:

  • 使用 Get-Content cmdlet 从 computerList.txt 检索计算机列表并将其保存在变量中。
  • 使用 foreach 循环迭代我们在上一步中创建的计算机列表中的每台计算机。
  • foreach 循环的每次迭代中:

    • 使用 Test-Connect cmdlet 发送 ping 请求并将回复保存在变量中。
  • 使用 if-else 打印当前计算机是否根据指定条件启动/关闭。

使用测试连接 Cmdlet:

$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
    $pingComputer = Test-Connection $computer -Count 1 -Quiet
    if ($pingComputer) {
        Write-Host "$computer is up"
    } else {
        Write-Host "$computer is down"
    }
}

输出 :

192.168.1.1 is up
192.168.1.2 is down
192.168.1.3 is down
192.168.1.4 is down

首先,我们使用 Get-Content cmdlet 读取 computersList.txt 文件的内容并将其保存在 $computers 变量中。 computersList.txt 位于当前目录;您可以将此文件放在本地计算机上的任何位置。 computersList.txt 包含计算机的 IP,但此处也可以使用计算机名称。

接下来,我们使用 foreach 循环来迭代 $computers 数组。 在每次迭代中,我们使用 Test-Connection 以及 -Count-Quiet 参数来 ping 当前计算机,并将回复保存在 >$pingComputer 变量。此处,Test-Connection cmdlet 将 Internet 控制消息协议 (ICMP) 回显请求数据包 (ping) 发送到一台或多台计算机。

我们可以使用 Test-Connection cmdlet 来检查特定计算机是否在 IP 网络上可用且响应。我们还可以使用它的参数来提及发送和接收机器,设置超时和 ping 计数,将命令作为后台作业运行,以及验证或配置特定连接。您可以在这里找到更多相关信息。

Test-Connection cmdlet 返回 TestConnectionCommand+PingStatus 作为我们可以在 PowerShell 中使用的对象。但是,在上面的示例中,我们没有将 TestConnectionCommand+PingStatus 作为对象获取;而是将其作为对象获取。为什么?这是因为我们使用了-Quiet参数,该参数返回一个布尔值,如果目标机器已启动,则返回true;否则,。此外,-Count 参数用于指定一次仅 ping 一台计算机。

最后,我们使用 if-else 块并检查 $pingComputer 是否为 true。如果是,则执行 if 块;否则,else 块将运行。最后,为了在 PowerShell 控制台上显示消息,我们使用了 Write-Host cmdlet,它用于将自定义输出写入主机(主机指的是 PowerShell 控制台)。

同样,可以使用计算机名称而不是 IP 进行 ping 操作。

使用测试连接 Cmdlet:

$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
    $pingComputer = Test-Connection $computer -Count 1 -Quiet
    if ($pingComputer) {
        Write-Host "$computer is up"
    } else {
        Write-Host "$computer is down"
    }
}

输出 :

DESKTOP-THATKM is up
CYBERHOST-PC is down
TAHIR-DESKTOP is down

使用 WMIGet-WmiObject Cmdlet

要在 PowerShell 中 ping 计算机的 IP 列表:

  • 使用 Get-Content cmdlet 从 computerList.txt 检索计算机列表并将其保存在变量中。
  • 使用 foreach 循环迭代我们在上一步中创建的计算机列表中的每台计算机。
  • foreach 循环的每次迭代中:

    • 使用 Win32_PingStatus cmdlet 发送 ping 请求并将提取的状态存储在变量中。
  • if-else-eq 运算符结合使用可根据给定条件打印当前计算机是否处于启动/关闭状态。
  • 使用 try-catch 块将代码括在 foreach 中,以避免破坏脚本并在发生异常时进行处理。

使用 WMI 和 Get-WmiObject:

$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
    try {
        $pingComputer = Get-WmiObject -Class Win32_PingStatus -Filter "Address='$computer'" |
                        Select-Object -ExpandProperty StatusCode
        if ($pingComputer -eq 0) {
            Write-Host "$computer is up"
        } else {
            Write-Host "$computer is down"
        }
    } catch {
        Write-Host "$computer is down"
    }
}

输出 :

192.168.1.1 is up
192.168.1.2 is down
192.168.1.3 is down
192.168.1.4 is down

与前面的示例一样,我们使用 Get-Content cmdlet 访问 computersList.txt 的数据并将其保存在 $computers 数组中。然后,我们使用 foreach 语句循环遍历 $computers 数组。

在每次迭代中,我们使用 Get-WmiObject cmdlet 查询名为 Win32_PingStatus 的 Windows Management Instrumentation (WMI) 类,并获取当前目标计算机 ($computer) 的 ping 请求状态)。首先,我们使用-Filter参数来编写目标计算机。 接下来,我们使用 Select-Object cmdlet 从接收到的 WMI 对象中提取 StatusCode 属性;最终结果存储在 $pingComputer 变量中。

然后,我们使用 if 语句和 -eq 比较运算符来确定 $pingComptuer 的值是否等于 0 或不。如果是,则显示当前计算机已启动;否则,它就下来了。您可能已经注意到,我们用 try-catch 块包装了 foreach 循环体,以在发生异常时对其进行处理。

现在,让我们使用计算机的名称(也称为主机名)来 ping 不同的计算机。

使用 WMI 和 Get-WmiObject:

$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
    try {
        $pingComputer = Get-WmiObject -Class Win32_PingStatus -Filter "Address='$computer'" |
                        Select-Object -ExpandProperty StatusCode
        if ($pingComputer -eq 0) {
            Write-Host "$computer is up"
        } else {
            Write-Host "$computer is down"
        }
    } catch {
        Write-Host "$computer is down"
    }
}

输出 :

DESKTOP-THATKM is up
CYBERHOST-PC is down
TAHIR-DESKTOP is down

使用 System.Net.NetworkInformation.Ping 类

要在 PowerShell 中 ping 不同计算机的 IP 列表:

  • 使用 Get-Content cmdlet 从 computerList.txt 访问计算机列表并将其保存在变量中。
  • 使用 foreach 循环迭代我们在上一步中创建的计算机列表中的每台计算机。
  • foreach 的每次迭代中:

    • 使用 New-Object cmdlet 创建 System.Net.NetworkInformation.Ping 类的对象并将其保存在变量中。
  • 使用 .Send() 方法向当前目标计算机发送 ping 请求并将响应保存在变量中。
  • 使用 if-else 打印当前计算机是否根据指定条件启动/关闭。
  • 使用 try-catch 将代码括在 foreach 中,以便在发生异常时进行处理。

使用.Ping类:

$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
 try {
    $pingComputer = New-Object System.Net.NetworkInformation.Ping
    $response = $pingComputer.Send($computer)
    if ($response. Status -eq "Success") {
        Write-Host "$computer is up"
    } else {
        Write-Host "$computer is down"
    }
 } catch {
        Write-Host "$computer is down"
 }
}

输出 :

192.168.1.1 is up
192.168.1.2 is down
192.168.1.3 is down
192.168.1.4 is down

此代码与前一个代码类似,只是有一些变化。首先,我们使用 New-Object cmdlet 创建 System.Net.NetworkInformation.Ping 类的对象并将其保存在 $pingComputer 中> 变量。接下来,我们创建了此类的一个对象来访问其 .Send() 方法,以将 $computer 作为参数来发送 ping 请求。

.Send() 方法向给定计算机发送 ICMP 回显消息,并从该计算机获取相应的 ICMP 回显响应;我们将此响应保存在 $response 变量中。最后,我们使用 if 语句和 -eq 运算符来确定 $response.Status 是否等于 Success.如果是,则表明目标机器已启动并正在运行;否则,它就下来了。最后,我们使用 try-catch 块来避免破坏脚本并处理发生的异常。

让我们使用相同的代码通过计算机名称来 ping 计算机列表。

使用.Ping类:

$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
 try {
    $pingComputer = New-Object System.Net.NetworkInformation.Ping
    $response = $pingComputer.Send($computer)
    if ($response. Status -eq "Success") {
        Write-Host "$computer is up"
    } else {
        Write-Host "$computer is down"
    }
 } catch {
        Write-Host "$computer is down"
 }
}

输出 :

DESKTOP-THATKM is up
CYBERHOST-PC is down
TAHIR-DESKTOP is down

这就是如何在 PowerShell 中 ping 计算机列表的全部内容。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯