Fehler „Privileg nicht gehalten" mit PowerShell-Befehl „stop-computer" und Energieverwaltungsmethoden in der Klasse „Win32_OperatingSystem": Problemumgehung nach den Sicherheitsupdates vom April 2017 von CVE-2017-0160
Zusammenfassung
Nachdem Sie die im Microsoft-Sicherheitsupdateleitfaden CVE-2017-0160 beschriebenen Sicherheitsupdates vom April 2017 angewendet haben, schlägt der Befehl „Stop-Computer" von PowerShell v3.0+ fehl. Wenn Anwendungen außerdem Energieverwaltungsmethoden wie Herunterfahren oder Neustarten aus der Klasse „Win32_OperatingSystem " verwenden und das Attribut „EnablePrivileges" auf „true" setzen, tritt möglicherweise derselbe Fehler auf. Es wird die Fehlermeldung „Privileg nicht gehalten" zurückgegeben.
Mehr Informationen
Symptome für Problem 1
Kunden, die versuchen, ein lokales oder Remote-System mit dem Befehl „stop-computer" in PowerShell v3.0 und höher auszuschalten oder neu zu starten, sehen die folgende Fehlermeldung:
stop-computer: Berechtigung nicht gehalten.
In Zeile:1 Zeichen:1
+ Stopp-Computer
+ ~~~~~~~~~~~~~
+ CategoryInfo: InvalidOperation: (<COMPUTERNAME> :String) [Stop-Computer], ManagementE
+ FullyQualifiedErrorId: StopComputerException,Microsoft.PowerShell.Commands.StopComputerCommand
Problemumgehung für Problem 1
Um dieses Problem zu umgehen, führen Sie den folgenden Befehl „shutdown.exe" aus, um Abschalt- und Neustartvorgänge auf lokalen oder Remote-Systemen auszuführen:
Shutdown.exe [-r] [-s] [-m \\Computer]
Für weitere Informationen und Befehlshilfe führen Sie Folgendes aus:
Shutdown.exe -?
Symptome für Problem 2
Bei Kundenanwendungen, die Energieverwaltungsmethoden wie Herunterfahren oder Neustarten aus der Klasse „Win32_OperatingSystem" verwenden und das Attribut „EnablePrivileges" auf „true" setzen, tritt möglicherweise derselbe Fehler „Privilege nicht gehalten" auf.
Beispiel 1 (PowerShell) gibt den Fehler „Privilege nicht gehalten" zurück:
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername $win32OS.psbase.Scope.Options.EnablePrivileges = $true $win32OS.reboot()Beispiel 2 (C#-Code) gibt den Fehler „Privilege nicht gehalten" zurück:
[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); } }
Problemumgehung für Problem 2
Für Beispiel 1 (PowerShell):
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername -EnableAllPrivileges $win32OS.reboot()Für Beispiel 2 (C#-Code):
Verwenden des Systems; mit System.Collections.Generic; mit System.Linq; Verwenden von System.Management; Verwenden von System.Text; Verwenden von 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() Rückgabewert: {0}", mgmtCallResult["ReturnValue"]); } } } }
Auflösung
Lösung für Problem 1
Um dieses Problem zu beheben, installieren Sie das in der Tabelle unten aufgeführte Update entsprechend Ihrem System.
Betriebssystem | Aktualisieren |
Windows Server 2008 | Installieren Sie für .NET Framework 2.0 das Update 4020511 Installieren Sie für .NET Framework 4.5.2 das Update 4020507 Installieren Sie für .NET Framework 4.6 das Update 4020503 |
Windows 7 und Windows Server 2008 R2 | Installieren Sie für .NET Framework 3.5.1 das Update 4020513 Installieren Sie für .NET Framework 4.5.2 das Update 4020507 Installieren Sie für .NET Framework 4.6 oder 4.6.1 das Update 4020503 Installieren Sie für .NET Framework 4.6.2 das Update 4020500 |
Windows Server 2012 | Installieren Sie für .NET Framework 3.5 das Update 4020512 Installieren Sie für .NET Framework 4.5.2 das Update 4020506 Installieren Sie für .NET Framework 4.6 oder 4.6.1 das Update 4020501 Installieren Sie für .NET Framework 4.6.2 das Update 4020498 |
Windows 8.1 und Windows Server 2012 R2 | Installieren Sie für .NET Framework 3.5 das Update 4020514 Installieren Sie für .NET Framework 4.5.2 das Update 4020505 Installieren Sie für .NET Framework 4.6 oder 4.6.1 das Update 4020502 Installieren Sie für .NET Framework 4.6.2 das Update 4020499 |
Windows 10 RTM | Installieren Sie das Update 4019474 |
Windows 10 Version 1511 | Installieren Sie das Update 4019473 |
Windows 10 Version 1607 und Windows Server 2016 | Installieren Sie das Update 4019472 |
Windows 10 Version 1703 | Installieren Sie das Update 4016871 |
Lösung für Problem 2
Um dieses Problem zu beheben, installieren Sie das in der Tabelle unten aufgeführte Update entsprechend Ihrem System.
Produktversion | Vorschau der Qualitäts-Rollup-KB |
---|---|
Windows 10 Update 1703 (RS2) | |
.NET Framework 3.5 | |
.NET Framework 4.7 | |
Windows 10 Update 1607 | |
.NET Framework 3.5 | Katalog |
.NET Framework 4.6.2 und 4.7 | Katalog |
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 |
Gilt für
Dieser Artikel gilt für die folgenden Produkte, wie im Abschnitt „Betroffene Produkte" von CVE-2017-0160 beschrieben:
Microsoft .NET Framework 2.0, 3.5, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7 auf allen unterstützten Windows-Versionen mit PowerShell 3.0 und höheren Versionen.
No comments:
Post a Comment