演练:将 AWS Tools for Windows PowerShell 与 Run Command 结合使用 - AWS Systems Manager

演练:将 AWS Tools for Windows PowerShell 与 Run Command 结合使用

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

重要

仅允许受信任的管理员使用本主题中所示的 Systems Manager 预配置文档。在 Systems Manager 文档中指定的命令和脚本需要管理权限才能在您的托管式节点上运行。如果用户有权运行任何预定义的 Systems Manager 文档(任何以 AWS 开头的文档),则该用户也具有节点的管理员访问权限。对于所有其他用户,您应创建限制性文档并与特定用户共享这些文档。

配置 AWS Tools for Windows PowerShell 会话设置

指定您的凭证

在本地计算机上打开 Tools for Windows PowerShell 并运行以下命令以指定您的凭证。您必须具有要配置的托管式节点的管理员权限,或必须已获得 AWS Identity and Access Management (IAM) 中的适当权限。有关更多信息,请参阅 为 AWS Systems Manager 设置托管节点

Set-AWSCredentials –AccessKey key-name –SecretKey key-name
设置默认 AWS 区域

运行以下命令为 PowerShell 会话设置区域。此示例使用美国东部(俄亥俄州)区域(us-east-2)。Run Command 在《Amazon Web Services 一般参考》Systems Manager service endpoints 列出的 AWS 区域 中可用。

Set-DefaultAWSRegion ` -Region us-east-2

列出所有可用文档

此命令将列出您的账户可用的所有文档。

Get-SSMDocumentList

运行 PowerShell 命令或脚本

利用 Run Command 和 AWS-RunPowerShell 文档,您可以在托管式节点上运行任何命令或脚本,就像您已在本地登录一样。您可以发出命令或输入本地脚本的路径以运行命令。

注意

有关在使用 Run Command 调用脚本时重启托管式节点的信息,请参阅 运行命令时处理重启问题

查看说明和可用参数

Get-SSMDocumentDescription ` -Name "AWS-RunPowerShellScript"

查看有关参数的更多信息

Get-SSMDocumentDescription ` -Name "AWS-RunPowerShellScript" | Select -ExpandProperty Parameters

使用 AWS-RunPowerShellScript 文档发送命令

以下命令在两个托管式节点上显示 "C:\Users" 目录的内容和 "C:\" 目录的内容。

$runPSCommand = Send-SSMCommand ` -InstanceIds @("instance-ID-1", "instance-ID-2") ` -DocumentName "AWS-RunPowerShellScript" ` -Comment "Demo AWS-RunPowerShellScript with two instances" ` -Parameter @{'commands'=@('dir C:\Users', 'dir C:\')}
获取命令请求详细信息

以下命令使用 CommandId 获取两个托管式节点上的命令执行状态。此示例使用上一个命令中返回的 CommandId

Get-SSMCommand ` -CommandId $runPSCommand.CommandId

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

获取每个托管式节点的命令信息

以下命令使用上一命令中的 CommandId 来获取每个托管式节点的命令执行状态。

Get-SSMCommandInvocation ` -CommandId $runPSCommand.CommandId
获取包含特定托管式节点的响应数据的命令信息

以下命令会返回特定托管式节点的原始 Send-SSMCommand 的输出。

Get-SSMCommandInvocation ` -CommandId $runPSCommand.CommandId ` -Details $true ` -InstanceId instance-ID | Select -ExpandProperty CommandPlugins

取消命令

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

$cancelCommand = Send-SSMCommand ` -InstanceIds @("instance-ID-1","instance-ID-2") ` -DocumentName "AWS-RunPowerShellScript" ` -Comment "Demo AWS-RunPowerShellScript with two instances" ` -Parameter @{'commands'='Start-Sleep –Seconds 120; dir C:\'} Stop-SSMCommand -CommandId $cancelCommand.CommandId
查看命令状态

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

Get-SSMCommand ` -CommandId $cancelCommand.CommandId

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

利用 Run Command 和 AWS-InstallApplication 文档,您可以在托管式节点上安装、修复或卸载应用程序。该命令需要 MSI 的路径或地址。

注意

有关在使用 Run Command 调用脚本时重启托管式节点的信息,请参阅 运行命令时处理重启问题

查看说明和可用参数

Get-SSMDocumentDescription ` -Name "AWS-InstallApplication"

查看有关参数的更多信息

Get-SSMDocumentDescription ` -Name "AWS-InstallApplication" | Select -ExpandProperty Parameters

使用 AWS-InstallApplication 文档发送命令

以下命令将以无人值守的模式在托管式节点上安装 Python 版本,并将输出记录在 C: 驱动器上的本地文本文件中。

$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'}
获取每个托管式节点的命令信息

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

Get-SSMCommandInvocation ` -CommandId $installAppCommand.CommandId ` -Details $true
获取包含特定托管式节点的响应数据的命令信息

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

Get-SSMCommandInvocation ` -CommandId $installAppCommand.CommandId ` -Details $true ` -InstanceId instance-ID | Select -ExpandProperty CommandPlugins

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

您可使用 Run Command 在托管式节点上安装 PowerShell 模块。有关 PowerShell 模块的更多信息,请参阅 Windows PowerShell 模块

查看说明和可用参数

Get-SSMDocumentDescription ` -Name "AWS-InstallPowerShellModule"

查看有关参数的更多信息

Get-SSMDocumentDescription ` -Name "AWS-InstallPowerShellModule" | Select -ExpandProperty Parameters

安装 PowerShell 模块

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

$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 amzn-s3-demo-bucket
获取每个托管式节点的命令信息

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

Get-SSMCommandInvocation ` -CommandId $installPSCommand.CommandId ` -Details $true
获取包含托管式节点的响应数据的命令信息

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

Get-SSMCommandInvocation ` -CommandId $installPSCommand.CommandId ` -Details $true | Select -ExpandProperty CommandPlugins

使用 AWS-JoinDirectoryServiceDomain JSON 文档将托管式节点加入域中

借助 Run Command,您可以将托管式节点快速加入 AWS Directory Service 域中。执行此命令前,请创建目录。还建议您了解 AWS Directory Service 的更多信息。有关更多信息,请参阅 AWS Directory Service 管理指南

您只能将托管式节点加入域中,无法从域中删除节点。

注意

有关在使用 Run Command 调用脚本时托管式节点的信息,请参阅 运行命令时处理重启问题

查看说明和可用参数

Get-SSMDocumentDescription ` -Name "AWS-JoinDirectoryServiceDomain"

查看有关参数的更多信息

Get-SSMDocumentDescription ` -Name "AWS-JoinDirectoryServiceDomain" | Select -ExpandProperty Parameters

将托管式节点加入域中

以下命令可将托管式节点加入给定的 AWS Directory Service 域中,并将生成的任何输出上传至示例 Amazon Simple Storage Service(Amazon S3)存储桶。

$domainJoinCommand = Send-SSMCommand ` -InstanceId instance-ID ` -DocumentName "AWS-JoinDirectoryServiceDomain" ` -Parameter @{'directoryId'='d-example01'; 'directoryName'='ssm.example.com'; 'dnsIpAddresses'=@('192.168.10.195', '192.168.20.97')} ` -OutputS3BucketName amzn-s3-demo-bucket
获取每个托管式节点的命令信息

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

Get-SSMCommandInvocation ` -CommandId $domainJoinCommand.CommandId ` -Details $true
获取包含托管式节点的响应数据的命令信息

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

Get-SSMCommandInvocation ` -CommandId $domainJoinCommand.CommandId ` -Details $true | Select -ExpandProperty CommandPlugins

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

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

如果先前在 EC2Config 中启用了 CloudWatch 集成,则 Systems Manager 设置会覆盖 C:\Program Files\Amazon\EC2ConfigService\Settings\AWS.EC2.Windows.CloudWatch.json 文件中本地存储在托管式节点上的任何设置。有关使用 EC2Config 管理单个托管式节点上的性能计数器和日志的更多信息,请参阅 Amazon CloudWatch 用户指南中的使用 CloudWatch 代理从 Amazon EC2 实例和本地服务器收集指标和日志

查看说明和可用参数

Get-SSMDocumentDescription ` -Name "AWS-ConfigureCloudWatch"

查看有关参数的更多信息

Get-SSMDocumentDescription ` -Name "AWS-ConfigureCloudWatch" | Select -ExpandProperty Parameters

将应用程序日志发送到 CloudWatch

以下命令可配置托管式节点并将 Windows 应用程序日志移至 CloudWatch。

$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":"region", "LogGroup":"my-log-group", "LogStream":"instance-id"}}], "Flows":{"Flows":["ApplicationEventLog,CloudWatch"]}}}'}
获取每个托管式节点的命令信息

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

Get-SSMCommandInvocation ` -CommandId $cloudWatchCommand.CommandId ` -Details $true
获取包含特定托管式节点的响应数据的命令信息

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

Get-SSMCommandInvocation ` -CommandId $cloudWatchCommand.CommandId ` -Details $true ` -InstanceId instance-ID | Select -ExpandProperty CommandPlugins

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

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

$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":"region", "NameSpace":"Windows-Default"}}], "Flows":{"Flows":["PerformanceCounter,CloudWatch"]}}}'}

使用 AWS-UpdateEC2Config 文档更新 EC2Config

利用 Run Command 和 AWS-EC2ConfigUpdate 文档,您可以更新在 Windows Server 托管式节点上运行的 EC2Config 服务。此命令可将 EC2Config 服务更新为最新版本或您指定的版本。

查看说明和可用参数

Get-SSMDocumentDescription ` -Name "AWS-UpdateEC2Config"

查看有关参数的更多信息

Get-SSMDocumentDescription ` -Name "AWS-UpdateEC2Config" | Select -ExpandProperty Parameters

将 EC2Config 更新为最新版本

$ec2ConfigCommand = Send-SSMCommand ` -InstanceId instance-ID ` -DocumentName "AWS-UpdateEC2Config"
获取包含托管式节点的响应数据的命令信息

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

Get-SSMCommandInvocation ` -CommandId $ec2ConfigCommand.CommandId ` -Details $true ` -InstanceId instance-ID | Select -ExpandProperty CommandPlugins

将 EC2Config 更新为特定版本

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

Send-SSMCommand ` -InstanceId instance-ID ` -DocumentName "AWS-UpdateEC2Config" ` -Parameter @{'version'='4.9.3519'; 'allowDowngrade'='true'}

使用 AWS-ConfigureWindowsUpdate 文档启用或关闭 Windows 自动更新

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

查看说明和可用参数

Get-SSMDocumentDescription ` –Name "AWS-ConfigureWindowsUpdate"

查看有关参数的更多信息

Get-SSMDocumentDescription ` -Name "AWS-ConfigureWindowsUpdate" | Select -ExpandProperty Parameters

启用 Windows 自动更新

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

$configureWindowsUpdateCommand = Send-SSMCommand ` -InstanceId instance-ID ` -DocumentName "AWS-ConfigureWindowsUpdate" ` -Parameters @{'updateLevel'='InstallUpdatesAutomatically'; 'scheduledInstallDay'='Daily'; 'scheduledInstallTime'='22:00'}
查看用于允许 Windows 自动更新的命令状态

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

Get-SSMCommandInvocation ` -Details $true ` -CommandId $configureWindowsUpdateCommand.CommandId | Select -ExpandProperty CommandPlugins

关闭 Windows 自动更新

以下命令可降低 Windows 更新通知级别,使系统检查更新但不自动更新托管式节点。

$configureWindowsUpdateCommand = Send-SSMCommand ` -InstanceId instance-ID ` -DocumentName "AWS-ConfigureWindowsUpdate" ` -Parameters @{'updateLevel'='NeverCheckForUpdates'}
查看用于关闭 Windows 自动更新的命令状态

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

Get-SSMCommandInvocation ` -Details $true ` -CommandId $configureWindowsUpdateCommand.CommandId | Select -ExpandProperty CommandPlugins

使用 Run Command 管理 Windows 更新

使用 Run Command 和 AWS-InstallWindowsUpdates 文档,您可以管理 Windows Server 托管式节点的更新。此命令在托管式节点上扫描或安装缺少的更新,并且可以选择在安装后重启。还可以为在您的环境中安装的更新指定相应的分类和严重性级别。

注意

有关在使用 Run Command 调用脚本时重启托管式节点的信息,请参阅 运行命令时处理重启问题

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

Send-SSMCommand ` -InstanceId instance-ID ` -DocumentName "AWS-InstallWindowsUpdates" ` -Parameters @{'Action'='Scan'}

安装特定的 Windows 更新

Send-SSMCommand ` -InstanceId instance-ID ` -DocumentName "AWS-InstallWindowsUpdates" ` -Parameters @{'Action'='Install';'IncludeKbs'='kb-ID-1,kb-ID-2,kb-ID-3';'AllowReboot'='True'}

安装缺少的重要 Windows 更新

Send-SSMCommand ` -InstanceId instance-ID ` -DocumentName "AWS-InstallWindowsUpdates" ` -Parameters @{'Action'='Install';'SeverityLevels'='Important';'AllowReboot'='True'}

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

Send-SSMCommand ` -InstanceId instance-ID ` -DocumentName "AWS-InstallWindowsUpdates" ` -Parameters @{'Action'='Install';'ExcludeKbs'='kb-ID-1,kb-ID-2';'AllowReboot'='True'}