Powershell

PowerShell - Invoke-WmiMethod:訪問被拒絕。(來自 HRESULT 的異常:0x80070005 (E_ACCESSDENIED))

  • October 25, 2019

我有 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))

我在管理員模式下執行上述腳本,並且我已經為腳本提供了遠端電腦管理員憑據。

這可能是因為遠端管理員與本地帳戶的連接由 UAC(使用者帳戶控制)管理。預設情況下,遠端連接將刪除管理令牌,如本知識庫文章中所述:

Windows Vista 中的使用者帳戶控制和遠端限制說明 (951016)

如果是這種情況,您可以將以下系統資料庫​​值設置為1(type REG_DWORD) 以允許作業系統建構提升的令牌而不是受限令牌:

Hive: HKEY_LOCAL_MACHINE

子鍵: SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

值名稱: LocalAccountTokenFilterPolicy

值數據 1:(REG_DWORD

(但請注意更改此設置的安全隱患。)

引用自:https://serverfault.com/questions/988344