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