Points à retenir
- Contrôle automatisé : Le script automatise la gestion de la fonctionnalité « Actualités et centres d’intérêt » dans Windows 10 et des « Widgets » dans Windows 11.
- Gestion multi-utilisateurs : Il permet d’apporter des modifications à tous les profils d’utilisateurs d’un système, couvrant différents types de comptes.
- Privilèges administratifs requis : L’exécution du script nécessite des droits d’administrateur pour modifier les paramètres du système.
- Modifications de la clé de registre : L’élément central de la fonction du script est sa capacité à modifier des clés de registre spécifiques en fonction de la version du système d’exploitation.
- Option d’effet immédiat : Le script peut redémarrer l’explorateur Windows pour appliquer les modifications instantanément, sans qu’il soit nécessaire de redémarrer le système.
- Polyvalence d’utilisation : Idéal pour les environnements d’entreprise afin de garantir l’uniformité et de minimiser les distractions sur tous les ordinateurs de l’entreprise.
- Supérieure aux méthodes manuelles : Il s’agit d’une approche plus efficace que les modifications manuelles traditionnelles ou les ajustements de la politique de groupe.
- Réversibilité : Les modifications apportées par le script peuvent être annulées, ce qui permet une certaine souplesse dans la gestion des paramètres du système.
- Mesures de sécurité recommandées : Des précautions telles que des tests approfondis, des sauvegardes du registre et une documentation claire sont conseillées pour une utilisation sûre et efficace des scripts.
- Amélioration de la gestion informatique à l’aide d’outils : L’intégration de ce script dans des plateformes telles que NinjaOne permet d’optimiser davantage les tâches de gestion informatique.
Les scripts PowerShell sont devenus un outil essentiel dans l’arsenal des professionnels de l’informatique, offrant un moyen puissant d’automatiser et de gérer divers aspects des systèmes Windows. L’une de ces tâches est la configuration de la fonctionnalité « Actualités et centres d’intérêt » dans Windows 10 et de l’onglet « Widgets » dans Windows 11. Cette fonction, bien qu’utile pour certains, peut être une distraction ou un élément indésirable pour d’autres, en particulier dans un environnement professionnel. Comprendre comment gérer efficacement cette fonction est essentiel pour maintenir un espace de travail optimal et ciblé.
Contexte
Le script en question est conçu pour permettre aux administrateurs de contrôler l’affichage de l’onglet « Actualités et centres d’intérêt » (ou « Widgets » dans Windows 11) dans la barre des tâches. Ceci est particulièrement important pour les professionnels de l’informatique et les fournisseurs de services gérés (MSP) qui supervisent de multiples environnements d’utilisateurs. La possibilité d’activer, de désactiver ou d’empêcher les modifications de ces fonctions à distance et en masse garantit un environnement utilisateur uniforme, ce qui est crucial à la fois pour la sécurité et la facilité de gestion.
Le script :
#Requires -Version 5.1 <# .SYNOPSIS Hides or shows the 'News and Interests' tab in the taskbar. On Windows 11, it hides or shows the widgets tab. .DESCRIPTION Hides or shows the 'News and Interests' tab in the taskbar. On Windows 11, it hides or shows the widgets tab. .EXAMPLE (No Parameters) WARNING: Hiding News and Interests from the taskbar for all users! Registry::HKEY_USERS\S-1-12-1-2117605486-1182246982-3318994623-3070967164\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarDa changed from 1 to 0 Registry::HKEY_USERS\S-1-5-21-4122835015-3639794443-155648563-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarDa changed from 1 to 0 WARNING: This script will take effect the next time the user completes a full sign-in or restarts. PARAMETER: -Enable Reveals the 'News and Interests' tab in the taskbar. .EXAMPLE -Enable Revealing News and Interests for all users! Registry::HKEY_USERS\S-1-12-1-2117605486-1182246982-3318994623-3070967164\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarDa changed from 0 to 1 Registry::HKEY_USERS\S-1-5-21-4122835015-3639794443-155648563-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarDa changed from 0 to 1 WARNING: This script will take effect the next time the user completes a full sign-in or restarts. PARAMETER: -PreventChanges Should the end-user be able to modify this setting after it's been set with this script? .EXAMPLE -PreventChanges WARNING: Hiding News and Interests from the taskbar for all users! Set Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Dsh\AllowNewsAndInterests to 0 WARNING: This script will take effect the next time the user completes a full sign-in or restarts. PARAMETER: -RestartExplorer In order for this script to take immediate effect, explorer.exe will need to be restarted. .EXAMPLE -RestartExplorer WARNING: Hiding News and Interests from the taskbar for all users! Registry::HKEY_USERS\S-1-12-1-2117605486-1182246982-3318994623-3070967164\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarDa changed from 1 to 0 Registry::HKEY_USERS\S-1-5-21-4122835015-3639794443-155648563-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarDa changed from 1 to 0 WARNING: Restarting Explorer.exe .OUTPUTS None .NOTES Minimum Supported OS: 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/fr/conditions-dutilisation 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, [Parameter()] [Switch]$PreventChanges = [System.Convert]::ToBoolean($env:preventChanges), [Parameter()] [Switch]$RestartExplorer = [System.Convert]::ToBoolean($env:restartExplorer) ) begin { # Grabbing dynamic script variables if ($env:showOrHide -and $env:showOrHide -notlike "null") { if ($env:showOrHide -eq "Show") { $Enable = $True } } # Check if script is running with local admin privileges. 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 below error!" 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 below error!" Write-Error $_ exit 1 } Write-Host "Set $Path\$Name to $($(Get-ItemProperty -Path $Path -Name $Name -ErrorAction Ignore).$Name)" } } # Restarts explorer.exe function Reset-Explorer { Write-Warning "Restarting Explorer.exe" Start-Sleep -Seconds 1 Get-Process explorer | Stop-Process -Force Start-Sleep -Seconds 1 if (-not (Get-Process explorer)) { Start-Process explorer.exe } } # 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 { if (-not (Test-IsElevated)) { Write-Error -Message "Access Denied." -RecommendedAction "Please run with Administrator privileges." -Exception (New-Object -TypeName System.UnauthorizedAccessException) -Category PermissionDenied exit 1 } # The registry key is different depending on if its Windows 10 or Windows 11 if ($OSName -Like "*11*") { $AllUserPath = (Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Dsh" -ErrorAction Ignore).AllowNewsAndInterests } else { $AllUserPath = (Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds" -ErrorAction Ignore).EnableFeeds } # Issues a warning prior to removing the registry key that prevents changes from end-users if ($AllUserPath -ge 0) { $EnableOrDisable = switch ($AllUserPath) { 1 { "revealed" } default { "hidden" } } if (-not ($PreventChanges)) { Write-Warning "News and Interests is currently $EnableOrDisable for all users. Removing 'Prevent Changes' setting to replace it with individual user setting as requested." if ($OSName -Like "*11*") { Remove-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Dsh" -Name "AllowNewsAndInterests" } else { Remove-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds" -Name "EnableFeeds" } } } if ($OSName -Like "*11*") { $KeyPath = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Dsh" $KeyName = "AllowNewsAndInterests" $Value = if ($Enable) { 1 }else { 0 } } else { $KeyPath = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds" $KeyName = "EnableFeeds" $Value = if ($Enable) { 1 }else { 0 } } # Sets a per user registry key if the end-user lock isn't set if (-not ($PreventChanges)) { $UserProfiles = Get-UserHives -Type "All" $KeyPath = New-Object System.Collections.Generic.List[string] $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 } if ($OSName -Like "*11*") { $KeyPath.Add("Registry::HKEY_USERS\$($UserProfile.SID)\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced") } else { $KeyPath.Add("Registry::HKEY_USERS\$($UserProfile.SID)\Software\Microsoft\Windows\CurrentVersion\Feeds") } } if ($OSName -Like "*11*") { $KeyName = "TaskbarDa" $Value = if ($Enable) { 1 }else { 0 } } else { $KeyName = "ShellFeedsTaskbarViewMode" $Value = if ($Enable) { 0 }else { 2 } } } # Change the message depending on if we're hiding or showing the menu if ($Enable) { Write-Host "Revealing News and Interests for all users!" } else { Write-Warning "Hiding News and Interests from the taskbar for all users!" } # Setting the registry key $KeyPath | ForEach-Object { Set-RegKey -Path $_ -Name $KeyName -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 } # Restart explorer.exe if ($RestartExplorer) { Reset-Explorer } else { Write-Warning "This script will take effect the next time the user completes a full sign-in or restarts." } } end { }
Accédez à plus de 700 scripts dans le Dojo NinjaOne
Description détaillée
- Initialisation et paramétrage : Le script commence par définir les paramètres d’activation de la fonctionnalité, en empêchant les modifications par les utilisateurs finaux et en décidant s’il faut redémarrer l’explorateur Windows pour les modifications immédiates. Il s’ajuste également de manière dynamique en fonction des variables environnementales.
- Vérification des privilèges d’administrateur : La vérification des droits d’administrateur constitue une étape cruciale. Le script vérifie s’il est exécuté avec les autorisations nécessaires, afin de s’assurer qu’aucune modification non autorisée n’est effectuée.
- Traitement du profil des utilisateurs : Il identifie tous les profils d’utilisateurs sur le système, ce qui est essentiel pour appliquer des paramètres à plusieurs utilisateurs. Il s’agit notamment de gérer différents types de comptes tels que Azure AD, le domaine ou les comptes locaux.
- Modification des clés de registre : Le script accède ensuite au registre Windows et le modifie. C’est ici que se fait l’activation ou la désactivation de la fonction « Actualités et centres d’intérêt » ou « Widgets ». Selon la version du système d’exploitation (Windows 10 ou 11), il cible différentes clés de registre.
- Redémarrer le processus de l’explorateur : Optionnellement, le script peut redémarrer le processus de l’explorateur de fichiers afin d’appliquer les modifications immédiatement, sans qu’il soit nécessaire d’ouvrir une session utilisateur ou de redémarrer le système.
Cas d’utilisation potentiels
Imaginez l’environnement d’une entreprise où le département informatique doit garantir un espace de travail standardisé et sans distraction sur tous les ordinateurs de l’entreprise. Grâce à ce script, ils peuvent désactiver la fonction « Actualités et centres d’intérêt » sur toutes les machines de manière efficace, ce qui garantit une expérience utilisateur cohérente et minimise les distractions.
Comparaisons
Traditionnellement, ces changements nécessitaient des modifications manuelles du registre ou des ajustements de la stratégie de groupe. Ce script rationalise le processus, permettant d’effectuer des modifications rapidement et en masse, contrairement aux méthodes manuelles qui prennent plus de temps.
FAQ
Q1 : Ce script fonctionnera-t-il sur n’importe quelle version de Windows ?
A1 : Le script est conçu pour Windows 10 et les versions plus récentes.
Q2 : Les droits d’administrateur sont-ils obligatoires pour exécuter ce script ?
A2 : Oui, des privilèges d’administrateur sont nécessaires pour modifier le registre.
Q3 : Ce script peut-il inverser les changements si nécessaire ?
A3 : Oui, le script peut activer ou désactiver la fonction, ce qui permet la réversibilité.
Implications
Bien que ce script soit d’une grande utilité, il est important de prendre en compte ses implications. Une utilisation non autorisée peut conduire à des configurations indésirables du système, et des erreurs involontaires dans l’exécution des scripts peuvent entraîner une instabilité du système.
Recommandations
- Procéder à des tests approfondis : 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.
- Documentation claire : Conservez une documentation claire des modifications apportées à l’aide de ce script pour référence ultérieure.
Conclusion :
Dans le domaine de la gestion informatique, des outils comme NinjaOne jouent un rôle essentiel. Il offre une plateforme unifiée pour la surveillance et l’automatisation des tâches informatiques, y compris le déploiement de scripts. Ce script PowerShell, associé à un outil de gestion performant tel que NinjaOne, peut considérablement améliorer la capacité d’un professionnel de l’informatique à gérer et à maintenir son environnement numérique, ce qui se traduit par une efficacité et un contrôle accrus.