使用 Microsoft 登录
登录或创建帐户。
你好,
使用其他帐户。
你有多个帐户
选择要登录的帐户。

概要

应用 Microsoft 安全更新指南 CVE-2017-0160 中所述的 2017 年 4 月安全更新后,PowerShell v3.0+ stop-computer 命令失败。 另外,如果应用程序使用 Win32_OperatingSystem 类中的电源管理方法(例如关机或重启),并将 EnablePrivileges 属性设置为 true,则它们可能会观察到相同的失败。 返回了“没有保留权限”错误消息。

更多信息

问题 1 的症状

尝试通过在 PowerShell 3.0 及更高版本上使用 stop-computer 命令来关闭或重启本地或远程系统的客户将看到以下错误消息:

stop-computer : 没有保留权限。

At line:1 char:1(在第 1 行第 1 个字符处)

+ stop-computer

+ ~~~~~~~~~~~~~

+ 类别信息: InvalidOperation: (<计算机名>:String) [Stop-Computer], ManagementE

+ 完全限定的错误 ID: StopComputerException,Microsoft.PowerShell.Commands.StopComputerCommand

问题 1 的解决方法

要解决此问题,请运行以下“shutdown.exe”命令,以在本地或远程系统上执行关机和重启操作:

shutdown.exe [-r] [-s] [-m \\computer]

如需更多信息和命令帮助,请运行:

shutdown.exe -?

问题 2 的症状

使用 Win32_OperatingSystem 类中的电源管理方法(例如关机或重启),并将 EnablePrivileges 特性设置为 true 的客户应用程序可能会观察到“没有保留权限”错误。

  • 示例 1 (PowerShell) 返回“没有保留权限”错误:
      $computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername $win32OS.psbase.Scope.Options.EnablePrivileges = $true $win32OS.reboot()

    • 示例 2(C# 代码)返回“没有保留权限”错误:
        [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); } }

问题 2 的解决方法

  • 示例 1 (PowerShell):
      $computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername -EnableAllPrivileges $win32OS.reboot()

  • 示例 2(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"]); } } } }

解决方案

问题 1 的解决方案

要解决此问题,请根据你的系统安装下表中的更新。

操作系统

更新

Windows Server 2008

对于 .NET Framework 2.0,请安装更新 4020511

对于 .NET Framework 4.5.2,请安装更新 4020507

对于 .NET Framework 4.6,请安装更新 4020503

Windows 7 和 Windows Server 2008 R2

对于 .NET Framework 3.5.1,请安装更新 4020513

对于 .NET Framework 4.5.2,请安装更新 4020507

对于 .NET Framework 4.6 或 4.6.1,请安装更新 4020503

对于 .NET Framework 4.6.2,请安装更新 4020500

Windows Server 2012

对于 .NET Framework 3.5,请安装更新 4020512

对于 .NET Framework 4.5.2,请安装更新 4020506

对于 .NET Framework 4.6 或 4.6.1,请安装更新 4020501

对于 .NET Framework 4.6.2,请安装更新 4020498

Windows 8.1 和 Windows Server 2012 R2

对于 .NET Framework 3.5,请安装更新 4020514

对于 .NET Framework 4.5.2,请安装更新 4020505

对于 .NET Framework 4.6 或 4.6.1,请安装更新 4020502

对于 .NET Framework 4.6.2,请安装更新 4020499

Windows 10 RTM

安装更新 4019474

Windows 10 版本 1511

安装更新 4019473

Windows 10 版本 1607 和 Windows Server 2016

安装更新 4019472

Windows 10 版本 1703

安装更新 4016871

问题 2 的解决方案

要解决此问题,请根据你的系统安装下表中的更新。

产品版本

质量汇总 KB 预览

Windows 10 更新 1703 (RS2)
Windows Server 2016

目录
4034674

.NET Framework 4.7

4034674

Windows 10 更新 1607
Windows Server 2016


 

.NET Framework 3.5

目录
4034661

.NET Framework 4.6.2 和 4.7

目录
4034658

Windows 8.1
Windows RT 8.1
Windows Server 2012 R2

目录
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

目录
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

目录
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

目录
4035039

.NET Framework 2.0

4033994

.NET Framework 4.5.2

4033993

.NET Framework 4.6

4033990

注意:已计划日后推出适用于 Windows 10 版本 1703 的 .NET Framework 3.5 更新。

适用范围

本文适用于以下产品,如 CVE-2017-0160受影响的产品部分所述:

运行 PowerShell 3.0 及更高版本的所有受支持版本的 Windows 上的 Microsoft .NET Framework 2.0、3.5、4.5.2、4.6、4.6.1、4.6.2、4.7。

 

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?
按“提交”即表示你的反馈将用于改进 Microsoft 产品和服务。 你的 IT 管理员将能够收集此数据。 隐私声明。

谢谢您的反馈!

×