Comment désactiver la mise à niveau Windows 11 [PowerShell Script]

Alors que les entreprises du monde entier se préparent à passer à la dernière version du système d’exploitation de Microsoft, de nombreux professionnels de l’informatique et fournisseurs de services gérés (MSP) cherchent des moyens de contrôler la transition. Si votre entreprise n’est pas tout à fait prête à faire le saut et que vous cherchez une méthode pour désactiver la mise à niveau automatique de Windows 11, vous avez atterri sur le bon blog. Nous allons ici disséquer un script PowerShell inestimable qui désactive efficacement les mises à niveau de Windows 11.

La nécessité d’un contrôle

Avant de plonger dans le script, il convient d’examiner les raisons pour lesquelles on peut vouloir désactiver la mise à niveau Windows 11. Windows 11 s’accompagne d’une multitude de nouvelles fonctionnalités et de mises à jour de sécurité, mais tous les professionnels de l’informatique savent que nouveau ne veut pas toujours dire meilleur, du moins pas tout de suite. Les nouvelles versions peuvent rompre la compatibilité avec les logiciels existants ou créer des problèmes imprévus qui ne peuvent être gérés qu’une fois connus. Par conséquent, le fait de pouvoir contrôler le moment de la mise à niveau peut vous éviter des problèmes inattendus.

Le script :

Ce script PowerShell sert de mécanisme de contrôle. Plus précisément, il désactive la mise à niveau Windows 11 en verrouillant la TargetReleaseVersion et la TargetReleaseVersionInfo sur la version actuellement installée de votre système d’exploitation Windows. Pour une équipe de professionnels de l’informatique ou d’une entreprise MSP, il s’agit d’une véritable mine d’or, qui permet de gérer des centaines ou des milliers de machines de manière optimale.

<#
.SYNOPSIS
    Disables Windows 11 upgrade.
.DESCRIPTION
    Disables Windows 11 upgrade by locking the TargetReleaseVersion and TargetReleaseVersionInfo to the currently installed version.
.EXAMPLE
    No parameters needed
    Disables Windows 11 upgrade.
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10
    Release Notes:
    Disallows the upgrade offer to Windows 11 to appear to users
    (c) 2023 NinjaOne
    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 ()

begin {
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
    }
    function Set-ItemProp {
        param (
            $Path,
            $Name,
            $Value,
            [ValidateSet("DWord", "QWord", "String", "ExpandedString", "Binary", "MultiString", "Unknown")]
            $PropertyType = "DWord"
        )
        # Do not output errors and continue
        $ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue
        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)) {
            # Update property and print out what it was changed from and changed to
            $CurrentValue = Get-ItemProperty -Path $Path -Name $Name
            try {
                Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false -ErrorAction Stop | Out-Null
            }
            catch {
                Write-Error $_
            }
            Write-Host "$Path$Name changed from $CurrentValue to $(Get-ItemProperty -Path $Path -Name $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 $_
            }
            Write-Host "Set $Path$Name to $(Get-ItemProperty -Path $Path -Name $Name)"
        }
        $ErrorActionPreference = [System.Management.Automation.ActionPreference]::Continue
    }
}
process {
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }

    # Get Current Version
    $release = (Get-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersion" -Name ReleaseId).ReleaseId
    $ver = (Get-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersion" -Name DisplayVersion).DisplayVersion
    $TargetReleaseVersion = if ($release -eq '2009') { $ver } Else { $release }

    # Block Windows 11 Upgrade by changing the target release version to the current version
    try {
        Set-ItemProp -Path "HKLM:SOFTWAREPoliciesMicrosoftWindowsWindowsUpdate" -Name "TargetReleaseVersion" -Value 1 -PropertyType DWord
        Set-ItemProp -Path "HKLM:SOFTWAREPoliciesMicrosoftWindowsWindowsUpdate" -Name "TargetReleaseVersionInfo" -Value "$TargetReleaseVersion" -PropertyType String
        Set-ItemProp -Path "HKLM:SOFTWAREMicrosoftWindowsUpdateUXSettings" -Name "SvOfferDeclined" -Value 1646085160366 -PropertyType QWord
    }
    catch {
        Write-Error $_
        Write-Host "Failed to block Windows 11 Upgrade."
        exit 1
    }
    exit 0
}
end {}

 

Accédez à plus de 700 scripts dans le Dojo NinjaOne

Obtenez l’accès

Points forts du script

  1. Droits d’administrateur: Le script comprend une fonction permettant de vérifier s’il est exécuté avec des privilèges d’administrateur, ce qui est essentiel pour modifier les paramètres du système.
  2. Modifications du registre: Le script modifie les paramètres clés du registre, garantissant que les machines adhèrent à la politique de maintien de la version actuelle.
  3. Évolutivité: Ce script peut être déployé sur plusieurs machines, ce qui en fait un outil précieux pour les MSP.
  4. Aucun paramètre n’est nécessaire: Simplifiant l’expérience de l’utilisateur, le script n’a besoin d’aucun paramètre pour s’exécuter.

Comment utiliser le script

  1. Sauvegarder le code: Enregistrez le script dans un fichier avec une extension .ps1, par exemple DisableWin11Upgrade.ps1.
  2. Exécuter en tant qu’administrateur: Ouvrez PowerShell en tant qu’administrateur et naviguez jusqu’à l’endroit où votre script est enregistré.
  3. Exécuter: Exécutez le fichier DisableWin11Upgrade.ps1.

Si le script s’exécute correctement, il modifiera les entrées de registre nécessaires pour désactiver la mise à niveau automatique Windows 11.

Intégration du script à NinjaOne

L’intégration entre ce script PowerShell pour désactiver la mise à niveau automatique Windows 11 et NinjaOne peut simplifier davantage votre processus de gestion des mises à niveau.

Les étapes de l’intégration :

  1. Télécharger le script: Utilisez le dépôt de scripts de NinjaOne pour télécharger le script PowerShell.
  2. Affectation des stratégies: Une fois téléchargé, le script peut être affecté à diverses stratégies qui contrôlent un groupe de systèmes ou des environnements clients spécifiques.
  3. Exécution du calendrier: Grâce à NinjaOne, vous pouvez configurer le script pour qu’il s’exécute à des intervalles spécifiques ou pendant les heures de maintenance.
  4. Surveillance et alertes: Configurez NinjaOne pour qu’il surveille spécifiquement les clés de registre modifiées par le script. Ainsi, vous serez immédiatement alerté en cas de changement.
  5. Rapport: Utilisez les outils de reporting de NinjaOne pour vérifier le succès du script sur l’ensemble des systèmes gérés.

En combinant ce script PowerShell avec les fonctionnalités performantes de NinjaOne, vous obtenez non seulement une méthode pour désactiver la mise à niveau  Windows 11, mais aussi un système pour gérer, surveiller et établir des rapports à grande échelle. Il ajoute une couche supplémentaire d’efficacité et de sécurité à votre environnement informatique.

Conclusions

Pour les professionnels de l’informatique et les MSP qui gèrent un grand nombre de systèmes, ce script PowerShell offre un moyen fiable et efficace de désactiver la mise à niveau Windows 11. Il ne s’agit pas seulement de résister au changement, mais aussi de le maîtriser pour mieux l’adapter aux besoins de votre entreprise. Vous n’êtes plus soumis aux effets indésirables des mises à jour automatiques qui pourraient potentiellement perturber votre environnement informatique soigneusement organisé.

Vous pourriez également être intéressé par l’article Comment activer la mise à niveau automatique de Windows 11 avec PowerShell.

Pour aller plus loin

Pour créer une équipe informatique efficace et performante, il est essentiel d'avoir une solution centralisée qui joue le rôle de nœud principal pour 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 profitez d'un 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)).