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

PowerShell脚本本地运行正常但SolarWinds SAM组件执行失败问题

PowerShell脚本在SolarWinds SAM中执行异常问题排查

问题根因定位

1. 脚本本身存在的逻辑缺陷

  • 路径拼接错误:代码中硬编码拼接路径时未补全路径分隔符,例如"path1" + $_.Name会生成C:\test文件名.doc这类错误路径,若本地测试时path1末尾刚好带反斜杠可正常运行,但SAM执行时路径参数不带反斜杠就会失效,建议统一用Join-Path命令拼接路径避免该问题。
  • 功能逻辑不符:需求为文件复制后移动到Path2,但代码中所有目标路径均写死为path1,未用到目标路径变量,属于硬编码错误。
  • 无错误捕获逻辑:代码未添加异常捕获,就算Copy-Item因权限问题执行失败也不会抛出提示,仅会让count计数为0,容易误判为未找到匹配文件。

2. Local Host模式返回0文件的原因

  • 权限不足:SolarWinds SAM本地执行模式默认使用SolarWinds Agent服务的运行账号,不是本地登录的用户账号,该账号如果没有path1路径的读取权限,Get-ChildItem会直接返回空结果,不会抛出权限报错,表现为找不到文件。
  • 相对路径解析错误:如果代码中的path1使用相对路径,SAM执行脚本的工作目录是Agent的安装目录,不是本地测试时的脚本目录,相对路径会解析到错误位置,找不到对应文件夹。
  • 位阶环境差异:如果SolarWinds Agent是32位版本,调用的是32位PowerShell,访问C:\Program Files会自动重定向到C:\Program Files (x86),若path1在64位Program Files目录下就会无法匹配到路径。

3. Remote模式返回Down状态的原因

  • WinRM配置异常:SAM远程执行模式依赖目标机器的WinRM服务,目标机器未开启WinRM、未配置允许SolarWinds服务器IP访问、防火墙未开放5985(HTTP)/5986(HTTPS)端口,都会导致远程调用直接失败。
  • 远程认证失败:配置的远程执行账号没有目标机器的本地管理员权限,或账号密码错误、域信任异常,都会导致认证不通过,无有效返回。
  • 执行策略限制:目标机器的PowerShell执行策略设置为Restricted,不允许运行未签名脚本,远程调用时会直接被拦截。

修复方案

优化后脚本

# 填写绝对路径,禁止使用相对路径
$sourcePath = 'C:\替换为实际的path1绝对路径'
$targetPath = 'C:\替换为实际的path2绝对路径'
$filter = '*.doc'
$msg = ''
$count = 0
$stamp = Get-Date -Format 'yyyy-MM-dd_HH-mm'

# 前置校验路径有效性和权限
if (-not (Test-Path -Path $sourcePath -PathType Container)) {
    Write-Host "Statistic.FileMonitor: 0"
    Write-Host "Message.FileMonitor: 源路径不存在或无权限访问: $sourcePath"
    exit 0
}

Get-ChildItem -Path $sourcePath -Filter $filter -File | ForEach-Object {
    $count++
    $msg += ",$($_.FullName)"
    $newFileName = "$($_.BaseName)_$stamp$($_.Extension)"
    $fullTargetPath = Join-Path -Path $targetPath -ChildPath $newFileName
    # 添加异常捕获,暴露执行错误
    try {
        Copy-Item -Path $_.FullName -Destination $fullTargetPath -Force -ErrorAction Stop
    }
    catch {
        $msg += " [复制失败: $($_.Exception.Message)]"
    }
}

if($count -gt 0)
{
    Write-Host "Statistic.FileMonitor: $count"
    Write-Host "Message.FileMonitor: $count 个文件已处理,文件列表: $msg"
    exit 0
}
else
{
    Write-Host "Statistic.FileMonitor: 0"
    Write-Host "Message.FileMonitor: 未找到匹配的doc文件"
    exit 0
}

配套配置调整

  • 给SolarWinds Agent服务账号/远程执行账号授予源路径的读取权限、目标路径的写入权限
  • 远程模式使用前先在SolarWinds服务器上执行Test-WSMan 目标机器IP,确认WinRM连通性正常
  • 目标机器执行Set-ExecutionPolicy RemoteSigned -Force,调整PowerShell执行策略允许运行本地脚本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 03:15:02