Seitenindex umschalten Seiten: [1] 2  Thema versendenDrucken
Heißes Thema (mehr als 10 Antworten) WSUS-Statistiken über die PowerShell abrufen (Gelesen: 23464 mal)
MartinG
WSUS Junior Member
*
Offline



Beiträge: 41
Mitglied seit: 11.09.09
Geschlecht: männlich
WSUS-Statistiken über die PowerShell abrufen
25.09.09 um 09:44:10
Beitrag drucken  
Mit folgendem PowerShell-Skript lassen sich einige Statistiken von einem WSUS-Server (Version 3) abrufen.

Damit das Skript funktioniert, muss man es mit der Dateiendung .ps1 speichern, z.B. als wsus.ps1. Ausserdem muss das Ausführen von Skripts erst erlaubt werden, siehe dazu folgenden Artikel:
(Du musst Dich Einloggen oder Registrieren um Multimediadateien oder Links zu sehen).
Oder auch:
(Du musst Dich Einloggen oder Registrieren um Multimediadateien oder Links zu sehen).

Ist das Skript also erlaubt und als wsus.ps1 gespeichert, ruft man es folgendermassen auf:
(Natürlich muss man dafür die PowerShell installieren... das versteht sich wohl von selbst Zwinkernd)
Code
C:\batch\wsus>powershell .\wsus.ps1 



Hier der Inhalt des Skripts: (es hängt ausserdem 3 Postings weiter unten als Anhang dran)
Code
# Variables - set these to fit your needs
###############################################################################
# The server name of your WSUS server
$serverName = 'localhost'

# use SSL connection?
$useSecureConnection = $False

# the port number of your WSUS IIS website
$portNumber = 80

# warn if a computer has not contacted the server for ... days
$daysBeforeWarn = 14



# Script - don't change anything below this line!
###############################################################################

# load WSUS framework
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")   

# connect to specified WSUS server
# see here for information of the IUpdateServer class
# -> http://msdn.microsoft.com/en-us/library/microsoft.updateservices.administration.iupdateserver(VS.85).aspx
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($serverName, $useSecureConnection, $portNumber)   

# get general status information
# see here for more infos about the properties of GetStatus()
# -> http://msdn.microsoft.com/en-us/library/microsoft.updateservices.administration.updateserverstatus_properties(VS.85).aspx
$status = $wsus.GetStatus()
$totalComputers = $status.ComputerTargetCount
$computersUpToDate = $status.ComputersUpToDateCount
$computersNeedingUpdates = $status.ComputerTargetsNeedingUpdatesCount
$computersWithErrors = $status.ComputerTargetsWithUpdateErrorsCount
$totalUpdates = $status.UpdateCount
$updatesUpToDate = $status.UpdatesUpToDateCount
$updatesNeeded = $status.UpdatesNeededByComputersCount
$updatesWithErrors = $status.UpdatesWithClientErrorsCount

# needed, but not approved updates
$updateScope = new-object Microsoft.UpdateServices.Administration.UpdateScope
$updateScope.ApprovedStates = [Microsoft.UpdateServices.Administration.ApprovedStates]::NotApproved
$updateServerStatus = $wsus.GetUpdateStatus($updateScope, $False)
$updatesNeededByComputersNotApproved = $updateServerStatus.UpdatesNeededByComputersCount

# computers that did not contact the server in $daysBeforeWarn days
$timeSpan = new-object TimeSpan($daysBeforeWarn, 0, 0, 0)
$computersNotContacted = $wsus.GetComputersNotContactedSinceCount([DateTime]::UtcNow.Subtract($timeSpan))

# computers in the "not assigned" group
$computerTargetScope = new-object Microsoft.UpdateServices.Administration.ComputerTargetScope
$computersNotAssigned = $wsus.GetComputerTargetGroup([Microsoft.UpdateServices.Administration.ComputerTargetGroupId]::UnassignedComputers).GetComputerTargets().Count


# output
"WSUS statistics"
"--------------------------------------------------"
"Total Computers:			$totalComputers"
"Computers up to date:			$computersUpToDate"
"Computers needing updates:		$computersNeedingUpdates"
"Computers with errors:			$computersWithErrors"
"--------------------------------------------------"
"Total Updates:				$totalUpdates"
"Updates up to date:			$updatesUpToDate"
"Updates needed by computers:		$updatesNeeded"
"Updates with errors:			$updatesWithErrors"
"--------------------------------------------------"
"Updates that need to be approved:	$updatesNeededByComputersNotApproved"
"Computers not contacted in $daysBeforeWarn days:	$computersNotContacted"
"Unassigned computers:			$computersNotAssigned" 



Es ruft nun einige allgemeine Statistiken des WSUS-Servers ab und zeigt sie an, z.B. die Anzahl der Computer, Updates, usw.
Interessant sind hierbei hauptsächlich die Anzahl der Computer, die noch Updates benötigen, bzw. die Anzahl der Updates, die von Computern noch benötigt werden.
Zuletzt zeigt das Skript noch einige Dinge an, die ich interessant und wichtig fand (weil man hier direkt eingreifen sollte):
- Anzahl der Updates, die von mindestens einem Computer benötigt werden, aber die nicht genehmigt sind
- Anzahl der Computer, die den WSUS-Server innerhalb eines bestimmbaren Zeitraums nicht kontaktiert haben
- Anzahl der Computer, die keiner Gruppe zugewiesen sind

Die Ausgabe des Skripts:
Code
C:\batch\wsus>powershell .\wsus.ps1
WSUS statistics
--------------------------------------------------
Total Computers:                        47
Computers up to date:                   36
Computers needing updates:              5
Computers with errors:                  0
--------------------------------------------------
Total Updates:                          2258
Updates up to date:                     1244
Updates needed by computers:            9
Updates with errors:                    0
--------------------------------------------------
Updates that need to be approved:       0
Computers not contacted in 14 days:     1
Unassigned computers:                   0 




Das Skript lässt sich noch um einiges erweitern, um Anregungen und Tipps wird gebeten. Smiley
Ihr findet Links zu der ausführlichen Dokumentation der WSUS-Klassen und API im Skript.


Was kann man nun  damit anstellen? Ich habe das Skript in unsere Überwachung eingebunden, wozu wir Nagios nutzen:
(Du musst Dich Einloggen oder Registrieren um Multimediadateien oder Links zu sehen).

Nagios warnt mich nun (z.B. per Mail), wenn noch Updates freigegeben werden müssen oder Fehler in einem Update auftreten.
Über die Nagios-Erweiterung PNP4Nagios, welche den Verlauf der Nagios-Prüfungen auswertet und grafisch darstellt, bekomme ich ausserdem ein Diagramm, das die Anzahl der nicht aktuellen Computer darstellt (s. Anhang). Cool

Sicher sind noch andere Verwendungen denkbar, z.B. ein täglicher Report per Mail, oder Ähnliches. Würde mich freuen, falls jemand etwas hiermit anfangen kann, dass er sich dann kurz hier verewigt.
  
(Du musst Dich Einloggen oder Registrieren um Multimediadateien oder Links zu sehen). nagios_wsus.PNG (Anhang gelöscht)
Zum Seitenanfang
 
Sunny
Microsoft MVP
*****
Offline



Beiträge: 15166
Mitglied seit: 11.02.07
Geschlecht: männlich
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #1 - 25.09.09 um 10:36:01
Beitrag drucken  
Wow, das ist ja richtig cool. Vielen Dank dafür. Smiley
  
Zum Seitenanfang
 
UMeadow
WSUS Spezialist
*****
Offline


I Love WSUS!

Beiträge: 1381
Standort: Berlin
Mitglied seit: 22.01.08
Geschlecht: männlich
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #2 - 25.09.09 um 11:35:12
Beitrag drucken  
Wow, saubere Arbeit  Smiley Smiley
Könntest Du das Script aber bitte als TXT - Datei noch anängen, ich schaffe es jedenfalls nicht den Code sauber rauszukopieren  weinend
  
Zum Seitenanfang
 
MartinG
WSUS Junior Member
*
Offline



Beiträge: 41
Mitglied seit: 11.09.09
Geschlecht: männlich
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #3 - 25.09.09 um 12:58:11
Beitrag drucken  
Aber klar doch, hier ist das Skript im Anhang. Die Endung ".txt" bitte entfernen. Zwinkernd
  
(Du musst Dich Einloggen oder Registrieren um Multimediadateien oder Links zu sehen). wsus_ps1.txt (Anhang gelöscht)
Zum Seitenanfang
 
UMeadow
WSUS Spezialist
*****
Offline


I Love WSUS!

Beiträge: 1381
Standort: Berlin
Mitglied seit: 22.01.08
Geschlecht: männlich
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #4 - 25.09.09 um 13:52:25
Beitrag drucken  
Dankeschön  Smiley
Funktioniert super
  
Zum Seitenanfang
 
UMeadow
WSUS Spezialist
*****
Offline


I Love WSUS!

Beiträge: 1381
Standort: Berlin
Mitglied seit: 22.01.08
Geschlecht: männlich
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #5 - 25.09.09 um 14:09:07
Beitrag drucken  
MartinG schrieb on 25.09.09 um 09:44:10:
siehe dazu folgenden Artikel:
(Du musst Dich Einloggen oder Registrieren um Multimediadateien oder Links zu sehen).

Mir ist grad aufgefallen, das die Datei wsus-cleanup.txt den selben Inhalt hat wie das PS Script. Aber eigentlich sollte es ja die die dazugehörige CMD sein.

Da ich nicht weiß, an wen ich diesen Hinweis schicken kann, schreib ich einfach mal hier dazu. Zwinkernd
Schönes Wochenende an Alle
  
Zum Seitenanfang
 
Sunny
Microsoft MVP
*****
Offline



Beiträge: 15166
Mitglied seit: 11.02.07
Geschlecht: männlich
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #6 - 28.09.09 um 11:10:22
Beitrag drucken  
UMeadow schrieb on 25.09.09 um 14:09:07:
Da ich nicht weiß, an wen ich diesen Hinweis schicken kann, schreib ich einfach mal hier dazu. Zwinkernd


Im Zweifel an den Admin der Seite, und nein, ich bin das nicht. Zwinkernd Ich hab Marco schon informiert. Kann sich nur noch um Stunden handeln. Zwinkernd
  
Zum Seitenanfang
 
UMeadow
WSUS Spezialist
*****
Offline


I Love WSUS!

Beiträge: 1381
Standort: Berlin
Mitglied seit: 22.01.08
Geschlecht: männlich
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #7 - 28.09.09 um 11:23:38
Beitrag drucken  
Danke Sunny, werde ich nächste mal machen  Smiley Zwinkernd
  
Zum Seitenanfang
 
soj
WSUS Neuling
Offline


I Love WSUS!

Beiträge: 4
Mitglied seit: 22.01.10
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #8 - 06.04.10 um 10:41:44
Beitrag drucken  
Hallo Jungs,

Nettes Script. Danke. Wäre super wenn mit jemand einen Tip geben könnte warum nur die Windows Clients angezeigt werden, die sich direkt mit meinem Hauptserver verbinden. Die anderen Clients die ihre Updates über Replicaserver holen werden im Script aber nicht angezeigt. Danke.

Gruß SOJ  Smiley
  
Zum Seitenanfang
 
Sunny
Microsoft MVP
*****
Offline



Beiträge: 15166
Mitglied seit: 11.02.07
Geschlecht: männlich
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #9 - 06.04.10 um 10:59:23
Beitrag drucken  
soj schrieb on 06.04.10 um 10:41:44:
Nettes Script. Danke. Wäre super wenn mit jemand einen Tip geben könnte warum nur die Windows Clients angezeigt werden, die sich direkt mit meinem Hauptserver verbinden. Die anderen Clients die ihre Updates über Replicaserver holen werden im Script aber nicht angezeigt. Danke.


Was ist auf dem Master-WSUS denn in den Optionen bei der Personalisierung aktiviert? Und was ist beim Berichterstattungsrollup eingestellt?
  
Zum Seitenanfang
 
soj
WSUS Neuling
Offline


I Love WSUS!

Beiträge: 4
Mitglied seit: 22.01.10
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #10 - 06.04.10 um 12:40:45
Beitrag drucken  
Hallo,

Personalisierung:
ich habe dort einen Hacken bei "Computer und Status auf Replikat-Deownstreamserver einbeziehen"

Berichterstattunsrollup:
ich habe dort einen Hacken bei "Statusrollup von Replikat-Downstreamservern"

Gruß SOJ Smiley
  
Zum Seitenanfang
 
Sunny
Microsoft MVP
*****
Offline



Beiträge: 15166
Mitglied seit: 11.02.07
Geschlecht: männlich
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #11 - 06.04.10 um 13:07:24
Beitrag drucken  
Nimm die Batchdatei mit dazu und schreib dort die Servernamen rein.
  
Zum Seitenanfang
 
MartinG
WSUS Junior Member
*
Offline



Beiträge: 41
Mitglied seit: 11.09.09
Geschlecht: männlich
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #12 - 06.04.10 um 14:24:07
Beitrag drucken  
Moin SOJ,

leider habe ich hier keine Downstream-Server, um das Skript daraufhin zu testen. Aus der Doku heraus könntest du aber mal folgendes testen.

Hänge folgenden Code hinten an das Powershell-Skript an. Er ermittelt deine Downstream-Server und fragt bei jedem einzeln die Status-Informationen ab. Wenn dies funktioniert, kannst du natürlich auch das Skript dahingehend umbauen, dass zuerst alle Server durchlaufen werden und ihre Angaben addiert werden, um sie am Ende gesammelt auszugeben.

(Beispiel - nur Computer, keine Updates)
Code
# downstream servers
$downstreamservercollection = $wsus.GetDownstreamServers()
foreach ($downstreamserver in $downstreamservercollection) {
    $downstreamservername = $downstreamserver.FullDomainName   
    $downstreamserverstatus = $downstreamserver.GetStatus()
    $tC = $downstreamserverstatus.ComputerTargetCount
    $cUTD = $downstreamserverstatus.ComputersUpToDateCount
    $cNU = $downstreamserverstatus.ComputerTargetsNeedingUpdatesCount
    $cWE = $downstreamserverstatus.ComputerTargetsWithUpdateErrorsCount

    # output
    "Downstream server $downstreamservername"
    "--------------------------------------------------"
    "Total Computers:                  $tC"
    "Computers up to date:                  $cUTD"
    "Computers needing updates:            $cNU"
    "Computers with errors:                  $cWE"
} 




Die nächste Angabe ("Updates that need to be approved") sollte sehr einfach auch für Downstream-Server zu ermitteln sein: ändere dafür diese Zeile
Code
$updateServerStatus = $wsus.GetUpdateStatus($updateScope, $False) 


in diese Zeile
Code
$updateServerStatus = $wsus.GetUpdateStatus($updateScope, $True) 


(Der zweite Parameter gibt eben an, ob Downstream-Server berücksichtigt werden sollen).


Für die letzten beiden Angaben ("Computers not contacted in xx days" und "Unassigned computers") habe ich bisher nichts gefunden in der Doku. Bist du sicher, dass diese nicht von den Downstream-Server berücksichtigt werden?


Wäre nett, wenn du Rückmeldung gibst, ob das funktioniert oder nicht. Smiley
  
Zum Seitenanfang
 
soj
WSUS Neuling
Offline


I Love WSUS!

Beiträge: 4
Mitglied seit: 22.01.10
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #13 - 07.04.10 um 15:52:17
Beitrag drucken  
Hallo MartinG,

erst einmal einen riesen Dank. Ich habe erst mal einen Schnelltest durchgeführt. Die Ergänzung gehen super. Bis auf die Sache mit "$updateServerStatus = $wsus.GetUpdateStatus($updateScope, $True/$False)", die bringt keine Änderung in der Anzeige.

Die beiden Angaben sind für mich nicht so wichtig. Für mich ist die Gesamtanzahl und die Computer mit Fehler wichtig. Die sollen dann später einmal per Email verschickt werden.

Was ich auch noch suche ist ein Automatischer Export von Berichten. Hast du da noch einen Tip. Danke.

Gruß SOJ Smiley
  
Zum Seitenanfang
 
MartinG
WSUS Junior Member
*
Offline



Beiträge: 41
Mitglied seit: 11.09.09
Geschlecht: männlich
Re: WSUS-Statistiken über die PowerShell abrufen
Antwort #14 - 08.04.10 um 09:19:20
Beitrag drucken  
soj schrieb on 07.04.10 um 15:52:17:
Hallo MartinG,

erst einmal einen riesen Dank. Ich habe erst mal einen Schnelltest durchgeführt. Die Ergänzung gehen super. Bis auf die Sache mit "$updateServerStatus = $wsus.GetUpdateStatus($updateScope, $True/$False)", die bringt keine Änderung in der Anzeige.

Moin SOJ,

super, freut mich dass der erste Teil schonmal funktioniert.

Warum die Änderung an "Updates that need to be approved" nicht funktioniert, verstehe ich nicht. Laut (Du musst Dich Einloggen oder Registrieren um Multimediadateien oder Links zu sehen). müsste die Änderung auf "$True" die gewünschten Informationen liefern:
Quote:
If true, include computers that synchronize from downstream servers when determining the [...] UpdatesNeededByComputersCount.


Fragst du denn den Haupt-WSUS-Server ab, also denjenigen, an den die Replika-Server angebunden sind? Und gibt es bei dir überhaupt auf den Replika-Servern Updates, die nicht freigegeben sind, aber von deren Clients benötigt werden?



soj schrieb on 07.04.10 um 15:52:17:
Was ich auch noch suche ist ein Automatischer Export von Berichten. Hast du da noch einen Tip.

Keine fertige Lösung, aber dafür dürfte es verschiedenste Möglichkeiten geben.

Selbstgemacht könntest du in das Powershell-Skript noch Routinen zum Versenden einer E-Mail einbauen, so dass die Ausgaben direkt verschickt werden. Das Skript könntest du dann über den Windows Taskplaner automatisch regelmäßig starten lassen.

Oder du schreibst eine Batch-Datei, die vom Taskplaner aufgerufen wird. Diese wiederum ruft das Powershell-Skript auf und schreibt die Ausgabe in eine Text-Datei. Diese verschickst du dann mit einem Tool wie BLAT (such mal danach im Internet).

Oder du schreibst ein komplettes Reporting-Programm, sei es als Powershell-Skript oder vielleicht in einer anderen Hochsprache wie C#.

Du kannst es dir beliebig kompliziert machen, je nachdem, was du an Funktionen benötigst, wie deine (Programmier-)Kenntnisse aussehen und wieviel Zeit du investieren möchtest. Smiley


Bestimmt gibt es auch fertige Lösungen, die regelmässig ein Programm starten und dessen Ausgabe per Mail verschicken können. Ein solches kenne ich aber nicht aus dem Kopf, müsstest du ebenfalls mal nach suchen.
  
Zum Seitenanfang
 
Seitenindex umschalten Seiten: [1] 2 
Thema versendenDrucken
Bookmarks: Facebook Google Google+ Linked in Twitter Yahoo
 



Nutzungsbedingungen | Datenschutz
Kontakt | RSS | Feedback | Impressum
Facebook | News einsenden