

• AWS Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 演练：将 AWS Tools for Windows PowerShell 与 Run Command 结合使用
<a name="walkthrough-powershell"></a>

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

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

**Topics**
+ [配置 AWS Tools for Windows PowerShell 会话设置](#walkthrough-powershell-settings)
+ [列出所有可用文档](#walkthrough-powershell-all-documents)
+ [运行 PowerShell 命令或脚本](#walkthrough-powershell-run-script)
+ [使用 `AWS-InstallApplication` 文档安装应用程序](#walkthrough-powershell-install-application)
+ [使用 `AWS-InstallPowerShellModule` JSON 文档安装 PowerShell 模块](#walkthrough-powershell-install-module)
+ [使用 `AWS-JoinDirectoryServiceDomain` JSON 文档将托管式节点加入域中](#walkthrough-powershell-domain-join)
+ [使用 `AWS-ConfigureCloudWatch` 文档将 Windows 指标发送到 Amazon CloudWatch Logs](#walkthrough-powershell-windows-metrics)
+ [使用 `AWS-ConfigureWindowsUpdate` 文档启用或关闭 Windows 自动更新](#walkthrough-powershell-enable-windows-update)
+ [使用 Run Command 管理 Windows 更新](#walkthough-powershell-windows-updates)

## 配置 AWS Tools for Windows PowerShell 会话设置
<a name="walkthrough-powershell-settings"></a>

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

```
Set-AWSCredentials –AccessKey key-name –SecretKey key-name
```

**设置默认 AWS 区域**  
运行以下命令为 PowerShell 会话设置区域。此示例使用美国东部（俄亥俄州）区域（us-east-2）。Run Command 在《Amazon Web Services 一般参考》**的 [Systems Manager service endpoints](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) 列出的 AWS 区域 中可用。

```
Set-DefaultAWSRegion `
    -Region us-east-2
```

## 列出所有可用文档
<a name="walkthrough-powershell-all-documents"></a>

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

```
Get-SSMDocumentList
```

## 运行 PowerShell 命令或脚本
<a name="walkthrough-powershell-run-script"></a>

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

**注意**  
有关在使用 Run Command 调用脚本时重启托管式节点的信息，请参阅 [运行命令时处理重启问题](send-commands-reboot.md)。

**查看说明和可用参数**

```
Get-SSMDocumentDescription `
    -Name "AWS-RunPowerShellScript"
```

**查看有关参数的更多信息**

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

### 使用 `AWS-RunPowerShellScript` 文档发送命令
<a name="walkthrough-powershell-run-script-send-command-aws-runpowershellscript"></a>

以下命令在两个托管式节点上显示 `"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
```

### 取消命令
<a name="walkthrough-powershell-run-script-cancel-command"></a>

以下命令取消 `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` 文档安装应用程序
<a name="walkthrough-powershell-install-application"></a>

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

**注意**  
有关在使用 Run Command 调用脚本时重启托管式节点的信息，请参阅 [运行命令时处理重启问题](send-commands-reboot.md)。

**查看说明和可用参数**

```
Get-SSMDocumentDescription `
    -Name "AWS-InstallApplication"
```

**查看有关参数的更多信息**

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

### 使用 `AWS-InstallApplication` 文档发送命令
<a name="walkthrough-powershell-install-application-send-command-aws-installapplication"></a>

以下命令将以无人值守的模式在托管式节点上安装 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 模块
<a name="walkthrough-powershell-install-module"></a>

您可使用 Run Command 在托管式节点上安装 PowerShell 模块。有关 PowerShell 模块的更多信息，请参阅 [Windows PowerShell 模块](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_modules?view=powershell-6)。

**查看说明和可用参数**

```
Get-SSMDocumentDescription `
    -Name "AWS-InstallPowerShellModule"
```

**查看有关参数的更多信息**

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

### 安装 PowerShell 模块
<a name="walkthrough-powershell-install-module-install"></a>

以下命令下载 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 文档将托管式节点加入域中
<a name="walkthrough-powershell-domain-join"></a>

借助 Run Command，您可以将托管式节点快速加入 AWS Directory Service 域中。执行此命令前，请[创建目录](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started_create_directory.html)。还建议您了解 Directory Service 的更多信息。有关更多信息，请参阅 [AWS Directory Service 管理指南](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/)。

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

**注意**  
有关在使用 Run Command 调用脚本时托管式节点的信息，请参阅 [运行命令时处理重启问题](send-commands-reboot.md)。

**查看说明和可用参数**

```
Get-SSMDocumentDescription `
    -Name "AWS-JoinDirectoryServiceDomain"
```

**查看有关参数的更多信息**

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

### 将托管式节点加入域中
<a name="walkthrough-powershell-domain-join-instance"></a>

以下命令可将托管式节点加入给定的 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
<a name="walkthrough-powershell-windows-metrics"></a>

您可以将应用程序、系统、安全和 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 实例和本地服务器收集指标和日志](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)。

**查看说明和可用参数**

```
Get-SSMDocumentDescription `
    -Name "AWS-ConfigureCloudWatch"
```

**查看有关参数的更多信息**

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

### 将应用程序日志发送到 CloudWatch
<a name="walkthrough-powershell-windows-metrics-send-logs-cloudwatch"></a>

以下命令可配置托管式节点并将 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
<a name="walkthrough-powershell-windows-metrics-send-performance-counters-cloudwatch"></a>

以下演示命令将性能计数器数据上传到 CloudWatch。有关更多信息，请参阅《*[Amazon CloudWatch 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)*》。

```
$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-ConfigureWindowsUpdate` 文档启用或关闭 Windows 自动更新
<a name="walkthrough-powershell-enable-windows-update"></a>

利用 Run Command 和 `AWS-ConfigureWindowsUpdate` 文档，您可以在 Windows Server 托管式节点上启用或关闭 Windows 自动更新。此命令将 Windows 更新代理配置为在您指定的日期和时间下载并安装 Windows 更新。如果更新需要重启，托管式节点将在安装更新 15 分钟后自动重启。利用此命令，您还可以将 Windows 更新配置为检查更新但不安装更新。`AWS-ConfigureWindowsUpdate` 文档在 Windows Server 2012 及更高版本上获得官方支持。

**查看说明和可用参数**

```
Get-SSMDocumentDescription `
    –Name "AWS-ConfigureWindowsUpdate"
```

**查看有关参数的更多信息**

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

### 启用 Windows 自动更新
<a name="walkthrough-powershell-enable-windows-update-automatic"></a>

以下命令将 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 自动更新
<a name="walkthrough-powershell-enable-windows-update-disable"></a>

以下命令可降低 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 更新
<a name="walkthough-powershell-windows-updates"></a>

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

**注意**  
有关在使用 Run Command 调用脚本时重启托管式节点的信息，请参阅 [运行命令时处理重启问题](send-commands-reboot.md)。

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

### 搜索所有缺少的 Windows 更新
<a name="walkthough-powershell-windows-updates-search"></a>

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

### 安装特定的 Windows 更新
<a name="walkthough-powershell-windows-updates-install-specific"></a>

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

### 安装缺少的重要 Windows 更新
<a name="walkthough-powershell-windows-updates-install-missing"></a>

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

### 安装缺少的 Windows 更新 (带特定排除内容)
<a name="walkthough-powershell-windows-updates-install-exclusions"></a>

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