我试图将一个简单的脚本放在一起,该脚本将检查非常大的服务器列表的状态。在这种情况下,我们将其称为servers.txt。我知道使用Test-Connection可以在-count开关上指定的最短时间为1。我的问题是,如果脚本中最终拥有1000台计算机,则返回结果可能会延迟1000秒。我的问题:有没有一种方法可以快速对大量计算机进行测试连接测试,而又不必等待一次失败?
当前代码:
Get-Content -path C:\Utilities\servers.txt | foreach-object {new-object psobject -property @{ComputerName=$_; Reachable=(test-connection -computername $_ -quiet -count 1)} } | ft -AutoSize
Run Code Online (Sandbox Code Playgroud)
我一直在为此使用工作流程。使用生成许多子进程的作业(对我来说)可用。
workflow Test-WFConnection {
param(
[string[]]$computers
)
foreach -parallel ($computer in $computers) {
Test-Connection -ComputerName $computer -Count 1 -ErrorAction SilentlyContinue
}
}
Run Code Online (Sandbox Code Playgroud)
用作
Test-WFConnection -Computers "ip1", "ip2"
Run Code Online (Sandbox Code Playgroud)
或者,声明 a [string[]]$computers = @()
,用您的列表填充它并将其传递给函数。
Test-Connection有一个-AsJob开关,它可以完成您想要的操作。要实现相同的目的,您可以尝试:
Get-Content -path C:\Utilities\servers.txt | ForEach-Object { Test-Connection -ComputerName $_ -Count 1 -AsJob } | Get-Job | Receive-Job -Wait | Select-Object @{Name='ComputerName';Expression={$_.Address}},@{Name='Reachable';Expression={if ($_.StatusCode -eq 0) { $true } else { $false }}} | ft -AutoSize
希望有帮助!
归档时间: |
|
查看次数: |
4773 次 |
最近记录: |