使用Invoke-Command远程执行高权限PowerShell命令遇权限拒绝问题
远程执行Invoke-Command时权限拒绝问题解决
问题描述
我在远程机器上执行需要提升权限的命令时收到“Access Denied”错误。能直接登录远程机器运行这些命令,但通过Invoke-Command执行就不行。我是该计算机的本地管理员,已经给Invoke-Command传递了凭据,两台机器处于同一个域中。
执行代码
$credential = get-credential $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $credential invoke-command -ComputerName $ComputerName -Credential $cred -ScriptBlock { write-host "whoami: $(whoami)" Write-Host "Is Administrator? $([Security.Principal.WindowsPrincipal]::new( [Security.Principal.WindowsIdentity]::GetCurrent() ).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator))" write-host "Execution Policy: $(Get-ExecutionPolicy)" write-host "net user: $(net user /domain $UserName)" }
输出结果
whoami: Domain\Username Is Administrator? True Execution Policy: Unrestricted net user: The request will be processed at a domain controller for domain domain_name. System error 5 has occurred. + CategoryInfo : NotSpecified: (System error 5 has occurred.:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError + PSComputerName : ComputerName.Domain NotSpecified: (:) [], RemoteException Access is denied. NotSpecified: (:) [], RemoteException
问题原因及解决方法
核心原因
虽然远程会话中身份显示为管理员,但默认情况下PowerShell远程会话不会以**高权限(管理员批准模式)**运行。受UAC限制,远程会话中的管理员会被过滤令牌,无法获得完整的管理员权限,导致执行域相关高权限操作时被拒绝。
解决办法
添加
-EnableNetworkAccess参数
该参数允许远程会话使用网络凭据访问域控制器等资源,结合凭据传递可解决域操作权限问题:invoke-command -ComputerName $ComputerName -Credential $cred -ScriptBlock { write-host "whoami: $(whoami)" Write-Host "Is Administrator? $([Security.Principal.WindowsPrincipal]::new( [Security.Principal.WindowsIdentity]::GetCurrent() ).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator))" write-host "Execution Policy: $(Get-ExecutionPolicy)" write-host "net user: $(net user /domain $using:UserName)" } -EnableNetworkAccess注意:远程脚本块中引用本地变量需用
$using:前缀。修改远程机器UAC远程限制
若上述方法无效,可修改远程机器注册表,允许远程管理员获取完整权限:- 在远程机器执行:
Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1 -Type DWord - 重启WinRM服务生效:
Restart-Service WinRM
提示:此修改会降低UAC安全性,仅在必要时使用。
- 在远程机器执行:
用
Start-Process以高权限单独运行命令
针对特定需要高权限的命令,可在远程会话中启动带管理员权限的进程:invoke-command -ComputerName $ComputerName -Credential $cred -ScriptBlock { Start-Process net -ArgumentList "user /domain $using:UserName" -Verb RunAs -Wait -NoNewWindow }
内容的提问来源于stack exchange,提问作者gmaubrrriaeyl
相关产品推荐
相关产品推荐

