Powershell
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))
我在管理員模式下執行上述腳本,並且我已經為腳本提供了遠端電腦管理員憑據。
這可能是因為遠端管理員與本地帳戶的連接由 UAC(使用者帳戶控制)管理。預設情況下,遠端連接將刪除管理令牌,如本知識庫文章中所述:
Windows Vista 中的使用者帳戶控制和遠端限制說明 (951016)
如果是這種情況,您可以將以下系統資料庫值設置為
1
(typeREG_DWORD
) 以允許作業系統建構提升的令牌而不是受限令牌:Hive:
HKEY_LOCAL_MACHINE
子鍵:
SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
值名稱:
LocalAccountTokenFilterPolicy
值數據
1
:(REG_DWORD
)(但請注意更改此設置的安全隱患。)