Idąc w ślad za wpisem Raport ze statusem ochrony Defender w PowerShell postanowiłem zrobić skrypt, który przygotuje listę serwerów na podstawie danych z AD tak jak w poprzednim przypadku oraz pozyska informację o aktualnym UpTime oraz ostatnim czasie uruchomienia.
W pierwszym kroku musimy pobrać listę komputerów lub serwerów. Jeśli mamy to gdzieś w pliku to możemy tej listy użyć. Ja jednak pobieram listę maszyn z AD.
1 2 |
$ComputerList=Get-ADComputer -SearchBase "OU=Servers,OU=company,DC=domain,DC=local" -Filter 'enabled -eq "true"' | Select-Object -ExpandProperty Name $ComputerList.Count |
Zmienna $ComputerList będzie zawierała wszystkie hosty do sprawdzenia.
Teraz przedstawię kod, który sprawdza kolejne hosty z listy i odpytuje o uptime. Tak jak w poprzednim wpisie wprowadziłem też zabezpieczenie aby niedostępne hosty nie były widoczne w ostatecznym raporcie.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$UptimeReport = @() foreach ($comp in $ComputerList) { $i++ if(Test-Connection -ComputerName $comp -Count 1){ try{ $LastBoot=(Get-CimInstance -ClassName win32_operatingsystem -ComputerName $comp -ErrorAction Stop).LastBootUpTime If ($LastBoot) { $Uptime = (Get-Date) - $LastBoot $UptimeReport+=New-Object -TypeName PSObject -Property ([ordered]@{ "Computer Name"= $comp "LastBootUp" = $LastBoot "UpTime [HH:MM:SS]"=-join($Uptime.Days,":",$Uptime.Hours,":",$Uptime.Minutes) }) } }catch{} } } $UptimeReport | Format-Table -AutoSize |
Po wykonaniu się skryptu, wynik pojawi się w tabeli: