3

I am running Powershell (v4) on a Windows7 box ; I was able to until yesterday (2017-04-12) to issue a 'stop-computer' command to shutdown my computer.

Today: I am unable to do so; I get this response: ('zaphod' is the 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

This happens when I start Powershell with non-admin permissions; or if I use 'Run as Administrator' (and it is running as Administator ; since I get the "User Account Control' popup when I do this).

There were some automatic Windows Updates made to my machine today - maybe these are somehow responsible ?

Oddly; 'restart-computer' does work.

Is this a known thing ? Can I get my permissions back somehow ?

More research follows:

EDIT: if I issue the command with the '-asjob' flag - it does work:

stop-computer -asjob # this works !

I issued the following command to get help:

get-help Stop-Computer -full

The 'Authentication' Flag is defined as follows:

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 confusingly the 'default' Authentication is apparently 'Packet'; but the flag to switch to 'Windows Authentication' is called 'Default'.

In any case; none of the flags allow me to shutdown the computer. I get a slight variation of the error when I use "None":

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

I also switched on tracing using:

Set-PSDebug -Trace 2

Now I get this ; but I don't know what to make of it:

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.
1
  • Can you shut down the computer from the same PowerShell prompt using shutdown.exe? Apr 13, 2017 at 16:12

2 Answers 2

3

Somebody from Microsoft posted on the Powershell Subreddit about this.

He explains that it is probably a regression bug from the Security and Quality Rollup for the .NET Framework 4.6 and 4.6.1 patch.

You've already found the suggested workaround to use -asjob.

0
1

Solved, according to “Privilege not held” error with PowerShell “stop-computer” command: Workaround after April 2017 security updates from CVE-2017-0160

Just install the update required for your OS version.

1

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .