Gérer efficacement les suggestions de Windows Spotlight et du menu Démarrer avec PowerShell

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

Obtenir l’accès

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.

Pour aller plus loin

Créer une équipe informatique efficace et performante nécessite une solution centralisée qui soit l’outil principal pour fournir vos services. NinjaOne permet aux équipes informatiques de surveiller, gérer, sécuriser et prendre en charge tous les appareils, où qu’ils soient, sans avoir besoin d’une infrastructure complexe sur site.

Pour en savoir plus sur NinjaOne Endpoint Management, participez à une visite guidée ou commencez votre essai gratuit de la plateforme NinjaOne.

Catégories :

Vous pourriez aussi aimer

×

Voir NinjaOne en action !

En soumettant ce formulaire, j'accepte la politique de confidentialité de NinjaOne.

Termes et conditions NinjaOne

En cliquant sur le bouton « J’accepte » ci-dessous, vous indiquez que vous acceptez les termes juridiques suivants ainsi que nos conditions d’utilisation:

  • Droits de propriété: NinjaOne possède et continuera de posséder tous les droits, titres et intérêts relatifs au script (y compris les droits d’auteur). NinjaOne vous accorde une licence limitée pour l’utilisation du script conformément à ces conditions légales.
  • Limitation de l’utilisation: Les scripts ne peuvent être utilisés qu’à des fins personnelles ou professionnelles internes légitimes et ne peuvent être partagés avec d’autres entités.
  • Interdiction de publication: Vous n’êtes en aucun cas autorisé à publier le script dans une bibliothèque de scripts appartenant à, ou sous le contrôle d’un autre fournisseur de logiciels.
  • Clause de non-responsabilité: Le texte est fourni « tel quel » et « tel que disponible », sans garantie d’aucune sorte. NinjaOne ne promet ni ne garantit que le script sera exempt de défauts ou qu’il répondra à vos besoins ou attentes particulières.
  • Acceptation des risques: L’utilisation du script est sous votre propre responsabilité. Vous reconnaissez qu’il existe certains risques inhérents à l’utilisation du script, et vous comprenez et assumez chacun de ces risques.
  • Renonciation et exonération de responsabilité: Vous ne tiendrez pas NinjaOne pour responsable des conséquences négatives ou involontaires résultant de votre utilisation du script, et vous renoncez à tout droit ou recours légal ou équitable que vous pourriez avoir contre NinjaOne en rapport avec votre utilisation du script.
  • EULA: Si vous êtes un client de NinjaOne, votre utilisation du script est soumise au contrat de licence d’utilisateur final qui vous est applicable (End User License Agreement (EULA)).