Points à retenir
- Personnalisation homogène: Le script gère efficacement les suggestions de Windows Spotlight et du menu Démarrer pour plusieurs profils d’utilisateurs.
- Droits d’administrateur requis: L’exécution de ce script nécessite des droits d’administrateur en raison des modifications qu’il apporte au registre.
- Couvre différents profils d’utilisateurs: Il prend en compte Azure AD, le domaine et les comptes d’utilisateurs locaux, garantissant ainsi une application complète.
- Caractéristiques spécifiques au système d’exploitation: Il est adapté pour tenir compte des différences entre Windows 10 et Windows 11, en particulier dans les versions pour entreprise.
- Automatise les tâches fastidieuses: Il remplace les modifications manuelles du registre ou les configurations de la stratégie de groupe.
- Équilibre entre respect de la vie privée et expérience de l’utilisateur: Il permet de contrôler le contenu et les suggestions personnalisées, conformément aux normes de confidentialité et aux préférences de l’utilisateur.
- Indispensable pour les MSP et les professionnels de l’informatique: Un outil précieux pour les fournisseurs de services gérés (MSP) et les professionnels de l’informatique pour la gestion des environnements en réseau.
- Tests et sauvegardes recommandés: Il est conseillé de tester le script dans un environnement contrôlé et de sauvegarder les paramètres du registre avant son implémentation.
- Amélioré avec NinjaOne: Les capacités du script peuvent être augmentées lorsqu’il est utilisé en conjonction avec la plateforme de gestion informatique de NinjaOne.
Le système d’exploitation Windows offre une série de fonctions personnalisables pour améliorer l’expérience de l’utilisateur, dont les suggestions de Windows Spotlight et du menu Démarrer. Ce blog se penche sur un script PowerShell conçu pour configurer ces fonctionnalités, en soulignant son importance pour les professionnels de l’informatique et les fournisseurs de services gérés (MSP).
Contexte
Avec l’évolution de l’interface Windows, la gestion et la personnalisation de l’expérience utilisateur sont devenues plus pertinentes. Les suggestions Spotlight et du menu Démarrer sont des fonctionnalités clés de Windows 10 et 11, qui fournissent du contenu personnalisé et des recommandations d’applications. Cependant, pour diverses raisons, notamment la protection de la vie privée et les préférences des utilisateurs, les professionnels de l’informatique et les fournisseurs de services de gestion cherchent souvent à contrôler ces fonctions sur plusieurs profils d’utilisateurs. Ce script PowerShell offre une solution, en activant ou désactivant ces fonctionnalités de manière systématique.
Le script :
#Requires -Version 5.1 <# .SYNOPSIS Enable or Disable Spotlight and Suggestions in the Start Menu. .DESCRIPTION Enable or Disable Spotlight and Suggestions in the Start Menu. .EXAMPLE (No Parameters) On Windows 11, only recommendations for tips, shortcuts, and new apps are disabled/enabled from the Start Menu. Attempting to Disable Spotlight and Start Menu Suggestions Registry::HKEY_USERS\S-1-11-1-1111111111-1111111111-1111111111-1111111111\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\SubscribedContent-338389Enabled changed from 0 to 0 Registry::HKEY_USERS\S-1-11-1-1111111111-1111111111-1111111111-1111111111\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\SubscribedContent-338388Enabled changed from 0 to 0 Registry::HKEY_USERS\S-1-11-1-1111111111-1111111111-1111111111-1111111111\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\SystemPaneSuggestionsEnabled changed from 0 to 0 Registry::HKEY_USERS\S-1-11-1-1111111111-1111111111-1111111111-1111111111\SOFTWARE\Policies\Microsoft\Windows\CloudContent\DisableWindowsSpotlightFeatures changed from 1 to 1 Registry::HKEY_USERS\S-1-11-1-1111111111-1111111111-1111111111-1111111111\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_IrisRecommendations changed from 0 to 0 Registry::HKEY_USERS\S-1-11-1-1111111111-1111111111-1111111111-1111111111\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\SubscribedContent-338389Enabled changed from 0 to 0 Registry::HKEY_USERS\S-1-11-1-1111111111-1111111111-1111111111-1111111111\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\SubscribedContent-338388Enabled changed from 0 to 0 Registry::HKEY_USERS\S-1-11-1-1111111111-1111111111-1111111111-1111111111\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\SystemPaneSuggestionsEnabled changed from 0 to 0 Registry::HKEY_USERS\S-1-11-1-1111111111-1111111111-1111111111-1111111111\SOFTWARE\Policies\Microsoft\Windows\CloudContent\DisableWindowsSpotlightFeatures changed from 1 to 1 Registry::HKEY_USERS\S-1-11-1-1111111111-1111111111-1111111111-1111111111\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_IrisRecommendations changed from 0 to 0 PARAMETER: -Enable Enables Spotlight and Suggestions in the Start Menu. .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). #> [CmdletBinding()] param ( [Parameter()] [Switch]$Enable ) begin { # Retrieve Dynamic Script Form Values if ($env:enableOrDisable -and $env:enableOrDisable -notlike "null") { if ($env:enableOrDisable -eq "Enable") { $Enable = $True } } # Local Admin Privileges are required to set other users' registry keys function Test-IsElevated { $id = [System.Security.Principal.WindowsIdentity]::GetCurrent() $p = New-Object System.Security.Principal.WindowsPrincipal($id) $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator) } # Get a list of all the user profiles for when the script is run as System. function Get-UserHives { param ( [Parameter()] [ValidateSet('AzureAD', 'DomainAndLocal', 'All')] [String]$Type = "All", [Parameter()] [String[]]$ExcludedUsers, [Parameter()] [switch]$IncludeDefault ) # User account SID's follow a particular pattern depending on if they're Azure AD or a Domain account or a local "workgroup" account. $Patterns = switch ($Type) { "AzureAD" { "S-1-12-1-(\d+-?){4}$" } "DomainAndLocal" { "S-1-5-21-(\d+-?){4}$" } "All" { "S-1-12-1-(\d+-?){4}$" ; "S-1-5-21-(\d+-?){4}$" } } # We'll need the NTuser.dat file to load each user's registry hive. So we grab it if their account sid matches the above pattern. $UserProfiles = Foreach ($Pattern in $Patterns) { Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*" | Where-Object { $_.PSChildName -match $Pattern } | Select-Object @{Name = "SID"; Expression = { $_.PSChildName } }, @{Name = "UserName"; Expression = { "$($_.ProfileImagePath | Split-Path -Leaf)" } }, @{Name = "UserHive"; Expression = { "$($_.ProfileImagePath)\NTuser.dat" } }, @{Name = "Path"; Expression = { $_.ProfileImagePath } } } # There are some situations where grabbing the .Default user's info is needed. switch ($IncludeDefault) { $True { $DefaultProfile = "" | Select-Object UserName, SID, UserHive, Path $DefaultProfile.UserName = "Default" $DefaultProfile.SID = "DefaultProfile" $DefaultProfile.Userhive = "$env:SystemDrive\Users\Default\NTUSER.DAT" $DefaultProfile.Path = "C:\Users\Default" $DefaultProfile | Where-Object { $ExcludedUsers -notcontains $_.UserName } } } $UserProfiles | Where-Object { $ExcludedUsers -notcontains $_.UserName } } # Helper function for setting registry keys function Set-RegKey { param ( $Path, $Name, $Value, [ValidateSet("DWord", "QWord", "String", "ExpandedString", "Binary", "MultiString", "Unknown")] $PropertyType = "DWord" ) if (-not $(Test-Path -Path $Path)) { # Check if path does not exist and create the path New-Item -Path $Path -Force | Out-Null } if ((Get-ItemProperty -Path $Path -Name $Name -ErrorAction Ignore)) { # Update property and print out what it was changed from and changed to $CurrentValue = (Get-ItemProperty -Path $Path -Name $Name -ErrorAction Ignore).$Name try { Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false -ErrorAction Stop | Out-Null } catch { Write-Error "[Error] Unable to Set registry key for $Name please see the error below!" Write-Error $_ exit 1 } Write-Host "$Path\$Name changed from $CurrentValue to $($(Get-ItemProperty -Path $Path -Name $Name -ErrorAction Ignore).$Name)" } else { # Create property with value try { New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false -ErrorAction Stop | Out-Null } catch { Write-Error "[Error] Unable to Set registry key for $Name please see the error below!" Write-Error $_ exit 1 } Write-Host "Set $Path\$Name to $($(Get-ItemProperty -Path $Path -Name $Name -ErrorAction Ignore).$Name)" } } # Gets the OS Name, e.g., Windows 10 Enterprise or Windows 11 Enterprise function Get-OSName { systeminfo | findstr /B /C:"OS Name" } $OSName = Get-OSName } process { # Error out if the script doesn't have local administrator privileges if (-not (Test-IsElevated)) { Write-Error -Message "Access Denied. Please run with Administrator privileges." -Exception (New-Object -TypeName System.UnauthorizedAccessException) -Category PermissionDenied exit 1 } # Get the registry hive for all users $UserProfiles = Get-UserHives -Type "All" # Initialize generic list for the keys we're going to set $Keys = New-Object System.Collections.Generic.List[Object] $LoadedProfiles = New-Object System.Collections.Generic.List[Object] Foreach ($UserProfile in $UserProfiles) { # Load User ntuser.dat if it's not already loaded if ((Test-Path "Registry::HKEY_USERS\$($UserProfile.SID)" -ErrorAction Ignore) -eq $false) { $LoadedProfiles.Add($UserProfile) Start-Process -FilePath "cmd.exe" -ArgumentList "/C reg.exe LOAD HKU\$($UserProfile.SID) `"$($UserProfile.UserHive)`"" -Wait -WindowStyle Hidden } $Keys.Add( [PSCustomObject]@{ Path = "Registry::HKEY_USERS\$($UserProfile.SID)\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" Name = "SubscribedContent-338389Enabled" Value = if ($Enable) { 1 }Else { 0 } } ) $Keys.Add( [PSCustomObject]@{ Path = "Registry::HKEY_USERS\$($UserProfile.SID)\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" Name = "SubscribedContent-338388Enabled" Value = if ($Enable) { 1 }Else { 0 } } ) $Keys.Add( [PSCustomObject]@{ Path = "Registry::HKEY_USERS\$($UserProfile.SID)\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" Name = "SystemPaneSuggestionsEnabled" Value = if ($Enable) { 1 }Else { 0 } } ) # This key only works on Windows 10/11 Enterprise if ($OSName -Like "*Enterprise*") { $Keys.Add( [PSCustomObject]@{ Path = "Registry::HKEY_USERS\$($UserProfile.SID)\SOFTWARE\Policies\Microsoft\Windows\CloudContent" Name = "DisableWindowsSpotlightFeatures" Value = if ($Enable) { 0 }Else { 1 } } ) } else { Write-Warning "Disabling Spotlight is only possible on an Enterprise edition of Windows." } # The recommended section in Windows 11 is slightly helpful; this will simply remove the ads but keep the useful frequently used section. if ($OSName -Like "*11*") { $Keys.Add( [PSCustomObject]@{ Path = "Registry::HKEY_USERS\$($UserProfile.SID)\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" Name = "Start_IrisRecommendations" Value = if ($Enable) { 1 }Else { 0 } } ) } } if($OSName -Like "*11*"){ Write-Host "On Windows 11, only recommendations for tips, shortcuts, and new apps are disabled/enabled from the Start Menu." } if ($Enable) { Write-Host "Attempting to Enable Spotlight and Start Menu Suggestions" } else { Write-Host "Attempting to Disable Spotlight and Start Menu Suggestions" } # Set all the registry keys $Keys | ForEach-Object { Set-RegKey -Path $_.Path -Name $_.Name -Value $_.Value } # Unload any profiles we loaded up earlier (if any) Foreach ($LoadedProfile in $LoadedProfiles) { [gc]::Collect() Start-Sleep 1 Start-Process -FilePath "cmd.exe" -ArgumentList "/C reg.exe UNLOAD HKU\$($LoadedProfile.SID)" -Wait -WindowStyle Hidden | Out-Null } } end { }
Accédez à plus de 700 scripts dans le Dojo NinjaOne
Description détaillée
Le script commence par un résumé et une description, indiquant son objectif: modifier les suggestions de Windows Spotlight et du menu Démarrer. Il exploite les capacités de PowerShell pour modifier les paramètres du registre système pour les profils d’utilisateurs individuels, y compris les comptes Azure AD et les comptes de domaine.
- Initialisation : Le script commence par vérifier la variable d’environnement $env:enableOrDisable pour déterminer s’il doit activer ou désactiver les fonctionnalités.
- Contrôle administratif: Il comprend une fonction Test-IsElevated qui permet de vérifier si le script est exécuté avec des privilèges d’administrateur, ce qui est essentiel pour modifier les clés de registre.
- Gestion du profil de l’utilisateur: La fonctionGet-UserHives est utilisée pour récupérer les profils des utilisateurs. Il filtre les comptes Azure AD, les comptes de domaine et les comptes locaux, ce qui garantit que le script cible les profils d’utilisateur nécessaires.
- Modification du registre: Le script construit une liste de clés de registre à modifier. Ces touches contrôlent divers aspects de Spotlight et des suggestions du menu Démarrer. En fonction du commutateur $Enable, ces touches sont activées ou désactivées.
- Traitement spécifique au système d’exploitation: Le script comprend également des vérifications de la version du système d’exploitation, en tenant compte des spécificités de Windows 10 et Windows 11.
- Exécution et nettoyage: Enfin, le script applique les modifications à chaque profil d’utilisateur et décharge tous les répertoires de stockage chargés, ce qui garantit l’absence d’impact résiduel sur les performances du système.
Cas d’utilisation potentiels
Prenons l’exemple d’une entreprise MSP qui gère un réseau d’entreprise. Elle doit désactiver les suggestions du menu Démarrer pour tous les profils d’utilisateurs pour des raisons de confidentialité. Grâce à ce script, l’entreprise MSP peut systématiquement appliquer ces changements sans avoir à configurer manuellement chaque profil, ce qui permet de gagner du temps et de réduire le risque d’incohérences.
Comparaisons
Traditionnellement, de tels changements nécessitaient des modifications manuelles du registre ou des ajustements de la stratégie de groupe. Ce script simplifie le processus, offrant une méthode plus efficace et moins sujette aux erreurs. De plus, il couvre les profils d’utilisateurs qui peuvent ne pas être affectés par les stratégies de groupe, offrant ainsi une solution plus complète.
FAQ
- Q : Ce script peut-il être utilisé sur des versions de Windows qui ne sont pas des versions d’entreprise ?
- R : Oui, mais certaines fonctionnalités, comme la désactivation de Windows Spotlight, sont spécifiques aux éditions Enterprise.
- Q : L’exécution de ce script nécessite-t-elle des privilèges administratifs ?
- R : Oui, la modification des clés de registre nécessite des droits d’administrateur.
Implications
Bien que ce script offre une personnalisation puissante, il a également des implications pour l’expérience de l’utilisateur et la protection de la vie privée. La désactivation de Spotlight et des suggestions peut avoir un impact sur la manière dont les utilisateurs interagissent avec leur système d’exploitation et trouvent de nouvelles fonctionnalités ou applications. Les administrateurs informatiques doivent mettre en balance ces considérations avec les politiques de l’entreprise et les besoins des utilisateurs.
Recommandations
- Effectuer un test approfondi: Exécutez le script dans un environnement contrôlé avant le déploiement.
- Sauvegarde des registres: Sauvegardez toujours les paramètres du registre avant de les modifier.
- Informer les utilisateurs: En cas de déploiement dans un environnement d’entreprise, informez les utilisateurs des changements pour plus de transparence.
Conclusion :
Dans le contexte de ce script, NinjaOne fournit une plateforme qui peut simplifier et optimiser davantage ces tâches de gestion informatique. Sa capacité à déployer des scripts sur l’ensemble d’un réseau peut rendre l’implémentation de changements tels que ceux-ci plus facile à gérer et plus efficace, renforçant ainsi sa valeur en tant que solution complète de gestion informatique.