我在 Windows7 机器上运行 Powershell (v4);直到昨天(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 更新 - 也许这些更新在某种程度上起了作用?
奇怪的是;‘重启计算机’做工作。
这是已知的事情吗?我能以某种方式恢复我的权限吗?
进一步的研究如下:
编辑:如果我使用“-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 身份验证”的标志称为“默认”。
无论如何,没有一个标志允许我关闭计算机。当我使用“无”时,我得到了稍微不同的错误:
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.
答案1
答案2
已解决,根据PowerShell“stop-computer”命令出现“未持有权限”错误:2017 年 4 月 CVE-2017-0160 安全更新后的解决方法
只需安装您的操作系统版本所需的更新。