Estou executando o Powershell (v4) em uma caixa do Windows7; Consegui até ontem (2017-04-12) emitir um comando 'stop-computer' para desligar meu computador.
Hoje: não posso fazê-lo; Eu recebo esta resposta: ('zaphod' é o nome do host):
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
Isso acontece quando eu inicio o Powershell com permissões não administrativas; ou se eu usar 'Executar como administrador' (e ele estiver sendo executado como Administrador; desde que eu recebo o popup "Controle de conta de usuário" quando faço isso).
Houve algumas atualizações automáticas do Windows feitas na minha máquina hoje - talvez elas sejam de alguma forma responsáveis?
Estranhamente; 'restart-computer' faz funcionar.
Isso é uma coisa conhecida? Posso recuperar minhas permissões de alguma forma?
Mais pesquisas seguem:
EDITAR : se eu emitir o comando com o sinalizador '-asjob', ele funciona :
stop-computer -asjob # this works !
Eu emiti o seguinte comando para obter ajuda:
get-help Stop-Computer -full
O sinalizador "Autenticação" é definido da seguinte forma:
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.
[...]
Então, confusamente, a autenticação 'default' é aparentemente 'Packet'; mas o sinalizador para mudar para 'Autenticação do Windows' é chamado 'Padrão'.
Em qualquer caso; Nenhum dos sinalizadores me permite desligar o computador.
Eu recebo uma pequena variação do erro quando uso "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
Também liguei o rastreio usando:
Set-PSDebug -Trace 2
Agora eu entendo isso; mas eu não sei o que fazer com isso:
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.