PowerShell - Invoke-WmiMethod:访问被拒绝。(来自 HRESULT 的异常:0x80070005(E_ACCESSDENIED))

PowerShell - Invoke-WmiMethod:访问被拒绝。(来自 HRESULT 的异常:0x80070005(E_ACCESSDENIED))

我有 2 台工作组计算机。我想在这两台计算机之间设置 powershell-remoting。两台计算机上的操作系统都是 Windows 1809。

其中一台计算机已启用 Powershell 远程处理。无法直接访问其他计算机来启用 powershell 远程处理。因此,我在主机(即已启用 powershell 远程处理的计算机之一)上运行脚本,以远程启用远程计算机上的远程处理。我使用 Invoke-WmiMethod 进行远程操作。以下是我正在使用的脚本:

param(
    [parameter(Mandatory = $true)]
    [string]$RemoteMachineIPaddress,
    [parameter(Mandatory = $true)]
    [string]$SystemIPaddress
)

try{

$DisplayName = "Allow ICMPv4-In"

$secpasswd = ConvertTo-SecureString "Password" -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ("Admin02", $secpasswd)

Invoke-WmiMethod -ComputerName $RemoteMachineIPaddress -Namespace root\cimv2 -Class Win32_Process -Name Create -Credential $Cred -Impersonation 3 -EnableAllPrivileges -ArgumentList "powershell Start-Process powershell -Verb runAs -ArgumentList 'Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force'"
Invoke-WmiMethod -ComputerName $RemoteMachineIPaddress -Namespace root\cimv2 -Class Win32_Process -Name Create -Credential $Cred -Impersonation 3 -EnableAllPrivileges -ArgumentList "powershell Start-Process powershell -Verb runAs -ArgumentList 'Install-PackageProvider -Name Nuget -MinimumVersion 2.8.5.201 -Force'"
Invoke-WmiMethod -ComputerName $RemoteMachineIPaddress -Namespace root\cimv2 -Class Win32_Process -Name Create -Credential $Cred -Impersonation 3 -EnableAllPrivileges -ArgumentList "powershell Start-Process powershell -Verb runAs -ArgumentList 'Start-Service WinRM -Force'"
Invoke-WmiMethod -ComputerName $RemoteMachineIPaddress -Namespace root\cimv2 -Class Win32_Process -Name Create -Credential $Cred -Impersonation 3 -EnableAllPrivileges -ArgumentList "powershell Start-Process powershell -Verb runAs -ArgumentList 'Set-Item WSMan:\localhost\Client\TrustedHosts -Value $SystemIPaddress -Force'"
Invoke-WmiMethod -ComputerName $RemoteMachineIPaddress -Namespace root\cimv2 -Class Win32_Process -Name Create -Credential $Cred -Impersonation 3 -EnableAllPrivileges -ArgumentList "powershell Start-Process powershell -Verb runAs -ArgumentList 'Enable-PSRemoting -Force -SkipNetworkProfileCheck'"
Invoke-WmiMethod -ComputerName $RemoteMachineIPaddress -Namespace root\cimv2 -Class Win32_Process -Name Create -Credential $Cred -Impersonation 3 -EnableAllPrivileges -ArgumentList "powershell Start-Process powershell -Verb runAs -ArgumentList 'Restart-Service winrm'"

return $true
}
catch
{
return $false
}

当我从主机运行此脚本时,出现“访问被拒绝”错误

Invoke-WmiMethod : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

我在管理员模式下运行上述脚本,并且还向脚本提供了远程机器管理员凭据。

答案1

这可能是因为远程管理员与本地帐户的连接由 UAC(用户帐户控制)管理。默认情况下,远程连接将删除管理令牌,如本知识库文章所述:

Windows Vista 中的用户帐户控制和远程限制说明 (951016)

如果是这种情况,您可以将以下注册表值设置为1(type REG_DWORD),以允许操作系统构建提升令牌而不是受限令牌:

蜂巢: HKEY_LOCAL_MACHINE
子项: SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
值名称: LocalAccountTokenFilterPolicy
值数据: 1REG_DWORD

(但请注意更改此设置的安全影响。)

相关内容