다음은 NAS 장치를 핑 (ping)하고 응답하지 않는 경우보고하는 스크립트입니다. 그런 다음 장치가 파일과 화면에 내려간 일 수를 출력하려고합니다. 하루에 한 번 실행되므로 장치가 이전 요일 목록에 있었는지 확인하고 목록에있는 요일의 값을 가져 와서 하나씩 늘린 다음 오늘의 장치 오류에 기록합니다 목록 목록.여러 번 출력하는 PowerShell 스크립트
끝 부분의 루프에 도달 할 때까지 제대로 작동합니다. 그 시점에서 출력을 여러 번 반환/쓰는 것 같지만 정확히 이유를 말할 수는 없습니다. 각 장치마다 한 번만 출력하고 싶습니다. 현재 1의 날짜 입력으로 테스트 중이므로 2를 입력하여 출력해야합니다.
Import-Module ActiveDirectory
$failurepath = "C:\scripts\NAS Ping\failures.txt"
$naslist = @(Get-ADComputer -Filter {(name -like "*nas0*") -and (name -notlike "*spare*")} | Select-Object name -ExpandProperty Name)
$failurepath2 = "C:\scripts\NAS Ping\naslist.txt"
$failurepath3 = "C:\scripts\Nas Ping\previousfailures.txt"
if (Test-Path $failurepath) {
if (Test-Path $failurepath3) {
Remove-Item $failurepath3
}
Rename-Item -Path $failurepath -NewName $failurepath3
}
if (test-path $failurepath2) {
Remove-Item $failurepath2
}
$naslist | Out-File -Force -FilePath "$($failurepath2)"
foreach ($DPs in $NASlist) {
$pingable = test-connection -computername $($DPs) -count 1 -quiet
if ($pingable) {
$goodPCs += , $($DPs).Substring(0, 4)
} else {
$secondtest = Test-Connection -ComputerName $($DPs) -Count 4 -Quiet
if (!$secondtest) {
[array]$badnas += , $($DPs)
}
}
}
if (Test-Path "C:\scripts\Nas Ping\previousfailures.txt") {
$data = Get-Content "C:\scripts\Nas Ping\previousfailures.txt"
} else {
$data = "not found"
}
for ($i = 0; $i -lt $badnas.Length; ++$i) {
if (!($goodPCs -contains $($badnas[$i].Substring(0, 4)))) {
for ($j = 0; $j -lt $data.Length; ++$j) {
if ($badnas[$i] -eq $data[$j]) {
[int]$data[$j + 1] = [convert]::ToInt32($data[$j + 1])
$data[$j + 1]++
$data[$j] | Out-File -Force -FilePath "$($failurepath)" -Append
$data[$j + 1] | Out-File -Force -FilePath "$($failurepath)" -Append
Write-Host $($data[$j]) is not pingable for the last $($data[$j + 1]) days
$j++
} else {
$badnas[$i] | Out-File -Force -FilePath "$($failurepath)" -Append
'1' | Out-File -Force -FilePath "$($failurepath)" -Append
Write-Host $($badnas[$i]) is not pingable for the last 1 days
$j++
}
}
}
}
및 출력 (예를 들어)입니다 :
Saaa-NAS01 is not pingable for the last 2 days Saaa-NAS01 is not pingable for the last 1 days Saaa-NAS01 is not pingable for the last 1 days Sbbb-NAS01 is not pingable for the last 1 days Sbbb-NAS01 is not pingable for the last 2 days Sbbb-NAS01 is not pingable for the last 1 days Sccc-NAS01 is not pingable for the last 1 days Sccc-NAS01 is not pingable for the last 1 days Sccc-NAS01 is not pingable for the last 2 days
모든 나는 그것을 반환하려는입니다
Saaa-NAS01 is not pingable for the last 2 days Sbbb-NAS01 is not pingable for the last 2 days Sccc-NAS01 is not pingable for the last 2 days
당신은 그냥 CSV에서 별도로 이름과 수를 저장하는 경우가 많은하여 로직을 줄일 수있는 것 같다이 코드로 이동합니다. 각 카운트를 증가/재설정합니다. – BenH
내가 믿는 바는 이것이 잘못된 것일 수 있습니다. 모든 NAS 이름과 개수를 CSV에 저장 한 다음 필요에 따라 증가/재설정하는 것입니다. 그 문제는 우리 조직이 모든 NAS 이름의 목록을 가지고 있지 않으며 계속 변화하고 있으므로 매번 AD에서 가져와 온라인 상태인지 아닌지를 결정해야한다는 것입니다. – ManofManyTigers
failures.txt에 내역 데이터를 이미 저장하고 있습니다. 별다른 차이는 없습니다. 광고가 실행될 때마다 csv를 업데이트/정리하십시오. – BenH