Amazon EC2 Systems Manager
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

使用 AWS Tools for Windows PowerShell 的 Systems Manager Run Command 演练

以下示例说明如何使用 Tools for Windows PowerShell 查看有关命令和命令参数的信息、如何执行命令以及如何查看这些命令的状态。本演练为每个预定义的 Systems Manager 文档包含了一个示例。

重要

仅允许受信任的管理员使用本主题中所示的 Systems Manager 预配置文档。在 Systems Manager 文档中指定的命令和脚本需要管理权限才能在您的实例上运行。如果用户有权执行任何预定义的 Systems Manager 文档 (任何以 AWS 开头的文档),则该用户也具有实例的管理员访问权限。对于所有其他用户,您应创建限制性文档并与特定用户共享这些文档。有关限制对 Run Command 的访问的更多信息,请参阅为 Systems Manager 配置安全角色

配置 AWS Tools for Windows PowerShell 会话设置

在本地计算机上打开 AWS Tools for Windows PowerShell 并执行以下命令来指定凭证。您必须具有要配置的实例的管理员权限或必须已获得 IAM 中的适当权限。有关更多信息,请参阅 Systems Manager 先决条件

Copy
Set-AWSCredentials –AccessKey key_name –SecretKey key_name

执行以下命令为 PowerShell 会话设置区域。该示例使用 us-east-1 区域。目前,Run Command 在以下 Systems Manager 区域提供。

Copy
Set-DefaultAWSRegion -Region us-east-1

列出所有可用文档

此命令列出对您的账户可用的所有文档:

Copy
Get-SSMDocumentList

运行 PowerShell 命令或脚本

利用 Run Command 和 AWS-RunPowerShell 文档,您可使用远程桌面在 EC2 实例上执行任何命令或脚本,就像您已登录到该实例一样。您可以发出命令或键入本地脚本的路径以执行命令。

查看说明和可用参数

Copy
Get-SSMDocumentDescription -Name "AWS-RunPowerShellScript"

查看有关参数的更多信息

Copy
Get-SSMDocumentDescription -Name "AWS-RunPowerShellScript" | select -ExpandProperty Parameters

使用 AWS-RunPowerShellScript 文档发送命令

以下命令在两个实例上显示 C:\Users 目录的内容和 C:\ 目录的内容。

Copy
$runPSCommand=Send-SSMCommand -InstanceId @('Instance-ID', 'Instance-ID') -DocumentName AWS-RunPowerShellScript -Comment 'Demo AWS-RunPowerShellScript with two instances' -Parameter @{'commands'=@('dir C:\Users', 'dir C:\')}

获取命令请求详细信息

以下命令使用命令 ID 获取两个实例上的命令执行的状态。此示例使用上一个命令中返回的命令 ID。

Copy
Get-SSMCommand -CommandId $runPSCommand.CommandId

此示例中命令的状态可以是 Success、Pending 或 InProgress。

获取每个实例的命令信息

以下命令使用来自上一命令的命令 ID 来获取每个实例的命令执行的状态。

Copy
Get-SSMCommandInvocation -CommandId $runPSCommand.CommandId

获取带有特定实例的响应数据的命令信息

以下命令返回特定实例的原始 Send-SSMCommand 的输出。

Copy
Get-SSMCommandInvocation -CommandId $runPSCommand.CommandId -Details $true -InstanceId Instance-ID | select -ExpandProperty CommandPlugins

取消命令

以下命令取消 AWS-RunPowerShellScript 文档的 Send-SSMComand。

Copy
$cancelCommandResponse=Send-SSMCommand -InstanceId @('Instance-ID','Instance-ID') -DocumentName AWS-RunPowerShellScript -Comment 'Demo AWS-RunPowerShellScript with two instances' -Parameter @{'commands'='Start-Sleep –Seconds 120; dir C:\'} Stop-SSMCommand -CommandId $cancelCommandResponse.CommandId Get-SSMCommand -CommandId $cancelCommandResponse.CommandId

查看命令状态

以下命令检查 Cancel 命令的状态

Copy
Get-SSMCommand -CommandId $cancelCommandResponse.CommandId

使用 AWS-InstallApplication 文档安装应用程序

借助 Run Command 和 AWS-InstallApplication 文档,您可以在实例上安装、修复或卸载应用程序。该命令需要 MSI 的路径或地址。

查看说明和可用参数

Copy
Get-SSMDocumentDescription -Name "AWS-InstallApplication"

查看有关参数的更多信息

Copy
Get-SSMDocumentDescription -Name "AWS-InstallApplication" | select -ExpandProperty Parameters

使用 AWS-InstallApplication 文档发送命令

以下命令将自动在您的实例上安装 Python 版本,并将输出记录在 C: 驱动器上的本地文本文件中。

Copy
$installAppCommand=Send-SSMCommand -InstanceId Instance-ID -DocumentName AWS-InstallApplication -Parameter @{'source'='https://www.python.org/ftp/python/2.7.9/python-2.7.9.msi'; 'parameters'='/norestart /quiet /log c:\pythoninstall.txt'}

获取每个实例的命令信息

以下命令使用命令 ID 获取命令执行的状态

Copy
Get-SSMCommandInvocation -CommandId $installAppCommand.CommandId -Details $true

获取带有特定实例的响应数据的命令信息

以下命令返回 Python 安装的结果。

Copy
Get-SSMCommandInvocation -CommandId $installAppCommand.CommandId -Details $true -InstanceId Instance-ID | select -ExpandProperty CommandPlugins

使用 AWS-InstallPowerShellModule JSON 文档安装 PowerShell 模块

可使用 Run Command 在 EC2 实例上安装 PowerShell 模块。有关 PowerShell 模块的更多信息,请参阅 Windows PowerShell 模块

查看说明和可用参数

Copy
Get-SSMDocumentDescription -Name "AWS-InstallPowerShellModule"

查看有关参数的更多信息

Copy
Get-SSMDocumentDescription -Name "AWS-InstallPowerShellModule" | select -ExpandProperty Parameters

安装 PowerShell 模块

以下命令下载 EZOut.zip 文件,安装该文件,然后运行另一个命令来安装 XPS Viewer。最后,此命令的输出将上传到一个名为 demo-ssm-output-bucket 的 Amazon S3 存储桶中。

Copy
$installPSCommand=Send-SSMCommand -InstanceId Instance-ID -DocumentName AWS-InstallPowerShellModule -Parameter @{'source'='https://gallery.technet.microsoft.com/EZOut-33ae0fb7/file/110351/1/EZOut.zip';'commands'=@('Add-WindowsFeature -name XPS-Viewer -restart')} -OutputS3BucketName demo-ssm-output-bucket

获取每个实例的命令信息

以下命令使用命令 ID 获取命令执行的状态。

Copy
Get-SSMCommandInvocation -CommandId $installPSCommand.CommandId -Details $true

获取具有实例的响应数据的命令信息

以下命令返回特定命令 ID 的原始 Send-SSMCommand 的输出。

Copy
Get-SSMCommandInvocation -CommandId $installPSCommand.CommandId -Details $true | select -ExpandProperty CommandPlugins

使用 AWS-JoinDirectoryServiceDomain JSON 文档将实例加入域

借助 Run Command,您可以将实例快速加入 AWS Directory Service 域。在执行此命令前,您必须创建目录。还建议您了解有关 AWS Directory Service 的更多信息。有关更多信息,请参阅什么是 AWS Directory Service?

目前,您只能将一个示例加入域。无法从域中删除实例。

查看说明和可用参数

Copy
Get-SSMDocumentDescription -Name "AWS-JoinDirectoryServiceDomain"

查看有关参数的更多信息

Copy
Get-SSMDocumentDescription -Name "AWS-JoinDirectoryServiceDomain" | select -ExpandProperty Parameters

将实例加入域

以下命令将实例加入给定的 AWS Directory Service 域,并将任何生成的输出上传到 Amazon S3 存储桶中。

Copy
$domainJoinCommand=Send-SSMCommand -InstanceId Instance-ID -DocumentName AWS-JoinDirectoryServiceDomain -Parameter @{'directoryId'='d-9067386b64'; 'directoryName'='ssm.test.amazon.com'; 'dnsIpAddresses'=@('172.31.38.48', '172.31.55.243')} -OutputS3BucketName demo-ssm-output-bucket

获取每个实例的命令信息

以下命令使用命令 ID 获取命令执行的状态。

Copy
Get-SSMCommandInvocation -CommandId $domainJoinCommand.CommandId -Details $true

获取具有实例的响应数据的命令信息

此命令返回特定命令 ID 的原始 Send-SSMCommand 的输出。

Copy
Get-SSMCommandInvocation -CommandId $domainJoinCommand.CommandId -Details $true | select -ExpandProperty CommandPlugins

使用 AWS-ConfigureCloudWatch 文档将 Windows 指标发送到 Amazon CloudWatch

您可以将应用程序、系统、安全和 Windows 事件跟踪 (ETW) 日志中的 Windows Server 消息发送到 Amazon CloudWatch 日志。在首次启用日志记录时,Systems Manager 会发送从您开始上传该应用程序、系统、安全和 ETW 日志时起 1 分钟内生成的所有日志。其中不包括在此时间之前产生的日志。如果您禁用日志记录并在以后再次启用日志记录,则 Systems Manager 会从其上次停止的时间继续发送日志。对于任何自定义日志文件和 Internet Information Services (IIS) 日志,Systems Manager 会从头读取日志文件。此外,Systems Manager 还可以将性能计数器数据发送到 Amazon CloudWatch。

如果您先前在 EC2Config 中启用了 CloudWatch 集成,那么 Systems Manager 设置会覆盖实例本地在 C:\Program Files\Amazon\EC2ConfigService\Settings\AWS.EC2.Windows.CloudWatch.json 文件中存储的任何设置。有关使用 EC2Config 在一个实例上管理性能计数器和日志的更多信息,请参阅将性能计数器发送到 CloudWatch 并将日志发送到 CloudWatch 日志

查看说明和可用参数

Copy
Get-SSMDocumentDescription -Name "AWS-ConfigureCloudWatch"

查看有关参数的更多信息

Copy
Get-SSMDocumentDescription -Name "AWS-ConfigureCloudWatch" | select -ExpandProperty Parameters

将应用程序日志发送到 CloudWatch

以下命令配置实例并将 Windows 应用程序日志移至 CloudWatch。

Copy
$cloudWatchCommand=Send-SSMCommand -InstanceID Instance-ID -DocumentName 'AWS-ConfigureCloudWatch' -Parameter @{'properties'='{"engineConfiguration": {"PollInterval":"00:00:15", "Components":[{"Id":"ApplicationEventLog", "FullName":"AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch", "Parameters":{"LogName":"Application", "Levels":"7"}},{"Id":"CloudWatch", "FullName":"AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch", "Parameters":{"Region":"us-east-1", "LogGroup":"My-Log-Group", "LogStream":"i-1234567890abcdef0"}}], "Flows":{"Flows":["ApplicationEventLog,CloudWatch"]}}}'}

获取每个实例的命令信息

以下命令使用命令 ID 获取命令执行的状态。

Copy
Get-SSMCommandInvocation -CommandId $cloudWatchCommand.CommandId -Details $true

获取带有特定实例的响应数据的命令信息

以下命令返回 Amazon CloudWatch 配置的结果。

Copy
Get-SSMCommandInvocation -CommandId $cloudWatchCommand.CommandId -Details $true -InstanceId Instance-ID | select -ExpandProperty CommandPlugins

使用 AWS-ConfigureCloudWatch 文档将性能计数器发送到 CloudWatch

以下演示命令将性能计数器数据上传到 CloudWatch。有关更多信息,请参阅 Amazon CloudWatch 文档

Copy
$cloudWatchMetricsCommand=Send-SSMCommand -InstanceID Instance-ID -DocumentName 'AWS-ConfigureCloudWatch' -Parameter @{'properties'='{"engineConfiguration": {"PollInterval":"00:00:15", "Components":[{"Id":"PerformanceCounter", "FullName":"AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch", "Parameters":{"CategoryName":"Memory", "CounterName":"Available MBytes", "InstanceName":"", "MetricName":"AvailableMemory", "Unit":"Megabytes","DimensionName":"", "DimensionValue":""}},{"Id":"CloudWatch", "FullName":"AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch", "Parameters":{"AccessKey":"", "SecretKey":"","Region":"us-east-1", "NameSpace":"Windows-Default"}}], "Flows":{"Flows":["PerformanceCounter,CloudWatch"]}}}'}

使用 AWS-ConfigureWindowsUpdate 文档启用/禁用 Windows 自动更新

借助 Run Command 和 AWS-ConfigureWindowsUpdate 文档,可以在 Windows 实例上启用或禁用自动 Windows 更新。此命令将 Windows 更新代理配置为在您指定的日期和时间下载并安装 Windows 更新。如果更新需要重启,计算机将在安装更新 15 分钟后自动重启。利用此命令,您还可以将 Windows 更新配置为检查更新但不安装更新。AWS-ConfigureWindowsUpdate 文档可与 Windows Server 2008、2008 R2、2012 和 2012 R2 兼容。

查看说明和可用参数

Copy
Get-SSMDocumentDescription –Name "AWS-ConfigureWindowsUpdate"

查看有关参数的更多信息

Copy
Get-SSMDocumentDescription -Name "AWS-ConfigureWindowsUpdate" | select -ExpandProperty Parameters

启用 Windows 自动更新

以下命令将 Windows Update 配置为在每天晚上 10:00 自动下载和安装更新。

Copy
$configureWindowsUpdateCommand = Send-SSMCommand -InstanceId Instance-ID -DocumentName 'AWS-ConfigureWindowsUpdate' -Parameters @{'updateLevel'='InstallUpdatesAutomatically'; 'scheduledInstallDay'='Daily'; 'scheduledInstallTime'='22:00'}

查看用于启用 Windows 自动更新的命令状态

以下命令使用命令 ID 获取用于启用 Windows 自动更新的命令执行的状态。

Copy
Get-SSMCommandInvocation -Details $true -CommandId $configureWindowsUpdateCommand.CommandId | select -ExpandProperty CommandPlugins

禁用 Windows 自动更新

以下命令降低 Windows Update 通知级别,使系统检查更新但不自动更新实例。

Copy
$configureWindowsUpdateCommand = Send-SSMCommand -InstanceId Instance-ID -DocumentName 'AWS-ConfigureWindowsUpdate' -Parameters @{'updateLevel'='NeverCheckForUpdates'}

查看用于禁用 Windows 自动更新的命令状态

以下命令使用命令 ID 获取用于禁用 Windows 自动更新的命令执行的状态。

Copy
Get-SSMCommandInvocation -Details $true -CommandId $configureWindowsUpdateCommand.CommandId | select -ExpandProperty CommandPlugins

使用 AWS-UpdateEC2Config 文档更新 EC2Config

借助 Run Command 和 AWS-EC2ConfigUpdate 文档,可以更新正在 Windows 实例上运行的 EC2Config 服务。此命令可将 EC2Config 服务更新为最新版本或您指定的版本。

查看说明和可用参数

Copy
Get-SSMDocumentDescription -Name "AWS-UpdateEC2Config"

查看有关参数的更多信息

Copy
Get-SSMDocumentDescription -Name "AWS-UpdateEC2Config" | select -ExpandProperty Parameters

将 EC2Config 更新为最新版本

Copy
Send-SSMCommand -InstanceId Instance-ID -DocumentName "AWS-UpdateEC2Config"

获取具有实例的响应数据的命令信息

此命令从上一个 Send-SSMCommand 返回指定命令的输出:

Copy
Get-SSMCommandInvocation -CommandId ID -Details $true -InstanceId Instance-ID | select -ExpandProperty CommandPlugins

将 EC2Config 更新为特定版本

以下命令将 EC2Config 降级到较旧版本:

Copy
Send-SSMCommand -InstanceId Instance-ID -DocumentName "AWS-UpdateEC2Config" -Parameter @{'version'='3.8.354'; 'allowDowngrade'='true'}

使用 Run Command 管理 Windows 更新

Run Command 包含三个文档,可帮助您管理 Amazon EC2 Windows 实例的更新。

  • AWS-FindWindowsUpdates - 扫描实例并确定缺少的更新。

  • AWS-InstallMissingWindowsUpdates - 在 EC2 实例上安装缺少的更新。

  • AWS-InstallSpecificUpdates - 安装特定更新。

以下示例演示如何执行指定的 Windows Update 管理任务。

搜索所有缺少的 Windows 更新

Copy
Send-SSMCommand -InstanceId Instance-ID -DocumentName 'AWS-FindWindowsUpdates' -Parameters @{'UpdateLevel'='All'}

安装特定的 Windows 更新

Copy
Send-SSMCommand -InstanceId Instance-ID -DocumentName 'AWS-InstallSpecificWindowsUpdates' -Parameters @{'KbArticleIds'='123456,KB567890,987654'}

安装缺少的重要 Windows 更新

Copy
Send-SSMCommand -InstanceId Instance-ID -DocumentName 'AWS-InstallMissingWindowsUpdates' -Parameters @{'UpdateLevel'='Important'}

安装缺少的 Windows 更新 (带特定排除内容)

Copy
Send-SSMCommand -InstanceId Instance-ID -DocumentName 'AWS-InstallMissingWindowsUpdates' -Parameters @{'UpdateLevel'='All';'ExcludeKbArticleIds'='KB567890,987654'}