UW-Forum

Forum von UW-Operator.de
Aktuelle Zeit: Dienstag 23. Oktober 2018, 13:56

Alle Zeiten sind UTC+02:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
Ungelesener BeitragVerfasst: Mittwoch 29. März 2017, 11:28 
Offline
Benutzeravatar

Registriert: Samstag 10. Dezember 2011, 17:19
Beiträge: 253
Beruf: SysAdmin
PC-System: Board: Gigabyte X58A-UD7 rev. 2.0
CPU: Intel i7 930 bei 3,5GHz
Speicher: 12GB Corsair Dominator
Grafikkarte: MSI GTX 970 Gaming 4G
HDD: SSD 850 EVO 500GB Platte
Gehäuse: NZXT Guardian 921
Betriebssystem: Windows 10 Pro 64bit
Wohnort: Horgau
Um die Arbeit mit dem WSUS zu erleichtern wird oft und gern die Powershell verwendet...
In diesem Fall möchten wir eine Liste der Updates, die auf den einzelnen Computern verfügbar sind anzeigen, sowie welche Version derzeit auf den Systemen läuft um uns einen schnellen Überblick über die Updatelage zu verschaffen.

In diesem Skript gibt es noch die Besonderheit, dass ich gerne zu den leider wenig aussagekräftigen Rechnernamen die Benutzernamen anzeigen möchte.
Diese sind wiederum im AD bei den Computern im Feld Beschreibung hinterlegt.

Außerdem lassen wir uns anzeigen, wann die Rechner das letzte mal ihren Status übertragen haben und auf welchem Build und Revision sie derzeit laufen.
Code:
[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | Out-Null
$Global:WSUS = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer('WSUSServer',$false,'8530')
$WsusClients = $Members | %{$Global:Wsus.GetComputerTargets()}
    #Updatescope definieren (Welche Updates geprüft werden sollen pro Client)    
    $UpdateScope = New-Object Microsoft.UpdateServices.Administration.UpdateScope
    #Nicht freigegebene sowie bereits installierte oder unbekannte Updates werden ausgenommen. - Somit werden die zu installierenden Updates erfasst.
    $UpdateScope.ExcludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::Installed, [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::NotApplicable, [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::Unknown
    $Global:WsusInformationArr = New-Object system.Collections.ArrayList
    #Die Schleife prüft die verfügbaren Updates für jeden Client, diese werden Addiert und als Summe ausgegeben
    Foreach ($WsusClient in $WsusClients) {
        $WsusObj = New-Object PsObject
        $WsusObj | Add-Member -MemberType NoteProperty "Computer" -Value $WsusClient.FullDomainName.Substring(0,$WsusClient.FullDomainName.IndexOf("."))
        $WsusObj | Add-Member -MemberType NoteProperty "Beschreibung" -Value (Get-ADComputer $WsusClient.FullDomainName.Substring(0,$WsusClient.FullDomainName.IndexOf(".")) -Properties Description | select Description).Description
        $WsusObj | Add-Member -MemberType NoteProperty "System" -Value $WsusClient.OSDescription
        $WsusObj | Add-Member -MemberType NoteProperty "Build" -Value $WsusClient.ClientVersion.Build
        $WsusObj | Add-Member -MemberType NoteProperty "Revision" -Value $WsusClient.ClientVersion.Revision
        $WsusObj | Add-Member -MemberType NoteProperty "Status vom" -Value $WsusClient.LastReportedStatusTime
        $WsusObj | Add-Member -MemberType NoteProperty "Updates" -Value ($WsusClient.GetUpdateInstallationInfoPerUpdate($UpdateScope) | ? {$_.UpdateApprovalAction -ne "NotApproved"}).count
        If($WsusObj.Updates -eq $null){$WsusObj.Updates = "0"}
        $Global:WsusInformationArr.add($WsusObj) | out-null
    }
$Global:WsusInformationArr | ogv # <- Ausgabe im Grid
#$Global:WsusInformationArr | Format-Table | Out-Printer # <- Ausgabe auf Standarddrucker
#$Global:WsusInformationArr | Export-Csv WsusUpdateliste.csv # <- Ausgabe als CSV-Datei - Kann mit Excel geöffnet und bearbeitet werden
Erklärung:
Zunächst greifen wir auf unseren WSUSServer per Standardport 8530 zu (Name muss entsprechend an Eure Umgebung angepasst werden).
Dann erstellen wir uns eine Liste der Rechner die uns interessieren (im Beispiel alle Verfügbaren mit "GetComputerTargets()").
Nun erzeugen wir ein Scope mit allen für uns interessanten Updates (im Beispiel die noch nicht installierten aber schon freigegebenen Updates).

In der Schleife sammeln wir nun die Informationen, die wir anschließend aus dem Array in welches sie geschrieben werden, auswerten möchten.
Im Beispiel ist das der Computername, der Username (der wie oben erklärt in der Computerbeschreibung des AD zu finden ist), das System sowie die Build und Revisionsnummer (in eigenen Feldern, damit im Datagrid sortiert werden kann), der Zeit-Stempel des letzten Reports und die Anzahl der verfügbaren Updates.

Am Ende noch die Möglichkeit die Anzeige auf dem Monitor (im Zum Wörterbuch hinzufügen), auf dem Drucker oder als CSV-Datei zu realisieren. Einfach die nicht gewünschten Optionen aus-kommentieren.

_________________
In diesem Sinne...

Ulrich Wiedholz
UW-Operator.de


Diesen Beitrag melden
Nach oben
Ungelesener BeitragVerfasst: Samstag 11. November 2017, 11:10 
Offline

Registriert: Samstag 11. November 2017, 02:33
Beiträge: 9
Beruf: Cutter
Wohnort: United States
Wow, great forum topic.Really looking forward to read more. Inestroza

_________________
Sero


Diesen Beitrag melden
Nach oben
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC+02:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen neue Themen in diesem Forum erstellen.
Sie dürfen Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  

Datenschutz UW-Operator.de

Zusätzlich für das Forum:
Nutzungsbedingungen | Datenschutzrichtlinie

Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de