So konfigurieren Sie Windows Defender SmartScreen mit PowerShell

Wichtigste Erkenntnisse

  • Das Skript konfiguriert die Windows Defender SmartScreen-Einstellungen über ein lokales GPO.
  • Entwickelt für die Verwendung auf Windows-Systemen ab Windows 8.1 und Windows Server 2012 aufwärts.
  • Bietet Optionen, um den SmartScreen ein- oder auszuschalten und seine Stufe auf “Warnen” oder “Sperren” einzustellen
  • Die PowerShell-Automatisierung rationalisiert und standardisiert SmartScreen-Konfigurationen über mehrere Systeme hinweg.
  • Die ordnungsgemäße Ausführung erfordert administrative Rechte, andernfalls wird ein Fehler zurückgegeben.
  • Erstellen Sie vor der Bereitstellung immer eine Sicherungskopie der Registrierungsdaten und testen Sie das Skript unter kontrollierten Bedingungen.
  • Mit NinjaOne können solche Konfigurationsaufgaben in Unternehmensumgebungen weiter vereinfacht und verbessert werden.

Im Bereich der Unternehmens-IT-Sicherheit ist die Konfiguration der Einstellungen und Präferenzen von Tools von zentraler Bedeutung für die Gewährleistung einer lückenlosen Sicherheit. Eines dieser Tools, das oft eine sorgfältige Konfiguration erfordert, ist der Windows Defender SmartScreen. In diesem Beitrag wird ein PowerShell-Skript vorgestellt, mit dem Windows Defender SmartScreen einfach über ein lokales GPO konfiguriert werden kann.

Hintergrund

Der Windows Defender SmartScreen ist ein wichtiges Element im Windows-Ökosystem, das Benutzer:innen vor potenziell schädlichen Websites, Dateien, Anwendungen und mehr warnt. Der Bedarf an einem PowerShell-Skript zum Anpassen der Einstellungen für alle Benutzer in einem Unternehmen entsteht, wenn IT-Experten und Managed Service Provider (MSPs ) versuchen, die Einstellungen zu standardisieren und potenzielle Sicherheitslücken zu vermeiden.

Das Skript

#Requires -Version 2.0

<#
.SYNOPSIS
    Changes the SmartScreen state for all users via local GPO.
.DESCRIPTION
    Changes the SmartScreen state for all users via local GPO.
    Effected registry entries that are set:
    HKLM:SoftwarePoliciesMicrosoftEdgeSmartScreenEnabled = 1
    HKLM:SoftwarePoliciesMicrosoftWindowsSystemEnableSmartScreen = 1
    HKLM:SoftwarePoliciesMicrosoftWindowsSystemShellSmartScreenLevel = Warn
    HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilterEnabledV9 = 1
    HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilterPreventOverride = 1
    HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilterPreventOverrideAppRepUnknown = 1
.EXAMPLE
     -Off
    Turn off SmartScreen
.EXAMPLE
     -On
    Turn on SmartScreen and Warn.
.EXAMPLE
     -On -Level Block
    Turn on SmartScreen and Block when it normally warns.
.EXAMPLE
    PS C:> Set-SmartScreen.ps1 -Off
    Turn off SmartScreen
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 8.1, Windows Server 2012
    Release Notes:
    Fixes bug where registry wasn't being set correctly.
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
.COMPONENT
    OSSecurity
#>

[CmdletBinding(DefaultParameterSetName = "On")]
param (
    [Parameter(Mandatory = $true, ParameterSetName = "On")]
    [Switch]
    $On,
    [Parameter(Mandatory = $true, ParameterSetName = "Off")]
    [Switch]
    $Off,
    [Parameter(Mandatory = $false, ParameterSetName = "On")]
    [ValidateSet("Block", "Warn")]
    [String]
    $Level = "Warn"
)

begin {
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        if ($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))
        { Write-Output $true }
        else
        { Write-Output $false }
    }
    function Set-ItemProp {
        param (
            $Path,
            $Name,
            $Value,
            [ValidateSet("DWord", "QWord", "String", "ExpandedString", "Binary", "MultiString", "Unknown")]
            $PropertyType = "DWord"
        )
        New-Item -Path $Path -Force | Out-Null
        if ((Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue)) {
            Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false | Out-Null
        }
        else {
            New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false | Out-Null
        }
    }
}
process {
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }
    # Set $State to 1 if -On was used or to 0 if -Off was used
    $State = if ($On) { 1 }
    elseif ($Off) { 0 }
    else {
        Write-Error ""
    }
    try {
        Set-ItemProp -Path "HKLM:SoftwarePoliciesMicrosoftWindowsSystem" -Name "EnableSmartScreen" -Value $State
        Set-ItemProp -Path "HKLM:SoftwarePoliciesMicrosoftWindowsSystem" -Name "ShellSmartScreenLevel" -Value $Level -PropertyType String
        Set-ItemProp -Path "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilter" -Name "EnabledV9" -Value $State
        Set-ItemProp -Path "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilter" -Name "PreventOverride" -Value $State
        Set-ItemProp -Path "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilter" -Name "PreventOverrideAppRepUnknown" -Value $State
        # Uses: https://admx.help/?Category=EdgeChromium&Policy=Microsoft.Policies.Edge::SmartScreenEnabled
        Set-ItemProp -Path "HKLM:SoftwarePoliciesMicrosoftEdge" -Name "SmartScreenEnabled" -Value $State
    }
    catch {
        Write-Error $_
        exit 1
    }
    Write-Host "Values change in Registry:"
    # Output Proof of Work
    @(
        [PSCustomObject]@{
            "Registry Entry" = "HKLM:SoftwarePoliciesMicrosoftEdgeSmartScreenEnabled"
            Value            = "$(Get-ItemPropertyValue -Path "HKLM:SoftwarePoliciesMicrosoftEdge" -Name "SmartScreenEnabled" -ErrorAction SilentlyContinue)"
        }
        [PSCustomObject]@{
            "Registry Entry" = "HKLM:SoftwarePoliciesMicrosoftWindowsSystemEnableSmartScreen"
            Value            = "$(Get-ItemPropertyValue -Path "HKLM:SoftwarePoliciesMicrosoftWindowsSystem" -Name "EnableSmartScreen" -ErrorAction SilentlyContinue)"
        }
        [PSCustomObject]@{
            "Registry Entry" = "HKLM:SoftwarePoliciesMicrosoftWindowsSystemShellSmartScreenLevel"
            Value            = "$(Get-ItemPropertyValue -Path "HKLM:SoftwarePoliciesMicrosoftWindowsSystem" -Name "ShellSmartScreenLevel" -ErrorAction SilentlyContinue)"
        }
        [PSCustomObject]@{
            "Registry Entry" = "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilterEnabledV9"
            Value            = "$(Get-ItemPropertyValue -Path "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilter" -Name "EnabledV9" -ErrorAction SilentlyContinue)"
        }
        [PSCustomObject]@{
            "Registry Entry" = "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilterPreventOverride"
            Value            = "$(Get-ItemPropertyValue -Path "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilter" -Name "PreventOverride" -ErrorAction SilentlyContinue)"
        }
        [PSCustomObject]@{
            "Registry Entry" = "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilterPreventOverrideAppRepUnknown"
            Value            = "$(Get-ItemPropertyValue -Path "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilter" -Name "PreventOverrideAppRepUnknown" -ErrorAction SilentlyContinue)"
        }
    )
    gpupdate.exe /force
    Write-Host "A reboot, or three, will be needed for this policy to take affect."
}
end {}

 

Zugriff auf über 300 Skripte im NinjaOne Dojo

Zugang erhalten

Detailansicht

Das bereitgestellte Skript zielt darauf ab, den SmartScreen-Status für alle Benutzer:innen zu ändern. Es funktioniert, indem es bestimmte Einträge in der Registrierung anpasst. Im Folgenden wird die Funktionsweise des Skripts Schritt für Schritt erläutert:

  • Ersteinrichtung: Das Skript beginnt mit der Angabe der gewünschten Version und gibt einen kurzen Überblick über ihre Funktionsweise.
  • Cmdlet-Bindung und Parameter: Der Benutzer kann das Skript entweder mit den Parametern -On oder -Off ausführen. Darüber hinaus können Benutzer:innen mit dem Parameter -Level zwischen dem Status “Warnen” oder “Sperren” für den SmartScreen entscheiden.
  • Unterstützende Funktionen:
  • Test-IsElevated prüft, ob das Skript mit administrativen Rechten ausgeführt wird.
  • Set-ItemProp erstellt oder ändert Einträge in der Registrierung.
  • Hauptprozess:
  • Das Skript prüft zunächst, ob es mit den erforderlichen Berechtigungen ausgeführt wird.
  • Je nach Benutzereingabe setzt das Skript dann den Status von SmartScreen und ändert die entsprechenden Registrierungseinträge.
  • Dem Benutzer wird eine Ausgabe mit den geänderten Registrierungswerten angezeigt.
  • Schließlich ruft das Skript gpupdate.exe auf, um eine Aktualisierung der Gruppenrichtlinien zu erzwingen, und erinnert die Benutzer:innen daran, dass möglicherweise ein Neustart erforderlich ist.

Potenzielle Anwendungsfälle

Stellen Sie sich ein Unternehmen vor, in dem eine neue Sicherheitsrichtlinie vorschreibt, dass auf allen Computern der Windows Defender SmartScreen aktiviert und auf “Blockieren” eingestellt sein muss. Anstatt jeden einzelnen Computer manuell zu konfigurieren, kann ein IT-Experte dieses Skript einsetzen, um die Einstellungen massenhaft anzupassen und so Einheitlichkeit und Konformität auf allen Geräten zu gewährleisten.

Vergleiche

Obwohl Gruppenrichtlinienobjekte (GPO) von der Gruppenrichtlinien-Verwaltungskonsole (GPMC ) auch SmartScreen-Einstellungen konfigurieren können, optimiert dieses PowerShell-Skript den Prozess. Anstatt durch mehrere Fenster und Einstellungen in GPMC zu navigieren, können IT-Experten ein einziges Skript ausführen, was Zeit spart und mögliche Fehler reduziert.

FAQs

  • Kann dieses Skript auf jedem Rechner ausgeführt werden?
    Das Skript ist für Windows-Systeme ab Windows 8.1 und Windows Server 2012 zugeschnitten.
  • Was passiert, wenn ich das Skript nicht als Administrator ausführe?
    Das Skript gibt eine Fehlermeldung “Zugriff verweigert” aus und fordert den Benutzer auf, das Skript mit den richtigen Berechtigungen auszuführen.

Auswirkungen

Die erfolgreiche Konfiguration des SmartScreen-Status im gesamten Unternehmen erhöht die IT-Sicherheit und verringert die Risiken im Zusammenhang mit schädlichen Downloads oder Websites. Eine falsche Konfiguration kann jedoch dazu führen, dass Systeme Bedrohungen ausgesetzt sind oder zu viele falsche Warnungen ausgegeben werden, was die Arbeit behindert.

Empfehlungen

  • Erstellen Sie immer eine Sicherungskopie Ihres aktuellen Registrierungsstatus, bevor Sie Änderungen vornehmen.
  • Testen Sie das Skript gründlich in einer kontrollierten Umgebung, bevor Sie es unternehmensweit einführen.
  • Überwachen Sie die Einstellungen kontinuierlich und passen Sie sie an die Bedürfnisse des Unternehmens an.

Abschließende Überlegungen

Für IT-Experten, die eine nahtlose Lösung für solche Konfigurationen suchen, können Tools wie NinjaOne erweiterte Funktionen bieten. Durch die Integration von Skripten wie dem hier beschriebenen kann NinjaOne bei der Automatisierung, Verwaltung und Überwachung von IT-Aufgaben im gesamten Unternehmen helfen und so einen optimierten und sicheren Betrieb gewährleisten.

Nächste Schritte

Der Aufbau eines effizienten und effektiven IT-Teams erfordert eine zentralisierte Lösung, die als einheitliches Tool zur Bereitstellung von IT-Dienstleistungen fungiert. NinjaOne ermöglicht es IT-Teams, alle Geräte zu überwachen, zu verwalten, zu sichern und zu unterstützen, unabhängig vom Standort, ohne dass eine komplexe Infrastruktur vor Ort erforderlich ist.

Erfahren Sie mehr über NinjaOne Remote Script Deployment, sehen Sie sich eine Live-Tour an oder starten Sie Ihre kostenlose Testversion unserer NinjaOne Plattform.

Kategorien:

Das könnte Sie auch interessieren

×

Sehen Sie NinjaOne in Aktion!

Mit dem Absenden dieses Formulars akzeptiere ich die Datenschutzerklärung von NinjaOne.

NinjaOne Allgemeine Geschäftsbedingungen für Skripte

Indem Sie unten auf die Schaltfläche “Ich akzeptiere” klicken, erklären Sie Ihr Einverständnis mit den folgenden rechtlichen Bedingungen sowie mit unseren Nutzungsbedingungen:

  • Eigentumsrechte: NinjaOne besitzt und wird weiterhin alle Rechte, Titel und Interessen an dem Skript (einschließlich des Urheberrechts) behalten. NinjaOne gewährt Ihnen eine eingeschränkte Lizenz zur Nutzung des Skripts in Übereinstimmung mit diesen rechtlichen Bedingungen.
  • Einschränkung der Nutzung: Sie dürfen das Skript nur für Ihre legitimen persönlichen oder internen Geschäftszwecke verwenden und es nicht an Dritte weitergeben.
  • Verbot der Wiederveröffentlichung: Sie sind unter keinen Umständen berechtigt, das Skript in einer Skriptbibliothek, die einem anderen Softwareanbieter gehört oder von diesem kontrolliert wird, erneut zu veröffentlichen.
  • Gewährleistungsausschluss: Das Skript wird “wie gesehen” und “wie verfügbar” bereitgestellt, ohne jegliche Garantie. NinjaOne gibt keine Versprechen oder Garantien, dass das Skript frei von Fehlern ist oder dass es Ihre speziellen Bedürfnisse oder Erwartungen erfüllt.
  • Risikoübernahme: Die Verwendung des Skripts erfolgt auf eigene Gefahr. Sie erkennen an, dass die Nutzung des Skripts mit bestimmten Risiken verbunden ist, und Sie verstehen und übernehmen jedes dieser Risiken.
  • Verzicht und Freigabe: Sie machen NinjaOne nicht für nachteilige oder unbeabsichtigte Folgen verantwortlich, die sich aus Ihrer Nutzung des Skripts ergeben, und Sie verzichten auf alle gesetzlichen oder billigkeitsrechtlichen Rechte oder Rechtsmittel, die Sie gegen NinjaOne im Zusammenhang mit Ihrer Nutzung des Skripts haben könnten.
  • EULA: Wenn Sie ein NinjaOne-Kunde sind, unterliegt Ihre Nutzung des Skripts dem für Sie geltenden Endbenutzer-Lizenzvertrag (EULA).