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

PowerShell远程重连Tenable Nessus Agent的脚本问题排查

SCCM执行Nessus Agent重链接脚本失效排查

核心问题点

你当前的脚本存在3个直接导致SCCM远程执行失败的问题:

  • 多余嵌套Invoke-Command:SCCM的脚本运行机制是直接在目标设备本地执行,不需要额外调用远程命令封装,这层嵌套会改变进程执行的上下文环境,导致权限继承异常。
  • 未等待命令执行完成:Start-Process加-Passthru参数仅会返回进程对象,不会阻塞脚本等待nessuscli.exe执行完毕。本地手动运行时PowerShell会话不会立即关闭,命令可以跑完;但SCCM执行完脚本代码后会立刻销毁运行会话,未执行完的nessuscli子进程会被直接终止,导致链接操作中断。
  • 参数传递格式错误:你把所有agent link的参数拼为单个字符串传给-ArgumentList,在非交互的SYSTEM账户上下文下,nessuscli会出现参数解析失败的问题,且脚本没有捕获标准输出、错误流和退出码,执行失败也无迹可查。

额外说明:SCCM默认以本地SYSTEM账户执行脚本,这个权限本身足够操作Nessus Agent配置,不需要额外提权,问题完全出在脚本逻辑上。

修正后可直接使用的SCCM脚本

# 定义nessuscli路径和链接参数
$nessusCliPath = "C:\Program Files\Tenable\Nessus Agent\nessuscli.exe"
$linkArgs = @(
    "agent", "link",
    "--key=<替换为你的实际License Key>",
    "--host=<替换为Tenable管理门户域名,不要带http/https前缀>",
    "--port=<替换为实际端口,默认8834>"
)
# 定义日志输出路径,方便排查执行失败问题
$stdoutLog = "C:\Windows\Temp\NessusLink_stdout.log"
$stderrLog = "C:\Windows\Temp\NessusLink_stderr.log"

# 执行链接命令,等待执行完成并捕获输出和退出码
$process = Start-Process -FilePath $nessusCliPath -ArgumentList $linkArgs -NoNewWindow -Wait -PassThru -RedirectStandardOutput $stdoutLog -RedirectStandardError $stderrLog

# 非0退出码代表执行失败,抛出错误让SCCM识别执行状态
if ($process.ExitCode -ne 0) {
    $errMsg = Get-Content $stderrLog -Raw
    throw "Nessus Agent链接失败,退出码:$($process.ExitCode),错误信息:$errMsg"
}

部署校验要点

  • SCCM脚本运行上下文选择本地系统账户,不要配置为以当前登录用户身份运行
  • 执行前确认目标设备上nessuscli.exe路径和脚本中定义的一致,32位/64位系统默认路径均为上述Program Files路径,不存在Program Files (x86)的安装情况
  • 若目标设备之前存在残留的错误链接配置,可以在执行link命令前加一行Start-Process $nessusCliPath -ArgumentList @("agent", "unlink") -NoNewWindow -Wait先清除旧配置再重新链接
  • 脚本执行后可以到目标设备检查C:\Windows\Temp\下的日志文件,确认链接结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:24:24