我有一个设备列表,我想ping它们以查看它们是否处于活动状态。如果它们是活动的(即使没有),我想登录到一个文件。因此,活动设备转到一个文件,“unpingable”设备被写入另一个文件。我下面的脚本适用于较小的计算机样本,但是当我添加完整列表时,脚本的“测试连接”部分需要数小时才能完成(大约8,000台设备)。有没有办法通过并行运行命令来提高性能?在我的搜索中,我遇到了David Wyatt =>的这个包装函数。 TestConnectionAsync但我不确定如何将结果分成两个文件。任何帮助,将不胜感激。
代码:
ForEach ($PC in $Computer_List) {
If (Test-Connection -ComputerName $PC -Quiet -Count 1) {
Add-Content -value $PC -Path "$UPpath"
} Else {
Add-Content -Value $PC -Path "$DOWNpath"
}
}
答案 0 :(得分:2)
Test-ConnectionAsync
的输出使这很容易:
当您指定Test-ConnectionAsync的-Quiet开关时,它将返回PSCustomObjects的集合,其属性为" ComputerName"和"成功"。成功是您从Test-Connection -Quiet收到的布尔值; PSCustomObject只允许您将该结果与目标地址相关联。
所以你要做的就是:
Success
属性,看看是否应将其放在一个文件或另一个文件中# 1. Gather ping results
$TestResults = $ComputerList | Test-ConnectionAsync -Quiet
# 2. Loop through results and look at Success
foreach($Result in $TestResults){
$FilePath = if($Result.Success){
$UPpath
} else {
$DOWNpath
}
Add-Content -Path $FilePath -Value $Result.ComputerName
}