【问题标题】:How to pass the AWS SSM output with powershell script如何使用 powershell 脚本传递 AWS SSM 输出
【发布时间】:2020-07-21 20:29:20
【问题描述】:

我正在尝试为 Windows 更新创建报告,因为上次修补服务器时我也在尝试将 aws ssm 与脚本结合起来

即我使用 aws ssm describe 命令获取实例详细信息并将其存储在一个变量中,然后我将它传递给一个 for 循环并尝试获取服务器的最后一个补丁日期,但它返回空值,请帮助我实现这一点

输出是

pscomutername HotFixID InstalledBy InstalledOn

我的代码是

 $list= (aws ssm describe-instance-patch-states-for-patch-group --patch-group "DEV" --query "Reservations[*].Instances[*].Tags[?Key=='Name'].Value" --profile "xxxxxx" --region "us-west-2" --output text)
    foreach ($server in $list)
    { 
    {Get-CimInstance -Class win32_quickfixengineering  |  
    Where-Object InstalledOn -gt (Get-Date).AddDays(-30)} |  
    Select-Object PSComputerName,HotFixID,InstalledBy,InstalledOn | Sort-Object PSComputerName
    }

【问题讨论】:

  • 您似乎没有将 $server 变量传递给 Get-CimInstance 所以它只是在本地运行?此外,请确保正确填充 $server 变量,因为它将包含 aws 命令完整返回的任何内容。在您的示例中,您在 foreach 之后有一个重复的左括号。这只是一个错字吗?
  • @JonC 是的,它填充了服务器名称的输出并将值存储在 $list 中,并且括号不是拼写错误,如果您看到 Get-CimInstance 我有一个左括号和右括号

标签: powershell ssm


【解决方案1】:

您需要将 $server 变量传递给 Get-CimInstance 的 -ComputerName 参数,以使其在远程服务器上运行。这些括号会引起问题,因为它们会创建需要手动调用的 CodeBlock,因此从未实际调用 Get-CimInstance。我怀疑你真正想要的是这样的:

$list= (aws ssm describe-instance-patch-states-for-patch-group --patch-group "DEV" --query "Reservations[*].Instances[*].Tags[?Key=='Name'].Value" --profile "xxxxxx" --region "us-west-2" --output text)
foreach ($server in $list)
{ 
  Get-CimInstance -Class win32_quickfixengineering -ComputerName $server |  
    Where-Object InstalledOn -gt (Get-Date).AddDays(-30) |
    Select-Object PSComputerName,HotFixID,InstalledBy,InstalledOn | Sort-Object PSComputerName
}

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多