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
相关产品推荐
相关产品推荐

