Я использую Powershell (v4) на Windows7; До вчерашнего дня (2017-04-12) я мог выдать команду «стоп-компьютер» для выключения компьютера.
Сегодня: я не могу этого сделать; Я получаю этот ответ: ('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.