Resumen
Después de aplicar las actualizaciones de seguridad de abril 2017 descritas en la Guía de actualización de seguridad de Microsoft CVE-2017-0160 , el comando Detener equipo PowerShell v3.0 + se produce un error. Además, si las aplicaciones utilizan los métodos de administración de energía, tales como apagar o reiniciar, de la clase Win32_OperatingSystem y establezca el atributo EnablePrivileges en true, puede observar el mismo error. Se devuelve un mensaje de error "Privilegio no mantenido".
Más información
Síntomas de problema 1
Los clientes que intentan apagar o reiniciar un sistema, ya sea local o remoto, utilizando el comando Detener equipo en PowerShell v3.0 y versiones posteriores, verá el siguiente error:
equipo de parada: privilegio no mantenido.
En línea: 1 char: 1
+ Detener equipo
+ ~~~~~~~~~~~~~
+ CategoryInfo: InvalidOperation: (< nombreDeEquipo >: cadena) [Stop-equipo], gestión
+ FullyQualifiedErrorId: StopComputerException,Microsoft.PowerShell.Commands.StopComputerCommand
Solución para el problema 1
Para evitar este problema, ejecute el siguiente comando de "shutdown.exe" para ejecutar el apagado y reiniciar las operaciones en sistemas locales o remotos:
Shutdown.exe [-r] [-s] [-m \\computer]
Para obtener más información y comandos de ayuda, ejecute:
shutdown.exe -?
Síntomas de problema 2
Cliente aplicaciones utilizando los métodos de administración de energía, tales como apagar o reiniciar, de la clase Win32_OperatingSystem y establezca el atributo EnablePrivileges en true, puede observar el mismo error de "No dispone de privilegio".
-
Ejemplo 1 (PowerShell) devuelve el error "Privilegio no mantenido":
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername $win32OS.psbase.Scope.Options.EnablePrivileges = $true $win32OS.reboot()-
Ejemplo 2 (código C#) devuelve el error "Privilegio no mantenido":
[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); } }
-
Solución para el problema 2
-
Por ejemplo 1 (PowerShell):
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername -EnableAllPrivileges $win32OS.reboot() -
Por ejemplo, 2 (código 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"]); } } } }
Solución
Solución para el problema 1
Para resolver este problema, instale la actualización en la tabla siguiente según el sistema.
Sistema operativo |
Actualización |
Windows Server 2008 |
Para la 2.0 de.NET Framework, instalar la actualización 4020511 Para el.NET Framework 4.5.2, instale la actualización 4020507 Para la 4.6 de.NET Framework, instalar la actualización 4020503 |
Windows 7 y Windows Server 2008 R2 |
Para instalar el.NET Framework 3.5.1, actualizar 4020513 Para instalar el.NET Framework 4.5.2, actualizar 4020507 Para el.NET Framework versión 4.6 o 4.6.1, instale la actualización 4020503 Para instalar el.NET Framework 4.6.2, actualizar 4020500 |
Windows Server 2012 |
Para la 3.5 de.NET Framework, instale la actualización 4020512 Para instalar el.NET Framework 4.5.2, actualizar 4020506 Para la 4.6 de.NET Framework o 4.6.1, instale la actualización 4020501 Para instalar el.NET Framework 4.6.2, actualizar 4020498 |
Windows 8.1 y Windows Server 2012 R2 |
Para.NET Framework 3.5, instalación actualizar 4020514 Para instalar el.NET Framework 4.5.2, actualizar 4020505 Para la 4.6 de.NET Framework o 4.6.1, instale la actualización 4020502 Para instalar el.NET Framework 4.6.2, actualizar 4020499 |
RTM de Windows 10 |
Instalar actualización 4019474 |
10 Windows versión 1511 |
Instalar actualización 4019473 |
10 1607 de la versión de Windows y Windows Server 2016 |
Instalar actualización 4019472 |
10 Windows versión 1703 |
Instalar actualización 4016871 |
Solución para el problema 2
Para resolver este problema, instale la actualización en la tabla siguiente según el sistema.
Versión del producto |
Vista previa del informe de calidad KB |
---|---|
Actualización de Windows 10 1703 (RS2) Windows Server 2016 |
|
.NET Framework 3.5 |
|
.NET Framework 4.7 |
|
Actualización de Windows 10 1607 Windows Server 2016 |
|
.NET Framework 3.5 |
Catalog 4034661 |
.NET Framework 4.6.2 y 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 aplica a
En este artículo se aplica a los productos siguientes, como se describe en la sección de Productos afectados de CVE-2017-0160:
Microsoft.NET Framework 2.0, 3.5, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7 en todas las versiones compatibles de Windows que ejecuta PowerShell 3.0 y versiones posteriores.