{"id":353619,"date":"2024-09-26T14:15:15","date_gmt":"2024-09-26T14:15:15","guid":{"rendered":"https:\/\/www.ninjaone.com\/script-hub\/microsoft-safety-scanner-automatisieren\/"},"modified":"2024-10-13T19:04:10","modified_gmt":"2024-10-13T19:04:10","slug":"microsoft-safety-scanner-automatisieren","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/de\/script-hub\/microsoft-safety-scanner-automatisieren\/","title":{"rendered":"So automatisieren Sie den Microsoft Safety Scanner mit einem PowerShell-Skript"},"content":{"rendered":"<p>In der heutigen sicherheitsbewussten IT-Welt ist die Gew\u00e4hrleistung, dass Systeme frei von Malware und anderen Bedrohungen bleiben, eine der obersten Priorit\u00e4ten f\u00fcr IT-Experten und <a href=\"https:\/\/www.ninjaone.com\/de\/was-ist-ein-msp\" target=\"_blank\" rel=\"noopener\">Managed Service Provider (MSPs)<\/a>. Es gibt zwar verschiedene Tools, die dies erm\u00f6glichen, aber die Automatisierung der Erkennung von und Reaktion auf Bedrohungen kann den Zeit- und Arbeitsaufwand f\u00fcr die Aufrechterhaltung einer sicheren Umgebung erheblich reduzieren.<\/p>\n<p>Ein solches Tool, das in einen automatisierten Arbeitsablauf integriert werden kann, ist der <a href=\"https:\/\/learn.microsoft.com\/en-us\/defender-endpoint\/safety-scanner-download\" target=\"_blank\" rel=\"noopener\">Microsoft Safety Scanner (MSERT)<\/a>. In diesem Beitrag wird ein PowerShell-Skript vorgestellt, das\u00a0<strong>das Herunterladen, Ausf\u00fchren und Melden von MSERT automatisiert<\/strong> und es IT-Experten erleichtert, ihre Systeme sicher zu halten.<\/p>\n<h2>Kontext<\/h2>\n<p>Microsoft Safety Scanner ist ein kostenloses On-Demand-Scanner-Tool zum Aufsp\u00fcren und <a href=\"https:\/\/www.ninjaone.com\/de\/blog\/5-schritte-zur-entfernung-von-malware-von-ihrem-computer\/\" target=\"_blank\" rel=\"noopener\">Entfernen von Malware<\/a> auf Windows-Systemen. Sie wird h\u00e4ufig aktualisiert und ist f\u00fcr Umgebungen gedacht, in denen die neuesten Sicherheitsdefinitionen erforderlich sind, aber eine st\u00e4ndig aktive L\u00f6sung nicht m\u00f6glich ist.<\/p>\n<p>Das Skript, das wir in diesem Beitrag besprechen, optimiert den Prozess der Verwendung von MSERT, indem es das Herunterladen, die Ausf\u00fchrung und die Behandlung der Ergebnisse automatisiert. Dies ist besonders n\u00fctzlich in Umgebungen, in denen regelm\u00e4\u00dfige Scans erforderlich sind, ein manuelles Eingreifen jedoch unpraktisch ist.<\/p>\n<p>F\u00fcr IT-Experten und MSPs verringert die M\u00f6glichkeit, diesen Prozess zu automatisieren, das Risiko menschlicher Fehler, gew\u00e4hrleistet die Konsistenz bei der Durchf\u00fchrung von Scans und setzt wertvolle Zeit f\u00fcr andere Aufgaben frei. Dieses Skript ist ein leistungsf\u00e4higes Tool zur <a href=\"https:\/\/www.ninjaone.com\/de\/it-management-fuer-unternehmen\/sicherheit\" target=\"_blank\" rel=\"noopener\">Aufrechterhaltung einer sicheren IT-Umgebung<\/a> mit minimalem Aufwand.<\/p>\n<h2>Das Skript:<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"powershell\">#Requires -Version 5.1\r\n\r\n&lt;#\r\n.SYNOPSIS\r\n    Run the Microsoft Safety Scanner, collect the results, and optionally save the results to a multiline custom field.\r\n.DESCRIPTION\r\n    Run the Microsoft Safety Scanner, collect the results, and optionally save the results to a multiline custom field.\r\n.EXAMPLE\r\n    (No Parameters)\r\n    \r\n    Downloading MSERT from https:\/\/go.microsoft.com\/fwlink\/?LinkId=212732\r\n    Waiting for 3 seconds.\r\n    Download Attempt 1\r\n    Download Successful!\r\n    Initiating Scan\r\n    Exit Code: 7\r\n    [Critical] Infections found!\r\n\r\n    ---------------------------------------------------------------------------------------\r\n    Microsoft Safety Scanner v1.405, (build 1.405.445.0)\r\n    Started On Thu Feb 22 13:33:34 2024\r\n\r\n    Engine: 1.1.24010.10\r\n    Signatures: 1.405.445.0\r\n    MpGear: 1.1.16330.1\r\n    Run Mode: Scan Run in Quiet Mode\r\n\r\n    Quick Scan Results:\r\n    -------------------\r\n    Threat Detected: Virus:DOS\/EICAR_Test_File, not removed.\r\n        Action: NoAction, Result: 0x00000000\r\n            file:\/\/C:\\Windows\\system32\\eicarcom2.zip-&gt;eicar_com.zip-&gt;eicar.com\r\n                SigSeq: 0x00000555DC2DDDB0\r\n            file:\/\/C:\\Windows\\system32\\eicar.com\r\n                SigSeq: 0x00000555DC2DDDB0\r\n            file:\/\/C:\\Windows\\eicar.com\r\n                SigSeq: 0x00000555DC2DDDB0\r\n            containerfile:\/\/C:\\Windows\\system32\\eicarcom2.zip\r\n\r\n    Results Summary:\r\n    ----------------\r\n    Found Virus:DOS\/EICAR_Test_File, not removed.\r\n    Successfully Submitted MAPS Report\r\n    Successfully Submitted Heartbeat Report\r\n    Microsoft Safety Scanner Finished On Thu Feb 22 13:35:58 2024\r\n\r\n\r\n    Return code: 7 (0x7)\r\n\r\nPARAMETER: -ScanType \"Full\"\r\n    Specifies the type of scan to perform. \"Full\" for a complete disk scan, or \"Quick\" for a scan of common exploit locations.\r\n\r\nPARAMETER: -Timeout \"ReplaceMeWithANumber\"\r\n    Sets a time limit for the scan in minutes. If the scan exceeds this duration, it is canceled, and an error is output. Replace \"ReplaceMeWithANumber\" with the desired time limit in minutes.\r\n\r\nPARAMETER: -CustomField \"ReplaceWithNameOfCustomField\"\r\n    Specifies the name of the multiline custom field where scan results are optionally saved. Enter the field name to enable this feature.\r\n.OUTPUTS\r\n    None\r\n.NOTES\r\n    Minimum OS Architecture Supported: Windows 10, Server 2016\r\n    Release Notes: Initial Release\r\nBy 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.\r\n    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. \r\n    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. \r\n    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. \r\n    Warranty Disclaimer: The script is provided \u201cas is\u201d and \u201cas available\u201d, 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. \r\n    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. \r\n    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. \r\n    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).\r\n#&gt;\r\n\r\n[CmdletBinding()]\r\nparam (\r\n    [Parameter()]\r\n    [String]$ScanType = \"Quick\",\r\n    [Parameter()]\r\n    [Int]$Timeout = 30,\r\n    [Parameter()]\r\n    [String]$CustomField,\r\n    [Parameter()]\r\n    [String]$DownloadURL = \"https:\/\/go.microsoft.com\/fwlink\/?LinkId=212732\"\r\n)\r\n\r\nbegin {\r\n    # Set parameters using dynamic script variables.\r\n    if($env:scanType -and $env:scanType -notlike \"null\"){ $ScanType = $env:scanType }\r\n    if($env:scanTimeoutInMinutes -and $env:scanTimeoutInMinutes -notlike \"null\"){ $Timeout = $env:scanTimeoutInMinutes }\r\n    if($env:customFieldName -and $env:customFieldName -notlike \"null\"){ $CustomField = $env:customFieldName }\r\n\r\n    # If a timeout is specified, check that it's in the valid range.\r\n    if($Timeout -lt 1 -or $Timeout -ge 120){\r\n        Write-Host \"[Error] Timeout must be greater than or equal to 1 minute and less than 120 minutes.\"\r\n        exit 1\r\n    }\r\n\r\n    # If we're not given a scan type, error out.\r\n    if(-not $ScanType){\r\n        Write-Host \"[Error] Please select a scan type (Quick or Full).\"\r\n        exit 1\r\n    }\r\n\r\n    # Check that the scan type is valid.\r\n    switch($ScanType){\r\n        \"Quick\" { Write-Verbose \"Quick Scan Selected!\"}\r\n        \"Full\" { Write-Verbose \"Full Scan Selected!\" }\r\n        default { \r\n            Write-Host \"[Error] Invalid scan type selected!\"\r\n            exit 1\r\n        }\r\n    } \r\n\r\n    # Checks for local administrator rights.\r\n    function Test-IsElevated {\r\n        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()\r\n        $p = New-Object System.Security.Principal.WindowsPrincipal($id)\r\n        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)\r\n    }\r\n\r\n    # Utility function for downloading files.\r\n    function Invoke-Download {\r\n        param(\r\n            [Parameter()]\r\n            [String]$URL,\r\n            [Parameter()]\r\n            [String]$Path,\r\n            [Parameter()]\r\n            [int]$Attempts = 3,\r\n            [Parameter()]\r\n            [Switch]$SkipSleep\r\n        )\r\n\r\n        $SupportedTLSversions = [enum]::GetValues('Net.SecurityProtocolType')\r\n        if ( ($SupportedTLSversions -contains 'Tls13') -and ($SupportedTLSversions -contains 'Tls12') ) {\r\n            [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol::Tls13 -bor [System.Net.SecurityProtocolType]::Tls12\r\n        }\r\n        elseif ( $SupportedTLSversions -contains 'Tls12' ) {\r\n            [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12\r\n        }\r\n        else {\r\n            # Not everything requires TLS 1.2, but we'll try anyway.\r\n            Write-Warning \"TLS 1.2 and or TLS 1.3 are not supported on this system. This download may fail!\"\r\n            if ($PSVersionTable.PSVersion.Major -lt 3) {\r\n                Write-Warning \"PowerShell 2 \/ .NET 2.0 doesn't support TLS 1.2.\"\r\n            }\r\n        }\r\n\r\n        $i = 1\r\n        While ($i -le $Attempts) {\r\n            # Some cloud services have rate-limiting\r\n            if (-not ($SkipSleep)) {\r\n                $SleepTime = Get-Random -Minimum 3 -Maximum 15\r\n                Write-Host \"Waiting for $SleepTime seconds.\"\r\n                Start-Sleep -Seconds $SleepTime\r\n            }\r\n        \r\n            if ($i -ne 1) { Write-Host \"\" }\r\n            Write-Host \"Download Attempt $i\"\r\n\r\n            $PreviousProgressPreference = $ProgressPreference\r\n            $ProgressPreference = 'SilentlyContinue'\r\n            try {\r\n                # Invoke-WebRequest is preferred because it supports links that redirect, e.g., https:\/\/t.ly\r\n                if ($PSVersionTable.PSVersion.Major -lt 4) {\r\n                    # Downloads the file\r\n                    $WebClient = New-Object System.Net.WebClient\r\n                    $WebClient.DownloadFile($URL, $Path)\r\n                }\r\n                else {\r\n                    # Standard options\r\n                    $WebRequestArgs = @{\r\n                        Uri                = $URL\r\n                        OutFile            = $Path\r\n                        MaximumRedirection = 10\r\n                        UseBasicParsing    = $true\r\n                    }\r\n\r\n                    # Downloads the file\r\n                    Invoke-WebRequest @WebRequestArgs\r\n                }\r\n\r\n                $ProgressPreference = $PreviousProgressPreference\r\n                $File = Test-Path -Path $Path -ErrorAction SilentlyContinue\r\n            }\r\n            catch {\r\n                Write-Warning \"An error has occurred while downloading!\"\r\n                Write-Warning $_.Exception.Message\r\n\r\n                if (Test-Path -Path $Path -ErrorAction SilentlyContinue) {\r\n                    Remove-Item $Path -Force -Confirm:$false -ErrorAction SilentlyContinue\r\n                }\r\n\r\n                $File = $False\r\n            }\r\n\r\n            if ($File) {\r\n                $i = $Attempts\r\n            }\r\n            else {\r\n                Write-Warning \"File failed to download.\"\r\n                Write-Host \"\"\r\n            }\r\n\r\n            $i++\r\n        }\r\n\r\n        if (-not (Test-Path -Path $Path)) {\r\n            [PSCustomObject]@{\r\n                ExitCode = 1\r\n            }\r\n        }\r\n        else {\r\n            [PSCustomObject]@{\r\n                ExitCode = 0\r\n            }\r\n        }\r\n    }\r\n\r\n    # Utility function to help set custom fields\r\n    function Set-NinjaProperty {\r\n        [CmdletBinding()]\r\n        Param(\r\n            [Parameter(Mandatory = $True)]\r\n            [String]$Name,\r\n            [Parameter()]\r\n            [String]$Type,\r\n            [Parameter(Mandatory = $True, ValueFromPipeline = $True)]\r\n            $Value,\r\n            [Parameter()]\r\n            [String]$DocumentName\r\n        )\r\n    \r\n        $Characters = $Value | Measure-Object -Character | Select-Object -ExpandProperty Characters\r\n        if($Characters -ge 10000){\r\n            throw [System.ArgumentOutOfRangeException]::New(\"Character limit exceeded, value is greater than 10,000 characters.\")\r\n        }\r\n        \r\n        # If we're requested to set the field value for a Ninja document we'll specify it here.\r\n        $DocumentationParams = @{}\r\n        if ($DocumentName) { $DocumentationParams[\"DocumentName\"] = $DocumentName }\r\n        \r\n        # This is a list of valid fields that can be set. If no type is given, it will be assumed that the input doesn't need to be changed.\r\n        $ValidFields = \"Attachment\", \"Checkbox\", \"Date\", \"Date or Date Time\", \"Decimal\", \"Dropdown\", \"Email\", \"Integer\", \"IP Address\", \"MultiLine\", \"MultiSelect\", \"Phone\", \"Secure\", \"Text\", \"Time\", \"URL\", \"WYSIWYG\"\r\n        if ($Type -and $ValidFields -notcontains $Type) { Write-Warning \"$Type is an invalid type! Please check here for valid types. https:\/\/ninjarmm.zendesk.com\/hc\/en-us\/articles\/16973443979789-Command-Line-Interface-CLI-Supported-Fields-and-Functionality\" }\r\n        \r\n        # The field below requires additional information to be set\r\n        $NeedsOptions = \"Dropdown\"\r\n        if ($DocumentName) {\r\n            if ($NeedsOptions -contains $Type) {\r\n                # We'll redirect the error output to the success stream to make it easier to error out if nothing was found or something else went wrong.\r\n                $NinjaPropertyOptions = Ninja-Property-Docs-Options -AttributeName $Name @DocumentationParams 2&gt;&amp;1\r\n            }\r\n        }\r\n        else {\r\n            if ($NeedsOptions -contains $Type) {\r\n                $NinjaPropertyOptions = Ninja-Property-Options -Name $Name 2&gt;&amp;1\r\n            }\r\n        }\r\n        \r\n        # If an error is received it will have an exception property, the function will exit with that error information.\r\n        if ($NinjaPropertyOptions.Exception) { throw $NinjaPropertyOptions }\r\n        \r\n        # The below type's require values not typically given in order to be set. The below code will convert whatever we're given into a format ninjarmm-cli supports.\r\n        switch ($Type) {\r\n            \"Checkbox\" {\r\n                # While it's highly likely we were given a value like \"True\" or a boolean datatype it's better to be safe than sorry.\r\n                $NinjaValue = [System.Convert]::ToBoolean($Value)\r\n            }\r\n            \"Date or Date Time\" {\r\n                # Ninjarmm-cli expects the  Date-Time to be in Unix Epoch time so we'll convert it here.\r\n                $Date = (Get-Date $Value).ToUniversalTime()\r\n                $TimeSpan = New-TimeSpan (Get-Date \"1970-01-01 00:00:00\") $Date\r\n                $NinjaValue = $TimeSpan.TotalSeconds\r\n            }\r\n            \"Dropdown\" {\r\n                # Ninjarmm-cli is expecting the guid of the option we're trying to select. So we'll match up the value we were given with a guid.\r\n                $Options = $NinjaPropertyOptions -replace '=', ',' | ConvertFrom-Csv -Header \"GUID\", \"Name\"\r\n                $Selection = $Options | Where-Object { $_.Name -eq $Value } | Select-Object -ExpandProperty GUID\r\n        \r\n                if (-not $Selection) {\r\n                    throw [System.ArgumentOutOfRangeException]::New(\"Value is not present in dropdown\")\r\n                }\r\n        \r\n                $NinjaValue = $Selection\r\n            }\r\n            default {\r\n                # All the other types shouldn't require additional work on the input.\r\n                $NinjaValue = $Value\r\n            }\r\n        }\r\n        \r\n        # We'll need to set the field differently depending on if its a field in a Ninja Document or not.\r\n        if ($DocumentName) {\r\n            $CustomField = Ninja-Property-Docs-Set -AttributeName $Name -AttributeValue $NinjaValue @DocumentationParams 2&gt;&amp;1\r\n        }\r\n        else {\r\n            $CustomField = Ninja-Property-Set -Name $Name -Value $NinjaValue 2&gt;&amp;1\r\n        }\r\n        \r\n        if ($CustomField.Exception) {\r\n            throw $CustomField\r\n        }\r\n    }\r\n    \r\n    $ExitCode = 0\r\n\r\n    # If the log file already exists remove it.\r\n    if(Test-Path -Path \"$env:SYSTEMROOT\\debug\\msert.log\"){\r\n        Remove-Item -Path \"$env:SYSTEMROOT\\debug\\msert.log\" -Force -ErrorAction SilentlyContinue\r\n    }\r\n}\r\nprocess {\r\n    # Error out if we don't have local admin permissions.\r\n    if (-not (Test-IsElevated)) {\r\n        Write-Host \"[Error] Access Denied. Please run with Administrator privileges.\"\r\n        exit 1\r\n    }\r\n\r\n    # Download MSERT.\r\n    Write-Host \"Downloading MSERT from $DownloadURL\"\r\n    $MSERTPath = \"$env:TEMP\\MSERT.exe\"\r\n    $Download = Invoke-Download -Path $MSERTPath -URL $DownloadURL\r\n    if($Download.ExitCode -ne 0){\r\n        Write-Host \"[Error] Failed to download MSERT please check that $DownloadURL is reachable!\"\r\n        exit 1\r\n    }\r\n\r\n    Write-Host \"Download Successful!\"\r\n\r\n    # Start the MSERT Scan with the parameters given.\r\n    Write-Host \"Initiating Scan\"\r\n    $Arguments = New-Object System.Collections.Generic.List[string]\r\n    if($ScanType -eq \"Full\"){\r\n        $Arguments.Add(\"\/F\")\r\n    }\r\n    $Arguments.Add(\"\/Q\")\r\n    $Arguments.Add(\"\/N\")\r\n\r\n    try{\r\n        # Run it with our specified timeout.\r\n        $TimeoutInSeconds = $Timeout * 60\r\n        $MSERTProcess = Start-Process -FilePath $MSERTPath -ArgumentList $Arguments -NoNewWindow -PassThru\r\n        $MSERTProcess | Wait-Process -Timeout $TimeoutInSeconds -ErrorAction Stop\r\n    }catch{\r\n        Write-Host \"[Alert] The Microsoft Safety Scanner exceeded the specified timeout of $Timeout minutes, and the script is now terminating.\"\r\n        $MSERTProcess | Stop-Process -Force\r\n        $TimedOut = $True\r\n        $ExitCode = 1\r\n    }\r\n    Write-Host \"Exit Code: $($MSERTProcess.ExitCode)\"\r\n\r\n    # If the report is missing, something has clearly gone wrong.\r\n    if(-not (Test-Path -Path $env:SYSTEMROOT\\debug\\msert.log)){\r\n        Write-Host \"[Error] The report from MSERT.exe is missing?\"\r\n        exit 1\r\n    }\r\n\r\n    # Get the contents of the MSERT log and error out if it's blank.\r\n    $Report = Get-Content -Path \"$env:SYSTEMROOT\\debug\\msert.log\"\r\n    if(-not $Report){\r\n        Write-Host \"[Error] The report from MSERT.exe is empty?\"\r\n        exit 1\r\n    }\r\n\r\n    # If threats are detected, send out the alert.\r\n    $Report | ForEach-Object {\r\n        if($_ -match \"No infection found\"){\r\n            $NoInfectionFoundTextPresent = $True\r\n        }\r\n\r\n        if($_ -match \"Threat Detected\" ){\r\n            $ThreatDetectedTextPresent = $True\r\n        }\r\n    }\r\n\r\n    \r\n    if(($ThreatDetectedTextPresent -or -not $NoInfectionFoundTextPresent) -and -not $TimedOut){\r\n        Write-Host \"[Critical] Infections found!\"\r\n    }elseif($ExitCode -ne 1 -and -not $TimedOut){\r\n        Write-Host \"[Success] Scan has completed no infections detected.\"\r\n    }\r\n\r\n    # Save to a custom field upon request.\r\n    if($CustomField){\r\n        try {\r\n            Write-Host \"Attempting to set Custom Field '$CustomField'.\"\r\n            Set-NinjaProperty -Name $CustomField -Value ($Report | Out-String)\r\n            Write-Host \"Successfully set Custom Field '$CustomField'!\"\r\n        }\r\n        catch {\r\n            if($_.Exception.Message){\r\n                Write-Host \"[Error] $($_.Exception.Message)\"\r\n            }\r\n\r\n            if($_.Message){\r\n                Write-Host \"[Error] $($_.Message)\"\r\n            }\r\n\r\n            $ExitCode = 1\r\n        }\r\n    }\r\n\r\n    # Send out the report to the activity log.\r\n    $Report | Write-Host\r\n\r\n    # Remove the old log file.\r\n    if(Test-Path -Path \"$env:SYSTEMROOT\\debug\\msert.log\"){\r\n        Remove-Item -Path \"$env:SYSTEMROOT\\debug\\msert.log\" -Force -ErrorAction SilentlyContinue\r\n    }\r\n\r\n    # Exit.\r\n    exit $ExitCode\r\n}\r\nend {\r\n    \r\n    \r\n     \r\n}<\/pre>\n<p>&nbsp;<\/p>\n\n<div class=\"in-context-cta\"><\/div>\n<h2>Detailansicht<\/h2>\n<p>Das mitgelieferte PowerShell-Skript wurde entwickelt, um mehrere wichtige Aufgaben im Zusammenhang mit der Ausf\u00fchrung des Microsoft Safety Scanner zu automatisieren:<\/p>\n<ol>\n<li><strong>Behandlung der Parameter<\/strong>: Das Skript beginnt mit der Definition von Parametern f\u00fcr die Art des Scans (Quick oder Full), eine Timeout-Periode und ein optionales benutzerdefiniertes Feld, in dem die Ergebnisse gespeichert werden k\u00f6nnen. Diese Parameter sind mit Standardeinstellungen versehen, k\u00f6nnen aber auch durch Umgebungsvariablen \u00fcberschrieben werden, was eine flexible Verwendung in verschiedenen Szenarien erm\u00f6glicht.<\/li>\n<li><strong>Umgebung einrichten<\/strong>: Bevor das Skript fortf\u00e4hrt, pr\u00fcft es, ob die Benutzer:innen \u00fcber die erforderlichen Administratorrechte verf\u00fcgen. Andernfalls bricht das Skript ab und stellt sicher, dass nur autorisiertes Personal potenziell gef\u00e4hrliche Scans durchf\u00fchren kann.<\/li>\n<li><strong>Datei herunterladen<\/strong>: Eine der Hauptfunktionen des Skripts ist das Herunterladen der neuesten Version von MSERT von den Servern von Microsoft. Dies wird von der Funktion Invoke-Download erledigt, die TLS 1.2 und 1.3 f\u00fcr sichere Verbindungen unterst\u00fctzt. Die Funktion versucht, die Datei mehrmals herunterzuladen, um eventuelle Netzwerkprobleme oder Ratenbegrenzungen des Servers zu ber\u00fccksichtigen.<\/li>\n<li><strong>Ausf\u00fchren des Scans<\/strong>: Nach dem Download startet das Skript den Scan mit den angegebenen Parametern. Je nach Wahl der Benutzer:innen kann es einen Quick-Scan der \u00fcblichen Exploit-Speicherorte oder einen Full-Scan der gesamten Festplatte durchf\u00fchren. Der Scanvorgang wird im Hintergrund durchgef\u00fchrt, um Unterbrechungen zu minimieren.<\/li>\n<li><strong>Verarbeitung der Ergebnisse<\/strong>: Nach Abschluss des Scans verarbeitet das Skript die von MSERT erzeugte Protokolldatei. Es pr\u00fcft auf erkannte Bedrohungen und gibt die Ergebnisse auf der Konsole aus. Falls angegeben, werden die Ergebnisse auch in einem benutzerdefinierten Feld in NinjaOne gespeichert, das f\u00fcr weitere Analysen oder Berichte verwendet werden kann.<\/li>\n<li><strong>Bereinigung<\/strong>: Schlie\u00dflich entfernt das Skript die heruntergeladene MSERT-Datei und das Protokoll, um das System zu bereinigen und sicherzustellen, dass keine unn\u00f6tigen Dateien zur\u00fcckbleiben.<\/li>\n<\/ol>\n<h2>Potenzielle Anwendungsf\u00e4lle<\/h2>\n<p>Stellen Sie sich ein Szenario vor, in dem ein MSP f\u00fcr die Sicherheit von Hunderten von Endpunkten bei mehreren Kunden verantwortlich ist. Die manuelle Durchf\u00fchrung von Malware-Scans auf jedem Rechner w\u00e4re zeitaufw\u00e4ndig und ineffizient.<\/p>\n<p>Durch den Einsatz dieses Skripts auf allen Endpunkten kann der MSP sicherstellen, dass jedes System regelm\u00e4\u00dfig auf Bedrohungen gescannt wird, wobei die Ergebnisse automatisch an die Verwaltungskonsole zur\u00fcckgemeldet werden. Wenn eine Bedrohung entdeckt wird, kann der MSP schnell reagieren, den potenziellen Schaden minimieren und eine sichere Umgebung f\u00fcr seine Kunden aufrechterhalten.<\/p>\n<h2>Vergleiche<\/h2>\n<p>Der in diesem Skript verwendete Ansatz unterscheidet sich von den traditionellen, manuellen Methoden zur Ausf\u00fchrung des Microsoft Safety Scanner. Normalerweise m\u00fcsste ein IT-Experte MSERT herunterladen, es manuell ausf\u00fchren und dann die Ergebnisse \u00fcberpr\u00fcfen &#8211; Schritte, die anf\u00e4llig f\u00fcr Versehen und Inkonsistenz sind.<\/p>\n<p>Durch die Automatisierung des Prozesses mit PowerShell stellt das Skript sicher, dass die Scans einheitlich und regelm\u00e4\u00dfig durchgef\u00fchrt werden, wodurch <a href=\"https:\/\/www.ninjaone.com\/de\/blog\/wie-menschliches-versagen-mit-cybersecurity-risiken-zusammenhaengt\" target=\"_blank\" rel=\"noopener\">die Wahrscheinlichkeit menschlicher Fehler verringert<\/a> und die konsequente Einhaltung von Sicherheitsprotokollen gew\u00e4hrleistet wird.<\/p>\n<p>Im Vergleich zu anderen automatisierten L\u00f6sungen, wie z. B. vollwertiger Antivirussoftware mit Echtzeitschutz, bietet dieses Skript eine kompakte, bedarfsgesteuerte Alternative, die in umfassendere Sicherheitsverfahren integriert werden kann. Es ist besonders n\u00fctzlich in Umgebungen, in denen eine vollst\u00e4ndige Antivirus-Software auf jedem Rechner nicht m\u00f6glich oder notwendig ist.<\/p>\n<h2>FAQs<\/h2>\n<p>1.\u00a0<strong>Was passiert, wenn das Skript w\u00e4hrend eines Scans eine Zeit\u00fcberschreitung aufweist?<\/strong><br \/>\nWenn der Scan den angegebenen Zeit\u00fcberschreitungswert \u00fcberschreitet, bricht das Skript den Prozess ab und gibt eine Warnmeldung aus. Dadurch wird verhindert, dass der Scan unendlich lange l\u00e4uft und die Systemleistung beeintr\u00e4chtigt.<\/p>\n<p>2.<strong>\u00a0Kann das Skript auf \u00e4lteren Windows-Versionen verwendet werden?<\/strong><br \/>\nDas Skript erfordert mindestens Windows 10 oder Server 2016. \u00c4ltere Versionen von Windows unterst\u00fctzen m\u00f6glicherweise einige der im Skript verwendeten Funktionen nicht, z. B. TLS 1.2\/1.3 oder bestimmte PowerShell-cmdlets.<\/p>\n<p>3.\u00a0<strong>Wie geht das Skript mit Netzwerkproblemen w\u00e4hrend des Herunterladens um?<\/strong><br \/>\nDie Funktion Invoke-Download versucht mehrmals, die MSERT-Datei herunterzuladen. Wenn der Download nach mehreren Versuchen fehlschl\u00e4gt, gibt das Skript eine Fehlermeldung aus und bricht ab.<\/p>\n<p>4.<strong>\u00a0Ist es sicher, dieses Skript in einer Produktionsumgebung auszuf\u00fchren?<\/strong><br \/>\nJa, das Skript wurde mit Blick auf die Sicherheit entwickelt, einschlie\u00dflich der Checks auf administrative Rechte und der sorgf\u00e4ltigen Behandlung m\u00f6glicher Fehler. Es ist jedoch immer empfehlenswert, Skripte in einer kontrollierten Umgebung zu testen, bevor sie in gro\u00dfem Umfang eingesetzt werden.<\/p>\n<h2>Folgen<\/h2>\n<p>Die Ergebnisse dieses Skripts k\u00f6nnen erhebliche Auswirkungen auf die IT-Sicherheit haben. Durch die Automatisierung von <a href=\"https:\/\/www.ninjaone.com\/de\/blog\/beste-loesungen-zum-schutz-gegen-malware\" target=\"_blank\" rel=\"noopener\">Malware-Scans<\/a> k\u00f6nnen IT-Teams sicherstellen, dass die Systeme regelm\u00e4\u00dfig auf Bedrohungen \u00fcberpr\u00fcft werden, wodurch das Risiko unentdeckter Infektionen verringert wird. Dieses proaktive Sicherheitskonzept kann dazu beitragen, <a href=\"https:\/\/www.ninjaone.com\/it-hub\/endpoint-security\/what-is-a-data-breach\/\" target=\"_blank\" rel=\"noopener\">Datenschutzverletzungen<\/a> und andere Sicherheitsvorf\u00e4lle zu verhindern, die schwerwiegende Folgen f\u00fcr Unternehmen haben k\u00f6nnen, wie etwa finanzielle Verluste und Rufsch\u00e4digung.<\/p>\n<h2>Empfehlungen<\/h2>\n<p>Beachten Sie bei der Verwendung dieses Skripts die folgenden Best Practices:<\/p>\n<ul>\n<li><strong>Testen Sie das Skript in einer Laborumgebung<\/strong>, bevor Sie es auf allen Endpunkten einsetzen, um sicherzustellen, dass es wie erwartet funktioniert.<\/li>\n<li><strong>Planen Sie regelm\u00e4\u00dfige Scans<\/strong>\u00a0mit dem Windows Task Scheduler oder einem anderen Automatisierungstool, um sicher zu sein, dass die Systeme kontinuierlich \u00fcberwacht werden.<\/li>\n<li><strong>\u00dcberwachen Sie die Ergebnisse<\/strong>\u00a0genau und richten Sie Warnmeldungen ein, wenn Bedrohungen entdeckt werden, damit Sie schnell reagieren k\u00f6nnen.<\/li>\n<\/ul>\n<h2>Abschlie\u00dfende \u00dcberlegungen<\/h2>\n<p>Dieses PowerShell-Skript bietet eine leistungsstarke M\u00f6glichkeit, die Verwendung von Microsoft Safety Scanner zu automatisieren und IT-Experten und MSPs ein zuverl\u00e4ssiges Tool zur Aufrechterhaltung der Systemsicherheit an die Hand zu geben. Durch die Integration in umfassendere Sicherheitspraktiken k\u00f6nnen Benutzer:innen gew\u00e4hrleisten, dass ihre Umgebungen mit minimalen manuellen Eingriffen <a href=\"https:\/\/www.ninjaone.com\/de\/blog\/beste-loesungen-zum-schutz-gegen-malware\" target=\"_blank\" rel=\"noopener\">vor Malware-Bedrohungen gesch\u00fctzt<\/a> bleiben.<\/p>\n","protected":false},"author":35,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"","_lmt_disable":""},"operating_system":[4212],"use_cases":[4384],"class_list":["post-353619","script_hub","type-script_hub","status-publish","hentry","script_hub_category-windows","use_cases-netzwerksicherheit"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/script_hub\/353619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/comments?post=353619"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/media?parent=353619"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/operating_system?post=353619"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/use_cases?post=353619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}