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

如何在Register-SSMTaskWithMaintenanceWindow中嵌入PowerShell代码?

如何在SSM维护窗口任务中嵌入PowerShell代码

我来帮你搞定这个问题——其实用Register-SSMTaskWithMaintenanceWindow注册任务时,嵌入PowerShell代码的方式比你尝试的更直接,不需要手动实例化MaintenanceWindowTaskParameterValueExpression,直接用哈希表就能搞定。下面分两种常用方案给你演示:

方案1:直接嵌入PowerShell代码(适合短脚本/单行命令)

你可以直接把PowerShell代码作为Commands参数的值(字符串数组)传给任务,SSM会在目标实例上执行这些代码。如果是多行代码,用数组元素拆分或者Here-String都可以:

示例1:拆分多行代码为数组元素

# 预先定义你的变量
$newtarget = "你的窗口目标ID"
$newmw = "你的维护窗口ID"

# 构造任务参数:直接写PowerShell代码
$taskParams = @{
    Commands = @(
        "Write-Host '开始执行维护任务'"
        # 这里写你的业务代码,比如重启服务、清理文件等
        "Get-Service -Name 'wuauserv' | Restart-Service"
        "Write-Host 'Windows更新服务已完成重启'"
    )
}

# 注册维护窗口任务
$newtask = Register-SSMTaskWithMaintenanceWindow `
    -WindowId $newmw `
    -ServiceRoleArn "arn:aws:iam::xxxxxx:role/你的SSM服务角色ARN" `
    -MaxConcurrency 1 `
    -MaxError 1 `
    -TaskArn "AWS-RunPowerShellScript" `
    -Target @{ Key="WindowTargetIds"; Values=$newtarget } `
    -TaskType "RUN_COMMAND" `
    -Priority 10 `
    -Parameters $taskParams

示例2:用Here-String写复杂多行代码

如果代码逻辑复杂,用Here-String可以避免频繁拆分数组,注意要转义代码里的$符号,防止PowerShell提前解析变量:

$psScript = @"
Write-Host '开始执行复杂维护任务'
# 转义$符号,避免被本地PowerShell解析
`$diskUsage = Get-PSDrive -Name C
if (`$diskUsage.Used / `$diskUsage.Free * 100 -gt 80) {
    Write-Host 'C盘使用率超过80%,开始清理临时文件'
    Remove-Item -Path 'C:\Temp\*' -Recurse -Force -ErrorAction SilentlyContinue
}
Write-Host '维护任务执行完成'
"@

$taskParams = @{
    Commands = @($psScript)
}

# 注册任务的代码和上面一致,这里省略重复部分

方案2:执行外部PS1文件(适合长脚本/版本化的代码)

如果你的脚本已经保存在实例本地或者S3存储桶里,可以通过Commands调用PowerShell执行这个文件:

场景A:执行实例本地的PS1文件

$taskParams = @{
    Commands = @("powershell.exe -ExecutionPolicy Bypass -File 'C:\Scripts\你的维护脚本.ps1'")
}

场景B:从S3下载并执行PS1文件

如果脚本存在S3,先下载到实例临时目录再执行:

$taskParams = @{
    Commands = @(
        "Invoke-WebRequest -Uri 'https://s3.amazonaws.com/你的存储桶名/Scripts/维护脚本.ps1' -OutFile 'C:\Temp\维护脚本.ps1'"
        "powershell.exe -ExecutionPolicy Bypass -File 'C:\Temp\维护脚本.ps1'"
    )
}

关键注意点

  • 不需要手动创建MaintenanceWindowTaskParameterValueExpression对象:AWS PowerShell模块会自动把你传入的哈希表转换为对应的API模型参数,简化了代码。
  • 执行策略:如果实例的PowerShell执行策略限制较严,记得加上-ExecutionPolicy Bypass参数,避免脚本被阻止执行。
  • 权限:确保SSM服务角色有足够权限访问S3(如果用S3下载脚本),同时目标实例的SSM代理有执行脚本的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:26:29