演练:将 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 会话设置
- 列出所有可用文档
- 运行 PowerShell 命令或脚本
- 使用 AWS-InstallApplication 文档安装应用程序
- 使用 AWS-InstallPowerShellModule JSON 文档安装 PowerShell 模块
- 使用 AWS-JoinDirectoryServiceDomain JSON 文档将托管式节点加入域中
- 使用 AWS-ConfigureCloudWatch 文档将 Windows 指标发送到 Amazon CloudWatch Logs
- 使用 AWS-UpdateEC2Config 文档更新 EC2Config
- 使用 AWS-ConfigureWindowsUpdate 文档启用或关闭 Windows 自动更新
- 使用 Run Command 管理 Windows 更新
配置 AWS Tools for Windows PowerShell 会话设置
指定您的凭证
在本地计算机上打开 Tools for Windows PowerShell 并运行以下命令以指定您的凭证。您必须具有要配置的托管式节点的管理员权限,或必须已获得 AWS Identity and Access Management (IAM) 中的适当权限。有关更多信息,请参阅 为 AWS Systems Manager 设置托管节点。
Set-AWSCredentials –AccessKey
key-name
–SecretKeykey-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')} ` -OutputS3BucketNameamzn-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
')} ` -OutputS3BucketNameamzn-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 管理任务。
搜索所有缺少的 Windows 更新
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'}