Zum Inhalt springen

PowerShell: Windows Defender auf Servern aktualisieren

Symbolbild Verteidigung

Dieses PowerShell-Script aktualisiert auf allen im Netzwerk erreichbaren Windows Servern den Windows Defender und erstellt optional ein Logfile dazu.

Warum per PowerShell aktualisieren?

Windows Defender wird im Normalfall über Windows Update bzw. Windows Server Update Service (WSUS) mit aktuellen Definitionsupdates versorgt. Allerdings stellt Microsoft oft innerhalb weniger Stunden mehrere neue Definitionsupdates zur Verfügung. Wenn Windows Update auf den Servern aber so konfiguriert ist, dass Updates nur nachts oder sogar nur an gewissen Wochentagen installiert werden, verschläft man viele Definitionsupdates und senkt die Chance auf eine Malware-Erkennung. Außerdem könnte ein evtl. vorhandener Windows Server Update Service (WSUS) den Verteilungsvorgang verzögern. Mit diesem PowerShell-Script werden vom Active Directory (AD) alle Windows Server 2016/2019 ermittelt und zum Download neuer Definitionsupdates bei Microsoft aufgefordert. Das Script kann zentral auf einem entsprechend berechtigten Windows Server (mit passenden PowerShell-AD-Cmdlets) stündlich über die Windows Aufgabenplanung ausgeführt werden.

PowerShell: Windows Defender auf Servern aktualisieren

Die Logfile-Einstellungen sollten den jeweiligen Bedürfnissen angepasst werden. Die Server werden aus dem Active Directory (AD) abgerufen.

# Logfile-Einstellungen
$logging = $true
$logFile = "C:\scripts\Windows-Defender-aktualisieren-Log.txt"

# Logfile über 10 MB löschen
if(($logging -eq $true) -and (Test-Path $logFile -IsValid) -and ((Get-Item $logFile).length/1MB) -gt 10){
    Remove-Item $logFile
}

# Windows Server 2016/2019 aus AD abfragen
$servers = Get-ADComputer -Filter {(OperatingSystem -like "*Server*" -and OperatingSystemVersion -like "10.*") -and (Enabled -eq $true)} -Properties Name | Sort-Object | select -ExpandProperty Name
foreach($server in $servers){

    # Server-Verfügbarkeit prüfen
    if(Test-Connection $server -Count 2 -Quiet){

        # Zeitpunkt des letzten Updates ermitteln
        $lastUpdated = $(Get-MpComputerStatus -CimSession $server | select -Property AntivirusSignatureLastUpdated).AntivirusSignatureLastUpdated

        # Windows Defender Update ausführen
        Update-MpSignature -CimSession $server -UpdateSource MicrosoftUpdateServer -Verbose

        # Erneut Zeitpunkt des letztes Updates ermitteln
        $nowLastUpdated = $(Get-MpComputerStatus -CimSession $server | select -Property AntivirusSignatureLastUpdated).AntivirusSignatureLastUpdated

        # Update-Zeitpunkte vorher/nachher vergleichen und Logfile-Eintrag erzeugen
        if($nowLastUpdated -gt $lastUpdated){
            $line = (Get-Date -Format "dd.MM.yyyy HH:mm") + "   INFO   " + $server + " updated (AvLastUpdated: " + $(Get-MpComputerStatus -CimSession $server | select -Property AntivirusSignatureLastUpdated).AntivirusSignatureLastUpdated + ")"
        } else {
            $line = (Get-Date -Format "dd.MM.yyyy HH:mm") + "   INFO   " + $server + " not updated (AvLastUpdated: " + $(Get-MpComputerStatus -CimSession $server | select -Property AntivirusSignatureLastUpdated).AntivirusSignatureLastUpdated + ")"
        }

    } else {
        # Server nicht erreichbar
        $line = (Get-Date -Format "dd.MM.yyyy HH:mm") +  "   WARN   " + $server + " offline"
    }

    # Logfile schreiben
    if($logging -eq $true){
        Add-Content -path $logFile -Value $line
    }
}Code-Sprache: PHP (php)

Mehr zu PowerShell Cmdlets für Windows Defender auf Microsoft.com.

Mehr Sicherheitstipps?

IT-Security-Basics für Unternehmen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

drei × 3 =