Computer stoppen: Privileg nicht gehalten

1633
monojohnny

Ich verwende Powershell (v4) auf einer Windows7-Box. Ich konnte bis gestern (2017-04-12) einen Befehl zum Stoppen des Computers ausführen, um meinen Computer herunterzufahren.

Heute: Ich kann das nicht. Ich erhalte diese Antwort: ('Zaphod' ist der Hostname):

 PS C:\Windows\system32> stop-computer stop-computer : Privilege not held. At line:1 char:1 + stop-computer + ~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (zaphod:String) [Stop-Computer], ManagementException + FullyQualifiedErrorId : StopComputerException,Microsoft.PowerShell.Commands.StopComputerCommand 

Dies geschieht, wenn ich Powershell mit Nicht-Administratorrechten starte. oder wenn ich "Als Administrator ausführen" verwende (und es als Administrator ausgeführt wird; da ich das Popup "Benutzerkontensteuerung" erhalte, wenn ich dies tue).

Auf meinem Rechner wurden heute einige automatische Windows-Updates vorgenommen - vielleicht sind diese irgendwie verantwortlich?

Seltsam; 'restart-computer' funktioniert .

Ist das eine bekannte Sache? Kann ich meine Berechtigungen irgendwie zurückbekommen?

Weitere Forschung folgt:

EDIT : Wenn ich den Befehl mit dem ‚-AsJob‘ Flag ausgeben - es tut Arbeit:

stop-computer -asjob # this works ! 

Ich habe den folgenden Befehl ausgegeben, um Hilfe zu erhalten:

get-help Stop-Computer -full 

Das Flag 'Authentication' ist wie folgt definiert:

Authentication <AuthenticationLevel> Specifies the authentication level that is used for the WMI connection. (Stop-Computer uses WMI.) The default value is Packet.  Valid values are:  Unchanged: The authentication level is the same as the previous command. Default: Windows Authentication. None: No COM authentication. Connect: Connect-level COM authentication. Call: Call-level COM authentication. Packet: Packet-level COM authentication. PacketIntegrity: Packet Integrity-level COM authentication. PacketPrivacy: Packet Privacy-level COM authentication. [...] 

So verwirrend ist die "Standard" -Authentifizierung anscheinend "Paket"; Das Flag zum Wechseln zu 'Windows-Authentifizierung' wird jedoch als 'Standard' bezeichnet.

Auf jeden Fall; Keines der Flags erlaubt es mir, den Computer herunterzufahren. Ich erhalte eine geringfügige Abweichung des Fehlers, wenn ich "None" verwende:

stop-computer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) At line:1 char:1 + stop-computer -Authentication None + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Stop-Computer], UnauthorizedAccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.StopComputerCommand 

Ich habe auch das Tracing eingeschaltet:

Set-PSDebug -Trace 2 

Jetzt bekomme ich das; aber ich weiß nicht, was ich davon halten soll:

DEBUG: 1+ >>>> stop-computer DEBUG: ! CALL function '<ScriptBlock>' DEBUG: 19+ if ( & >>>> { Set-StrictMode -Version 1; $_.PSMessageDetails } ) { DEBUG: ! CALL function '<ScriptBlock>' DEBUG: 19+ if ( & { >>>> Set-StrictMode -Version 1; $_.PSMessageDetails } ) { DEBUG: 19+ if ( & { Set-StrictMode -Version 1; >>>> $_.PSMessageDetails } ) { DEBUG: 1+ & >>>> { Set-StrictMode -Version 1; $this.Exception.InnerException.PSMessageDetails } DEBUG: ! CALL function '<ScriptBlock>' DEBUG: 1+ & { >>>> Set-StrictMode -Version 1; $this.Exception.InnerException.PSMessageDetails } DEBUG: 1+ & { Set-StrictMode -Version 1; >>>> $this.Exception.InnerException.PSMessageDetails } DEBUG: 1+ & { Set-StrictMode -Version 1; $this.Exception.InnerException.PSMessageDetails >>>> } DEBUG: 19+ if ( & { Set-StrictMode -Version 1; $_.PSMessageDetails >>>> } ) { DEBUG: 26+ $errorCategoryMsg = & >>>> { Set-StrictMode -Version 1; $_.ErrorCategory_Message } DEBUG: ! CALL function '<ScriptBlock>' DEBUG: 26+ $errorCategoryMsg = & { >>>> Set-StrictMode -Version 1; $_.ErrorCategory_Message } DEBUG: 26+ $errorCategoryMsg = & { Set-StrictMode -Version 1; >>>> $_.ErrorCategory_Message } DEBUG: 26+ $errorCategoryMsg = & { Set-StrictMode -Version 1; $_.ErrorCategory_Message >>>> } DEBUG: 42+ $originInfo = & >>>> { Set-StrictMode -Version 1; $_.OriginInfo } DEBUG: ! CALL function '<ScriptBlock>' DEBUG: 42+ $originInfo = & { >>>> Set-StrictMode -Version 1; $_.OriginInfo } DEBUG: 42+ $originInfo = & { Set-StrictMode -Version 1; >>>> $_.OriginInfo } DEBUG: 42+ $originInfo = & { Set-StrictMode -Version 1; $_.OriginInfo >>>> } stop-computer : Privilege not held. 
3
Können Sie den Computer von derselben PowerShell-Eingabeaufforderung aus mit "shutdown.exe" herunterfahren? Twisty Impersonator vor 7 Jahren 0

2 Antworten auf die Frage

3
Brian Finn

Jemand von Microsoft hat dies im Powershell Subreddit gepostet .

Er erklärt, dass es sich wahrscheinlich um einen Regressionsfehler aus dem Sicherheits- und Qualitäts-Rollup für .NET Framework 4.6 und 4.6.1 handelt .

Sie haben bereits die vorgeschlagene Problemumgehung gefunden -asjob.

1
Manu Hernandez

Gelöst, laut Fehler "Privileg nicht gehalten" mit PowerShell-Befehl "stop-computer": Problemumgehung nach Sicherheitsupdates vom April 2017 von CVE-2017-0160

Installieren Sie einfach das für Ihre Betriebssystemversion erforderliche Update.

Link nur für echte antworten, was sagen? Manu, komm schon Manu, echt !! Pimp Juice IT vor 7 Jahren 0