Aktivieren oder Deaktivieren der Windows 10-Datenerfassung (PowerShell-Skript)

Im digitalen Zeitalter sind Datenschutz und Sicherheit von größter Bedeutung. Mit der zunehmenden Beliebtheit von Windows 10 sind auch die Bedenken hinsichtlich der Datenerfassungsfunktionen gestiegen. Für IT-Fachleute und Managed Service Provider (MSPs) ist es entscheidend, diese Funktionen zu verstehen und zu kontrollieren. Dieser Artikel befasst sich mit einem PowerShell-Skript, mit dem die Datensammlungsfunktionen von Windows 10 aktiviert oder deaktiviert werden können.

Hintergrund

Windows 10 verfügt, wie viele moderne Betriebssysteme, über integrierte Telemetrie- und Datenerfassungsfunktionen. Diese sollen die Benutzerfreundlichkeit verbessern, indem sie Daten über Nutzungsmuster, Fehler und mehr sammeln. Aus verschiedenen Gründen, z. B. wegen des Datenschutzes und der Einhaltung von Vorschriften, müssen IT-Experten und MSPs diese Funktionen jedoch häufig kontrollieren. Das mitgelieferte Skript bietet eine optimierte Möglichkeit, diese Einstellungen zu verwalten.

Das Skript

#Requires -Version 5.1

<#
.SYNOPSIS
    Enables or Disabled Windows 10 Linguistic Data Collection, Advertising ID, and Telemetry
.DESCRIPTION
    Enables or Disabled Windows 10 Linguistic Data Collection, Advertising ID, and Telemetry
.EXAMPLE
    No Params needed to Disable Windows 10 Linguistic Data Collection, Advertising ID, and Telemetry
.EXAMPLE
     -Enable
    Enables Linguistic Data Collection, Advertising ID, and Telemetry
.EXAMPLE
    PS C:> Set-Windows10KeyLogger.ps1
    Disables Windows 10 Linguistic Data Collection, Advertising ID, and Telemetry
.EXAMPLE
    PS C:> Set-Windows10KeyLogger.ps1 -Enable
    Enables Windows 10 Linguistic Data Collection, Advertising ID, and Telemetry
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10
    Release Notes:
    Initial Release
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()]
param (
    [Parameter()]
    [Switch]
    $Enable
)

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
        }
    }
    $Type = "DWORD"
}
process {
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }

    $Value = if ($PSBoundParameters.ContainsKey("Enable") -and $Enable) { 1 }else { 0 }

    try {
        @(
            # Linguistic Data Collection
            [PSCustomObject]@{
                Path = "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesTextInput"
                Name = "AllowLinguisticDataCollection"
            }
            # Advertising ID
            [PSCustomObject]@{
                Path = "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionAdvertisingInfo"
                Name = "Enabled"
            }
            # Telemetry
            [PSCustomObject]@{
                Path = "HKLM:SOFTWAREPoliciesMicrosoftWindowsDataCollection"
                Name = "AllowTelemetry"
            }
        ) | ForEach-Object {
            Set-ItemProp -Path $_.Path -Name $_.Name -Value $Value -PropertyType $Type
            Write-Host "$($_.Path)$($_.Name) set to $(Get-ItemPropertyValue -Path $_.Path -Name $_.Name)"
        }

        if ($PSBoundParameters.ContainsKey("Enable") -and $Enable) {
            Write-Host "Enabling DiagTrack Services"
            Get-Service -Name DiagTrack | Set-Service -StartupType Automatic | Start-Service
        }
        else { 
            Write-Host "Disabling DiagTrack Services"
            Get-Service -Name DiagTrack | Set-Service -StartupType Disabled | Stop-Service
        }

        Write-Host "DiagTrack Service status: $(Get-Service -Name DiagTrack | Select-Object -Property Status -ExpandProperty Status)"
        Write-Host "DiagTrack Service is set to: $(Get-Service -Name dmwappushservice | Select-Object -Property StartType -ExpandProperty StartType)"

        if ($PSBoundParameters.ContainsKey("Enable") -and $Enable) {
            Get-Service -Name dmwappushservice | Set-Service -StartupType Manual
        }
        else { 
            Get-Service -Name dmwappushservice | Set-Service -StartupType Disabled | Stop-Service
        }

        Write-Host "dmwappushservice Service status: $(Get-Service -Name dmwappushservice | Select-Object -Property Status -ExpandProperty Status)"
        Write-Host "dmwappushservice Service is set to: $(Get-Service -Name dmwappushservice | Select-Object -Property StartType -ExpandProperty StartType)"

        $tasks = "SmartScreenSpecific", "ProgramDataUpdater", "Microsoft Compatibility Appraiser", "AitAgent", "Proxy", "Consolidator",
        "KernelCeipTask", "BthSQM", "CreateObjectTask", "WinSAT", #"Microsoft-Windows-DiskDiagnosticDataCollector", # This is disabled by default
        "GatherNetworkInfo", "FamilySafetyMonitor", "FamilySafetyRefresh", "SQM data sender", "OfficeTelemetryAgentFallBack",
        "OfficeTelemetryAgentLogOn"
        
        if ($PSBoundParameters.ContainsKey("Enable") -and $Enable) {
            Write-Host "Enabling telemetry scheduled tasks"
            $tasks | ForEach-Object {
                Write-Host "Enabling $_ Scheduled Task"
                # Note: ErrorAction set to SilentlyContinue so as to skip over any missing tasks. Enable-ScheduledTask will still error if it can't be enabled.
                Get-ScheduledTask -TaskName $_ -ErrorAction SilentlyContinue | Enable-ScheduledTask
                $State = Get-ScheduledTask -TaskName $_ -ErrorAction SilentlyContinue | Select-Object State -ExpandProperty State
                Write-Host "Scheduled Task: $_ is $State"
            }
        }
        else { 
            Write-Host "Disabling telemetry scheduled tasks"
            $tasks | ForEach-Object {
                Write-Host "Disabling $_ Scheduled Task"
                # Note: ErrorAction set to SilentlyContinue so as to skip over any missing tasks. Disable-ScheduledTask will still error if it can't be disabled.
                Get-ScheduledTask -TaskName $_ -ErrorAction SilentlyContinue | Disable-ScheduledTask
                $State = Get-ScheduledTask -TaskName $_ -ErrorAction SilentlyContinue | Select-Object State -ExpandProperty State
                Write-Host "Scheduled Task: $_ is $State"
            }
        }
    }
    catch {
        Write-Error $_
        exit 1
    }
    
    gpupdate.exe /force
    exit 0
}
end {}

 

Zugriff auf über 300 Skripte im NinjaOne Dojo

Zugang erhalten

Detailansicht

Das Skript ist ein PowerShell-Cmdlet, das die Sprachdatenerfassung, die Werbe-ID und die Telemetrie von Windows 10 umschaltet. Hier ist eine schrittweise Aufschlüsselung:

  1. Voraussetzungen: Das Skript erfordert PowerShell Version 5.1.
  2. Parameter: Das Skript akzeptiert einen optionalen Schalter -Enable. Falls angegeben, werden die Datenerfassungsfunktionen aktiviert, andernfalls werden sie deaktiviert.
  3. Funktionen:
    1. Test-IsElevated: Überprüft, ob das Skript mit Administratorrechten ausgeführt wird.
    2. Set-ItemProp: Setzt oder erstellt einen Registrierungsschlüsselwert.
  4. Process:
    1. Zunächst prüft das Skript, ob es über Administratorrechte verfügt. Ist dies nicht der Fall, wird der Vorgang abgebrochen.
    2. Anschließend wird anhand des Schalters -Enable bestimmt, ob die Funktionen aktiviert oder deaktiviert werden sollen.
    3. Das Skript ändert bestimmte Registrierungsschlüssel, die der Sprachdatenerfassung, der Werbe-ID und der Telemetrie entsprechen.
    4. Es verwaltet auch die Dienste DiagTrack und dmwappushservice, die mit der Telemetrie zusammenhängen.
    5. Schließlich schaltet es verschiedene geplante Aufgaben im Zusammenhang mit der Telemetrie um.
  5. Ausführung: Das Skript schließt mit dem Erzwingen einer Gruppenrichtlinienaktualisierungab.

Potenzielle Anwendungsfälle

Stellen Sie sich vor, ein MSP verwaltet die IT für einen Gesundheitsdienstleister. Aufgrund der HIPAA-Vorschriften muss er dafür sorgen, dass möglichst wenig Daten verloren gehen. Mit diesem Skript kann der MSP schnell alle Datenerfassungsfunktionen auf allen Windows 10-Rechnern im Netzwerk deaktivieren, um die Einhaltung von Vorschriften zu gewährleisten und den Schutz von Patientendaten zu verbessern.

Vergleiche

Es gibt zwar GUI-basierte Tools und manuelle Methoden zum Umschalten dieser Einstellungen, aber dieses Skript bietet eine effizientere, wiederholbare und skalierbare Lösung. Manuelle Methoden können zeitaufwändig und fehleranfällig sein, insbesondere bei mehreren Maschinen. GUI-Tools bieten möglicherweise nicht die Granularität oder die Automatisierungsfunktionen, die ein PowerShell-Skript bietet.

FAQs

  • Kann ich dieses Skript auf älteren Windows-Versionen ausführen?
    Nein, dieses Skript wurde speziell für Windows 10 entwickelt.
  • Benötige ich Administratorrechte, um das Skript auszuführen?
    Ja, das Skript erfordert Administratorrechte, um Registrierungsschlüssel zu ändern und Dienste zu verwalten.

Auswirkungen

Die Verwendung dieses Skripts kann den Datenschutz erheblich verbessern, insbesondere in Branchen mit strengen Vorschriften. Durch die Deaktivierung können jedoch bestimmte Funktionen oder Feedback-Mechanismen in Windows 10 eingeschränkt werden. IT-Fachleute sollten die Vorteile gegen mögliche Einschränkungen abwägen.

Empfehlungen

  • Sichern Sie immer die Registrierungseinstellungen, bevor Sie Änderungen vornehmen.
  • Testen Sie das Skript in einer kontrollierten Umgebung, bevor Sie es verbreitet einsetzen.
  • Überprüfen und aktualisieren Sie die Skripte regelmäßig, um alle Änderungen in zukünftigen Windows 10-Updates zu berücksichtigen.

Abschließende Überlegungen

Für IT-Experten und MSPs können Tools wie NinjaOne bei der Verwaltung und Überwachung von IT-Umgebungenvon unschätzbarem Wert sein. In Kombination mit Skripten wie dem hier vorgestellten können sie eine sichere, gesetzeskonforme und effiziente IT-Infrastruktur gewährleisten. Da sich die Datenerfassungsfunktionen von Windows 10 weiterentwickeln, sind ein robustes Toolset und Wissen für den Erfolg unerlässlich.

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).