Sumário
Depois de aplicar as actualizações de segurança de Abril de 2017 descritas na orientação de actualização de segurança Microsoft 2017-CVE-0160 , o PowerShell v 3.0 + Parar computador comando falha. Além disso, se as aplicações utilizam métodos de gestão de energia, tal como o encerramento ou reinício, da classe Win32_OperatingSystem e definir o atributo EnablePrivileges para verdadeiro, poderá observar a falha do mesma. É devolvida uma mensagem de erro "Privilégio não mantido".
Mais informações
Sintomas para edição 1
Os clientes que tentam desligar ou reiniciar um sistema, local ou remoto, utilizando o comando stop computador v PowerShell 3.0 e posterior, serão apresentado o seguinte erro:
Parar computador: privilégio não mantido.
Na linha: 1 carácter: 1
+ Parar computador
+ ~~~~~~~~~~~~~
+ CategoryInfo: InvalidOperation: (< NomeComputador >: cadeia) [computador Stop] ManagementE
+ FullyQualifiedErrorId: StopComputerException,Microsoft.PowerShell.Commands.StopComputerCommand
Solução para o problema 1
Para contornar este problema, execute o seguinte comando "shutdown.exe" para executar o encerramento e reiniciar as operações em sistemas locais ou remotos:
Shutdown.exe [-r] [-s] [-m \\computer]
Para mais informações e comandos de ajuda, execute:
shutdown.exe -?
Sintomas problema 2
Cliente aplicações a utilizar métodos de gestão de energia, tais como o encerramento ou reinício, da classe Win32_OperatingSystem e defina o atributo EnablePrivileges como true, poderá observar o mesmo erro "Privilégio não mantido".
-
Exemplo 1 (PowerShell) devolve "Privilégio não mantido" erro:
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername $win32OS.psbase.Scope.Options.EnablePrivileges = $true $win32OS.reboot()-
Exemplo 2 (c# código) devolve "Privilégio não mantido" erro:
[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ção para o problema 2
-
Por exemplo 1 (PowerShell):
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername -EnableAllPrivileges $win32OS.reboot() -
Por exemplo 2 (c# código):
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"]); } } } }
Resolução
Resolução de problema 1
Para resolver este problema, instale a actualização no quadro a seguir em conformidade com o sistema.
Sistema operativo |
Actualização |
Windows Server 2008 |
Para o .NET Framework 2.0, instalar a actualização 4020511 Para o .NET Framework 4.5.2, instalar a actualização 4020507 Para o .NET Framework 4.6, instalar a actualização 4020503 |
Windows 7 e Windows Server 2008 R2 |
Para o .NET Framework 3.5.1, instalar a actualização 4020513 Para o .NET Framework 4.5.2, instalar a actualização 4020507 Para o .NET Framework 4.6 ou 4.6.1, instalar a actualização 4020503 Para o .NET Framework 4.6.2, instalar a actualização 4020500 |
Windows Server 2012 |
Para o .NET Framework 3.5, instalar a actualização 4020512 Para o .NET Framework 4.5.2, instalar a actualização 4020506 Para o quadro 4.6. .NET ou 4.6.1, instalar a actualização 4020501 Para o .NET Framework 4.6.2, instalar a actualização 4020498 |
Windows 8.1 e Windows Server 2012 R2 |
Para o .NET Framework 3.5, instalar a actualização 4020514 Para o .NET Framework 4.5.2, instalar a actualização 4020505 Para o quadro 4.6. .NET ou 4.6.1, instalar a actualização 4020502 Para o .NET Framework 4.6.2, instalar a actualização 4020499 |
Windows 10 RTM |
Instalar actualização 4019474 |
Windows 10 versão 1511 |
Instalar actualização 4019473 |
Windows 10 versão 1607 e Windows Server 2016 |
Instalar actualização 4019472 |
Windows 10 versão 1703 |
Instalar actualização 4016871 |
Resolução de problema 2
Para resolver este problema, instale a actualização no quadro a seguir em conformidade com o sistema.
Versão do produto |
Pré-visualização do conjunto de qualidade KB |
---|---|
Actualização do Windows 10 1703 (RS2)
|
|
.NET framework 3.5 |
|
.NET framework 4.7 |
|
Actualização do Windows 10 1607
|
|
.NET framework 3.5 |
Catalog
|
.NET framework 4.6.2 e 4.7 |
Catalog
|
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 |
Aplica-se a
Este artigo aplica-se aos seguintes produtos, tal como descrito na secção Produtos afectadas2017-CVE-0160:
Microsoft .NET Framework 2.0, 3.5, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7 em todas as versões suportadas do Windows com o PowerShell 3.0 e versões posteriores.