mamamia 13 Geschrieben 25. Mai 2011 Melden Teilen Geschrieben 25. Mai 2011 Hallo Board, ich stand vor dem Problem, mir eine Übersicht zu verschaffen, welcher Server gerade welchen Updatestatus hat. Es ist so, dass nach dem Freigeben der Updates man in einer großen Farm und mit mehreren Admins die Übersicht verliert, auf welchem Server noch Interaktionen zu tätigen sind (Updates installieren, Neustarten, Nacharbeiten, oder eben nix). Es ist bei uns so, dass Updates mit einem Monat Verzögerung ausgerollt werden und auf den Servern manuell installiert werden müssen. Daher kann mir die WSUS Konsole keine genauen Daten liefern. Ich habe mir also ein Script geschrieben, welches die \windowsupdate.log auf den Servern parst und mir dann alles detailliert ausgibt oder eine eMail versendet. Zudem wurden den Computerobjekten noch Besitzer (die jeweiligen Admins) zugewiesen, damit jeder über seine Server informiert ist. Es geht aber auch ohne! Benötigt werden die ActiveRoles von Quest (PowerShell Commands (CMDLETs) for Active Directory by Quest Software) Die Ausgabe sieht wie folgt aus: Folgende Server sind noch nicht geupdated bzw neugestartet: Admin A ServerA01 11 neue(s) Update(s) anstehend ServerA02 10 neue(s) Update(s) anstehend ServerA03 13 neue(s) Update(s) anstehend ServerA04 muss neugestartet werden Admin B ServerB01 11 neue(s) Update(s) anstehend ServerB02 10 neue(s) Update(s) anstehend ServerB03 13 neue(s) Update(s) anstehend ServerB04 muss neugestartet werden Wir haben es noch mit einem geplanten Task verknüpft und bekommen so eine aktuelle Übersicht des Updatestatus per eMail. Vielleicht kann es ja jemand gebrauchen. Gegen ein bisschen Feedback hätte ich nix einzuwenden ;) Zitieren Link zu diesem Kommentar
mamamia 13 Geschrieben 25. Mai 2011 Autor Melden Teilen Geschrieben 25. Mai 2011 Das Script: # Region Description # # Name: checkServerUpdateState # Author: Markus Frank # Version: 0.2 { $_ -Like '*Reboot Pending*' -or $_ -Like '*RebootRequired=1*' } hinzugefügt, um DC´s abzufragen # 0.1 initiale Version # Description: prüft auf allen Servern den Stand der Windows Updates # # EndRegion Add-PSSnapin *Quest* Clear $sendmail = $true $BodyHeader = "Folgende Server sind noch nicht geupdated bzw neugestartet:`r`r" $Body = "" $allServer = 0 # definieren der Server $Server = Get-QADComputer -SearchRoot 'OU=Domain Controllers,DC=domain,DC=local' -Name "DE-DC*" $Server = $Server + (Get-QADComputer -SearchRoot 'OU=DE,OU=Luetze Group,DC=domain,DC=local' -OSName "*Windows Server*") # start der Abfrage $Server | Sort-Object Name | Group-Object managedby | ForEach-Object { if ($_.Name) { $Name = (Get-QADObject $_.Name).displayname $email = (Get-QADObject $_.Name).email } else { $Name = "ohne Zuordnung" } $BodyOwner = "$Name`r" $ServerCount = 0 $_.Group | ForEach-Object { #prüfen ob Host erreichbar ist if (Test-Connection -ComputerName $_.Name -Quiet -Count 1) { # Anzahl Updates ermitteln $strcomputer = $_.Name $WSUSLog_Reboot_Time = "" $WSUSLog_Reboot_Time = "" # letzte Zeile Pending Reboot auslesen $path1 = "\\$strComputer\c$\windows\windowsupdate.log" $WSUSLog_Reboot = Get-Content $Path1 -Encoding UTF8 | Where-Object { $_ -Like '*Reboot Pending*' -or $_ -Like '*RebootRequired=1*' } | Select -Last 1 $WSUSLog_Reboot = $WSUSLog_Reboot.Split("`t") $WSUSLog_Reboot_Time = $WSUSLog_Reboot[0]+" "+$WSUSLog_Reboot[1].Substring(0,8) $WSUSLog_Reboot_Time = Get-Date $WSUSLog_Reboot_Time # letzte Zeile Updates detected auslesen $WSUSLog_Updates = Get-Content $Path1 -Encoding UTF8 | Where-Object { $_ -Like '*updates detected*' } | Select -Last 1 $WSUSLog_Updates = $WSUSLog_Updates.Split("`t") $WSUSLog_Updates_Time = $WSUSLog_Updates[0]+" "+$WSUSLog_Updates[1].Substring(0,8) $WSUSLog_Updates_Time = Get-Date $WSUSLog_Updates_Time # Datum vergleichen if ($WSUSLog_Reboot_Time -ge $WSUSLog_Updates_Time) { $BodyOwner = $BodyOwner + " " + $_.Name + "`t" + $_.description + " | muss neugestartet werden`r" $ServerCount++ $allServer++ } else { $WSUSLog_Updates = $WSUSLog_Updates[5].Split(" ") # wenn mehr als 0 Updates anstehen, ausgeben if ($WSUSLog_Updates[3] -gt 0) { $BodyOwner = $BodyOwner + " " + $_.Name + "`t" + $_.description + " | " + $WSUSLog_Updates[3] + " neue(s) Update(s) anstehend`r" $ServerCount++ $allServer++ } } } } # Zusammenfassung senden, für einzelne User if (($sendmail) -and ($ServerCount -gt 0)) { Send-MailMessage -From "WSUS Computer Status<wsusstatus@domain.local>" -To "email@domain.local" ` -Subject "aktueller Stand Windows Updates Server $Name" ` -Body "$BodyHeader$BodyOwner" -SmtpServer "smtp.domain.local" } if ($ServerCount -gt 0) { $Body = $Body + $BodyOwner + "`r" } } # Zusammenfassung senden für alle User und Server if (($sendmail) -and ($allServer -gt 0)) { Send-MailMessage -From "WSUS Computer Status<wsusstatus@domain.local>" -To "email@domain.local" ` -Subject "aktueller ServerStatus Windows Updates" ` -Body "$BodyHeader$Body" -SmtpServer "smtp.domain.local" } else { Write-Host $BodyHeader$Body } Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.