none
WSUS Statistiken für einzelen Devices auslesen - Powershell

    Frage

  • Hallo,

    ich bin gerade dabei für meine Organisation ein relativ einfaches Script zu schreiben, welches anliegende Updates vom WSUS automatisch auf Servern installieren soll (lokal ausgeführt).

    Vorhanden ist alles von Server 2008R2 bishin zu Server 2016. Ich muss aber im schlechtesten Falle von einer Powershell 2.0 ausgehen. Gut wäre es auch, wenn ich sämtliche Bedingungen dafür auch mit dem Script via GPO ausrollen kann.

    Nun bin ich am Suchen nach einem Weg, während der Scriptlaufzeit folgende Statistiken des ausführenden Computers vom WSUS abzufragen:
    - LastReportTimestamp
    - NeededCount

    Leider habe ich bisher keinen auch nur im Ansatz funktionierenden Codeschnipsel zusammengebracht, und hoffe das mir hier jemand mit seiner Erfahrung weiterhelfen kann.

    Liebe Grüße

    Freitag, 16. November 2018 13:19

Antworten

  • Wow, was für eine Zeitverschwendung.  ;-)  Welchen Mehrwert soll das bringen?

    Unabhängig davon, wird Powershell 2.0 meines Wissens nach nicht mehr von Microsoft unterstützt und sollte dringen aktualisiert werden.

    Wenn ich bei Google nach "Powershell WSUS" suche, erhalte ich als ersten Treffer: "WSUS mit PowerShell verwalten: Computer, Updates, Genehmigungen". Da sind bestimmt zwei / drei Sachen dabei, die Dich auf Kurs bringen.  ;-)


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Freitag, 16. November 2018 13:36
  • Moin,

    warum willst Du die Daten vom WSUS abfragen? Der Rechner wird ja nichts installieren, was er nicht meint, vom WSUS erhalten zu können, egal, was der WSUS dazu denkt.

    Das folgende Skript installiert alle anstehenden Updates und bootet, falls eines der Updates dies anfordert. Das ist noch nicht 100% ausgereift, läuft aber schon ganz ordentlich, auch unter PowerShell 2.0:

    $wu_session = New-Object -COM "Microsoft.Update.Session"
    $wu_searcher = $wu_session.CreateUpdateSearcher()
    $wures = $wu_searcher.Search("IsInstalled=0 and Type='Software'")
    if ($wures.Updates.Count -gt 0) {
        Write-Host "Updates to install: $($wures.Updates.Count)"
        $wu_dld = $wu_session.CreateUpdateDownloader()
        $wu_dld.Updates = $wures.Updates
        $wudldres = $wu_dld.Download()
        Write-Host "Updates downloaded"
        $wu_inst = $wu_session.CreateUpdateInstaller()
        $wu_inst.Updates = $wures.Updates
        $wuinstres = $wu_inst.Install()
        if ($wuinstres.RebootRequired) {
            Write-Host "Rebooting..."
            Restart-Computer -Force
        }
    }


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Freitag, 16. November 2018 15:55

Alle Antworten

  • Wow, was für eine Zeitverschwendung.  ;-)  Welchen Mehrwert soll das bringen?

    Unabhängig davon, wird Powershell 2.0 meines Wissens nach nicht mehr von Microsoft unterstützt und sollte dringen aktualisiert werden.

    Wenn ich bei Google nach "Powershell WSUS" suche, erhalte ich als ersten Treffer: "WSUS mit PowerShell verwalten: Computer, Updates, Genehmigungen". Da sind bestimmt zwei / drei Sachen dabei, die Dich auf Kurs bringen.  ;-)


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Freitag, 16. November 2018 13:36
  • Moin,

    warum willst Du die Daten vom WSUS abfragen? Der Rechner wird ja nichts installieren, was er nicht meint, vom WSUS erhalten zu können, egal, was der WSUS dazu denkt.

    Das folgende Skript installiert alle anstehenden Updates und bootet, falls eines der Updates dies anfordert. Das ist noch nicht 100% ausgereift, läuft aber schon ganz ordentlich, auch unter PowerShell 2.0:

    $wu_session = New-Object -COM "Microsoft.Update.Session"
    $wu_searcher = $wu_session.CreateUpdateSearcher()
    $wures = $wu_searcher.Search("IsInstalled=0 and Type='Software'")
    if ($wures.Updates.Count -gt 0) {
        Write-Host "Updates to install: $($wures.Updates.Count)"
        $wu_dld = $wu_session.CreateUpdateDownloader()
        $wu_dld.Updates = $wures.Updates
        $wudldres = $wu_dld.Download()
        Write-Host "Updates downloaded"
        $wu_inst = $wu_session.CreateUpdateInstaller()
        $wu_inst.Updates = $wures.Updates
        $wuinstres = $wu_inst.Install()
        if ($wuinstres.RebootRequired) {
            Write-Host "Rebooting..."
            Restart-Computer -Force
        }
    }


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Freitag, 16. November 2018 15:55