You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术求助:以SYSTEM用户身份修改远程系统hosts文件

如何以SYSTEM身份远程修改Windows系统的hosts文件

我来帮你搞定这个远程操作的问题——你当前的代码在本地能正常以SYSTEM身份修改hosts,但远程失效,核心原因是你没把修改逻辑整合到远程SYSTEM的执行会话里,只是在本地启动了SYSTEM权限的PowerShell,完全没触达目标机器。

下面给你两种可行的解决方案,都是严格以SYSTEM身份在远程机器上执行修改:

方案1:用PsExec直接远程执行修改命令

这是最直接的方式,把整个hosts修改逻辑打包到PsExec的远程命令参数里,让它在目标机器的SYSTEM会话中运行:

# 替换以下参数:
# REMOTE_COMPUTER:目标机器的名称或IP地址
# 192.168.1.100 example.com:你要添加的hosts条目
C:\SysinternalsSuite\PsExec.exe \\REMOTE_COMPUTER -s powershell.exe -Command "Add-Content -Path '$Env:SystemRoot\System32\Drivers\etc\hosts' -Value '192.168.1.100 example.com' -Encoding UTF8"

关键参数说明:

  • \\REMOTE_COMPUTER:指定要操作的远程机器,必须保证本地能访问到这台机器的Admin$共享(PsExec默认依赖这个共享传输文件)
  • -s:强制以SYSTEM身份启动远程进程,满足你的权限要求
  • powershell.exe -Command:直接传递PowerShell命令,确保修改逻辑在远程机器上执行,而不是本地

优化:避免重复添加条目

如果担心重复添加相同的hosts条目,可以把命令改成先检查再添加:

C:\SysinternalsSuite\PsExec.exe \\REMOTE_COMPUTER -s powershell.exe -Command "$entry = '192.168.1.100 example.com'; if (-not (Select-String -Path '$Env:SystemRoot\System32\Drivers\etc\hosts' -Pattern [regex]::Escape($entry) -Quiet)) { Add-Content -Path '$Env:SystemRoot\System32\Drivers\etc\hosts' -Value $entry -Encoding UTF8 }"

方案2:用PowerShell远程会话+SYSTEM身份(进阶)

如果你更倾向于用PowerShell原生的远程能力,可以先在远程机器上创建一个临时的SYSTEM权限计划任务,执行修改命令后再删除任务:

$remoteComputer = "REMOTE_COMPUTER"
$entry = "192.168.1.100 example.com"

# 创建远程SYSTEM权限的计划任务
Invoke-Command -ComputerName $remoteComputer -ScriptBlock {
    $taskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-Command `"Add-Content -Path `$Env:SystemRoot\System32\Drivers\etc\hosts -Value '$using:entry' -Encoding UTF8`""
    $taskPrincipal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount
    Register-ScheduledTask -TaskName "TempHostsUpdate" -Action $taskAction -Principal $taskPrincipal | Start-ScheduledTask
    Start-Sleep -Seconds 2
    Unregister-ScheduledTask -TaskName "TempHostsUpdate" -Confirm:$false
}

这种方式不需要依赖PsExec,但要求远程机器开启了PowerShell远程(WinRM服务),且执行用户有远程机器的管理员权限。

为什么你的原代码失效?

你的原代码只是在本地启动了一个SYSTEM权限的PowerShell窗口,Add-Content命令是在本地会话执行的,根本没有涉及远程机器。要远程操作,必须把目标机器、权限身份、修改逻辑三者绑定在同一个执行流程里。

内容的提问来源于stack exchange,提问作者hans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:03:03