我有 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
值数据: 1
(REG_DWORD
)
(但请注意更改此设置的安全影响。)