Rezumat
După ce aplicați actualizările de securitate aprilie 2017 descrisă în Ghid de actualizare de securitate Microsoft CVE-2017-0160 , comenzi PowerShell v3.0 + stop computer nu reușește. În plus, dacă aplicațiile utilizează metode de gestionare alimentare, cum ar fi închiderea sau repornirea sistemului, din clasa Win32_OperatingSystem setat atributul EnablePrivileges la true, ele pot observa aceeași eroare. Se returnează un mesaj de eroare "Privilegiu nu a avut loc".
Mai multe informații
Simptome pentru problema 1
Clienții care încercați să dezactivați sau să reporniți un sistem, fie local sau la distanță, utilizând comanda stop computer PowerShell v3.0 și mai târziu, veți vedea următorul mesaj de eroare:
Stop computer: privilegii nu a avut loc.
La linia: 1 char: 1
+ stop-computer
+ ~~~~~~~~~~~~~
+ CategoryInfo: InvalidOperation: (< NUMECOMPUTER >: String) [Stop-Computer], ManagementE
+ FullyQualifiedErrorId: StopComputerException,Microsoft.PowerShell.Commands.StopComputerCommand
Soluție pentru problema 1
Pentru a rezolva această problemă, executați comanda următoare "shutdown.exe" pentru a executa oprire și reporniți operațiuni pe sistemele local sau la distanță:
Shutdown.exe [-r] [-s] [-m \\computer]
Pentru mai multe informații și comandă ajutor, executați:
shutdown.exe -?
Simptome pentru problema 2
Client aplicațiile cu power management metode, cum ar fi închiderea sau repornirea sistemului, din clasa Win32_OperatingSystem și setat atributul EnablePrivileges la true, poate observa același eroarea "Privilegii nu a avut loc".
-
Exemplu 1 (PowerShell) returnează "Privilegiu nu a avut loc" eroare:
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername $win32OS.psbase.Scope.Options.EnablePrivileges = $true $win32OS.reboot()-
Exemplu 2 (cod C#) returnează "Privilegiu nu a avut loc" eroare:
[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); } }
-
Soluție pentru problema 2
-
De exemplu 1 (PowerShell):
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername -EnableAllPrivileges $win32OS.reboot() -
De exemplu 2 (C# cod):
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"]); } } } }
Rezolvare
Rezoluţia pentru Problema 1
Pentru a rezolva această problemă, instalați actualizarea în tabelul de mai jos în funcţie de sistemul dvs.
Sistem de operare |
Actualizare |
Windows Server 2008 |
Pentru .NET Framework 2.0, instalați actualizarea 4020511 Pentru .NET Framework 4.5.2, instalați actualizarea 4020507 Pentru .NET Framework 4.6, instalați actualizarea 4020503 |
Windows 7 și Windows Server 2008 R2 |
Pentru a instala .NET Framework 3.5.1, actualizarea 4020513 Pentru a instala .NET Framework 4.5.2, actualizarea 4020507 Pentru .NET Framework 4.6 sau 4.6.1, instalați actualizarea 4020503 Pentru a instala .NET Framework 4.6.2, actualizarea 4020500 |
Windows Server 2012 |
Pentru .NET Framework 3.5, instalați actualizarea 4020512 Pentru a instala .NET Framework 4.5.2, actualizarea 4020506 Pentru .NET Framework 4.6 sau 4.6.1, instalați actualizarea 4020501 Pentru a instala .NET Framework 4.6.2, actualizarea 4020498 |
Windows 8.1 și Windows Server 2012 R2 |
Pentru .NET Framework 3.5, instalați actualizarea 4020514 Pentru a instala .NET Framework 4.5.2, actualizarea 4020505 Pentru .NET Framework 4.6 sau 4.6.1, instalați actualizarea 4020502 Pentru a instala .NET Framework 4.6.2, actualizarea 4020499 |
Windows 10 RTM |
Instalați actualizarea 4019474 |
Windows 10 versiunea 1511 |
Instalați actualizarea 4019473 |
Windows 10 versiunea 1607 și Windows Server 2016 |
Instalați actualizarea 4019472 |
Windows 10 versiunea 1703 |
Instalați actualizarea 4016871 |
Rezoluţia pentru Problema 2
Pentru a rezolva această problemă, instalați actualizarea în tabelul de mai jos în funcţie de sistemul dvs.
Versiune produs |
Examinarea calitate set KB |
---|---|
Actualizarea Windows 10 1703 (RS2) Windows Server 2016 |
|
.NET framework 3.5 |
|
.NET framework 4,7 |
|
Actualizarea Windows 10 1607 Windows Server 2016 |
|
.NET framework 3.5 |
Catalog 4034661 |
.NET framework 4.6.2 și 4,7 |
Catalog 4034658 |
Windows 8.1 Windows RT 8.1 Windows Server 2012 R2 |
|
.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 Windows Server 2008 R2 |
|
.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 |
Se aplică la
Acest articol se aplică pentru următoarele produse, cum este descris în secțiunea Afectate produseCVE-2017-0160:
Microsoft .NET Framework 2.0, 3.5 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7 din toate versiunile de Windows PowerShell 3.0 şi versiunile ulterioare.