стоп-компьютер: привилегия не удерживается

1525
monojohnny

Я использую Powershell (v4) на Windows7; До вчерашнего дня (2017-04-12) я мог выдать команду «stop-computer» для выключения моего компьютера.

Сегодня: я не могу этого сделать; Я получаю этот ответ: ('zaphod' является именем хоста):

 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 

Это происходит, когда я запускаю Powershell с правами не администратора; или если я использую «Запуск от имени администратора» (и он работает от имени администратора; поскольку я получаю всплывающее окно «Контроль учетных записей пользователей» при этом).

Сегодня на мою машину было сделано несколько автоматических обновлений Windows - может быть, они как-то ответственны?

Как ни странно, «рестарт-компьютер» делает работу.

Это известная вещь? Могу ли я как-нибудь вернуть свои разрешения?

Далее следует исследование:

EDIT : если я выполняю команду с флагом «-AsJob» - это делает работу:

stop-computer -asjob # this works ! 

Я выполнил следующую команду, чтобы получить помощь:

get-help Stop-Computer -full 

Флаг «Аутентификация» определяется следующим образом:

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. [...] 

Таким образом, путаница по умолчанию «Аутентификация», по-видимому, «Пакетная»; но флаг переключения на «Аутентификация Windows» называется «По умолчанию».

В любом случае; ни один из флагов не позволяет мне выключить компьютер. Я получаю небольшое изменение ошибки, когда использую «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 

Я также включил трассировку, используя:

Set-PSDebug -Trace 2 

Теперь я понимаю это; но я не знаю, что с этим делать:

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
Можете ли вы выключить компьютер из той же командной строки PowerShell, используя `shutdown.exe`? Twisty Impersonator 7 лет назад 0

2 ответа на вопрос

3
Brian Finn

Кто-то из Microsoft написал в Powershell Subreddit об этом.

Он объясняет, что это, вероятно, ошибка регрессии из накопительного пакета безопасности и качества для исправлений .NET Framework 4.6 и 4.6.1 .

Вы уже нашли предложенный обходной путь для использования -asjob.

1
Manu Hernandez
Ссылка только ответь по-настоящему, скажи что? Ману, давай Ману, по-настоящему! Pimp Juice IT 7 лет назад 0