Résumé
Après l’application des mises à jour de sécurité d’avril 2017 décrites dans les instructions de mise à jour de sécurité Microsoft CVE-2017-0160, la commande PowerShell v3.0+ stop-computer échoue. En outre, si des applications utilisent des méthodes de gestion de l’alimentation (arrêt ou redémarrage, par exemple) de la classe Win32_OperatingSystem et que l’attribut EnablePrivileges a la valeur true, elles peuvent rencontrer le même problème. Un message d’erreur « Privilège non maintenu » s’affiche.
Informations supplémentaires
Symptômes pour le problème 1
Les clients qui tentent d’arrêter ou de redémarrer un ordinateur, local ou distant, avec la commande stop-computer sur PowerShell v3.0 et versions ultérieures, obtiennent le message d’erreur suivant :
stop-computer : Privilège non maintenu.
At line:1 char:1
+ stop-computer
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (<NOMORDINATEUR> :String) [Stop-Computer], ManagementE
+ FullyQualifiedErrorId : StopComputerException,Microsoft.PowerShell.Commands.StopComputerCommand
Solution de contournement pour le problème 1
Pour contourner ce problème, exécutez la commande “shutdown.exe” suivante pour exécuter les commandes d’arrêt et de redémarrage sur les systèmes locaux ou distants :
shutdown.exe [-r] [-s] [-m \\ordinateur]
Pour plus d’informations et pour obtenir de l’aide sur cette commande, exécutez :
shutdown.exe -?
Symptômes pour le problème 2
Les applications des clients qui utilisent des méthodes de gestion de l’alimentation (arrêt ou redémarrage, par exemple) de la classe Win32_OperatingSystem et pour lesquelles l’attribut EnablePrivileges a la valeur true peuvent rencontrer la même erreur « Privilège non maintenu ».
-
Exemple 1 (PowerShell) renvoyant l’erreur « Privilège non maintenu » :
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername $win32OS.psbase.Scope.Options.EnablePrivileges = $true $win32OS.reboot()-
Exemple 2 (code C#) renvoyant l’erreur « Privilège non maintenu » :
[STAThread] static void Main(string[] args) { ManagementClass mgmtObject = new ManagementClass("Win32_OperatingSystem"); foreach (ManagementObject iterMgmtObject in mgmtObject.GetInstances()) { iterMgmtObject.Scope.Options.EnablePrivileges = true; iterMgmtObject.InvokeMethod("Reboot", null, null); } }
-
Solution de contournement pour le problème 2
-
Pour l’exemple 1 (PowerShell) :
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername -EnableAllPrivileges $win32OS.reboot() -
Pour l’exemple 2 (code C#) :
using System; using System.Collections.Generic; using System.Linq; using System.Management; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication { public class Program { static void Main(string[] args) { var mgmtScope = new ManagementScope( ManagementPath.DefaultPath, new ConnectionOptions() { EnablePrivileges = true }); var mgmtClass = new ManagementClass(mgmtScope, new ManagementPath("Win32_OperatingSystem"), null); foreach (ManagementObject mgmtInst in mgmtClass.GetInstances()) { var mgmtCallResult = mgmtInst.InvokeMethod("Reboot", null, null); Console.Out.WriteLine("Reboot() Return Value: {0}", mgmtCallResult["ReturnValue"]); } } } }
Résolution
Résolution du problème 1
Pour résoudre ce problème, installez la mise à jour correspondant à votre système dans le tableau ci-dessous en fonction.
Système d’exploitation |
Mise à jour |
Windows Server 2008 |
Pour .NET Framework 2.0, installez la mise à jour 4020511 Pour .NET Framework 4.5.2, installez la mise à jour 4020507 Pour .NET Framework 4.6, installez la mise à jour 4020503 |
Windows 7 et Windows Server 2008 R2 |
Pour .NET Framework 3.5.1, installez la mise à jour 4020513 Pour .NET Framework 4.5.2, installez la mise à jour 4020507 Pour .NET Framework 4.6 ou 4.6.1, installez la mise à jour 4020503 Pour .NET Framework 4.6.2, installez la mise à jour 4020500 |
Windows Server 2012 |
Pour .NET Framework 3.5, installez la mise à jour 4020512 Pour .NET Framework 4.5.2, installez la mise à jour 4020506 Pour .NET Framework 4.6 ou 4.6.1, installez la mise à jour 4020501 Pour .NET Framework 4.6.2, installez la mise à jour 4020498 |
Windows 8.1 et Windows Server 2012 R2 |
Pour .NET Framework 3.5, installez la mise à jour 4020514 Pour .NET Framework 4.5.2, installez la mise à jour 4020505 Pour .NET Framework 4.6 ou 4.6.1, installez la mise à jour 4020502 Pour .NET Framework 4.6.2, installez la mise à jour 4020499 |
Windows 10 RTM |
Installez la mise à jour 4019474 |
Windows 10 version 1511 |
Installez la mise à jour 4019473 |
Windows 10 version 1607 et Windows Server 2016 |
Installez la mise à jour 4019472 |
Windows 10 version 1703 |
Installez la mise à jour 4016871 |
Résolution du problème 2
Pour résoudre ce problème, installez la mise à jour correspondant à votre système dans le tableau ci-dessous en fonction.
Version du produit |
Pré-version du correctif cumulatif mensuel - KB |
---|---|
Mise à jour pour Windows 10 version 1703 (RS2) |
|
.NET Framework 4.7 |
|
Mise à jour pour Windows 10 version 1607 |
|
.NET Framework 3.5 |
Catalogue
|
.NET Framework 4.6.2 et 4.7 |
Catalogue
|
Windows 8.1 |
|
.NET Framework 3.5 |
|
.NET Framework 4.5.2 |
|
.NET Framework 4.6, 4.6.1, 4.6.2, 4.7 |
|
Windows Server 2012 |
|
.NET Framework 3.5 |
|
.NET Framework 4.5.2 |
|
.NET Framework 4.6, 4.6.1, 4.6.2, 4.7 |
|
Windows 7 |
|
.NET Framework 3.5.1 |
|
.NET Framework 4.5.2 |
|
.NET Framework 4.6, 4.6.1, 4.6.2, 4.7 |
|
Windows Server 2008 |
|
.NET Framework 2.0 |
|
.NET Framework 4.5.2 |
|
.NET Framework 4.6 |
Remarque Une mise à jour de .NET Framework 3.5 pour Windows 10 version 1703 est prévue dans une mise à jour ultérieure.
Produits concernés
Cet article s’applique aux produits suivants, tel que décrit dans la section Produits concernés de la CVE-2017-0160 :
Microsoft .NET Framework 2.0, 3.5, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7 sur toutes les versions prises en charge de Windows qui exécutent PowerShell 3.0 et versions ultérieures.