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

Catalog 4034674

.NET framework 3.5

Catalog 4038788

.NET framework 4,7

4034674

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.1Windows Server 2012 R2

Catalog 4035038

.NET framework 3.5

4033997

.NET framework 4.5.2

4033991

.NET framework 4.6, 4.6.1, 4.6.2, 4.7

4033989

Windows Server 2012

Catalog 4035037

.NET framework 3.5

4033995

.NET framework 4.5.2

4033992

.NET framework 4.6, 4.6.1, 4.6.2, 4.7

4033988

Windows 7 Windows Server 2008 R2

Catalog 4035036

.NET framework 3.5.1

4033996

.NET framework 4.5.2

4033993

.NET framework 4.6, 4.6.1, 4.6.2, 4.7

4033990

Windows Server 2008

Catalog 4035039

.NET framework 2.0

4033994

.NET framework 4.5.2

4033993

.NET framework 4.6

4033990

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.

 

Aveți nevoie de ajutor suplimentar?

Doriți mai multe opțiuni?

Explorați avantajele abonamentului, navigați prin cursurile de instruire, aflați cum să vă securizați dispozitivul și multe altele.