逐步解說:使用 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 為開頭的文件) 的許可,則該使用者還具有該執行個體的管理員存取權。對於所有其他使用者,您應該建立嚴格的文件和並將它們分享給特定使用者。如需限制 Run Command (AWS Systems Manager 功能) 存取的詳細資訊,請參閱建立 Systems Manager 的非管理員 IAM 使用者和群組

設定 AWS Tools for Windows PowerShell 工作階段設定

指定您的登入資料。

在您的本機電腦上開啟 Tools for Windows PowerShell,然後執行下列命令,以指定您的憑證。您必須在您想要設定的執行個體上具有管理員許可,或已在 AWS Identity and Access Management (IAM) 中被授予適當的許可。如需更多詳細資訊,請參閱 Systems Manager 先決條件

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

設定預設 AWS 區域

執行下列命令,以設定 PowerShell 工作階段的區域。範例使用美國東部 (俄亥俄) 區域 (us-east-2)。Run Command 在《Amazon Web Services 一般參考》的 Systems Manager 服務端點所列的 AWS 區域 中可用。

Set-DefaultAWSRegion ` -Region us-east-2

列出所有可用的文件

此命令會列出可供您帳戶使用的所有文件。

Get-SSMDocumentList

執行 PowerShell 命令或指令碼

您可以使用 Run Command 和 AWS-RunPowerShell 文件,在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上執行任何命令或指令碼,如同您使用遠端桌面在執行個體上登入一樣。您可以發出命令或在本機指令碼輸入路徑來執行命令。

注意

如需使用 Run Command 呼叫指令碼時重新開機伺服器和執行個體的資訊,請參閱 從指令碼重新啟動受管執行個體

View the description and available parameters (查看描述和可用參數

Get-SSMDocumentDescription ` -Name "AWS-RunPowerShellScript"

View more information about parameters (檢視參數的詳細資訊

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

取消命令

下列命令會取消 Send-SSMCommand 文件的 AWS-RunPowerShellScript

$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 呼叫指令碼時重新開機伺服器和執行個體的資訊,請參閱 從指令碼重新啟動受管執行個體

View the description and available parameters (查看描述和可用參數

Get-SSMDocumentDescription ` -Name "AWS-InstallApplication"

View more information about parameters (檢視參數的詳細資訊

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,在 Amazon EC2 執行個體上安裝 PowerShell 模組。如需 PowerShell 模組的詳細資訊,請參閱 Windows PowerShell 模組

View the description and available parameters (查看描述和可用參數

Get-SSMDocumentDescription ` -Name "AWS-InstallPowerShellModule"

View more information about parameters (檢視參數的詳細資訊

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

安裝 PowerShell 模組

以下命令會下載 EZOut.zip 檔案、進行安裝,然後執行額外的命令來安裝 XPS 檢視器。最後,此命令的輸出會上傳到名為 “demo-ssm-output-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 demo-ssm-output-bucket

取得每個執行個體的命令資訊

以下命令使用 CommandId,以取得命令執行的狀態。

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

使用執行個體的回應資料來取得命令資訊

下列命令會傳回特定 Send-SSMCommand 之原始 CommandId 的輸出。

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 呼叫指令碼時重新開機伺服器和執行個體的資訊,請參閱 從指令碼重新啟動受管執行個體

View the description and available parameters (查看描述和可用參數

Get-SSMDocumentDescription ` -Name "AWS-JoinDirectoryServiceDomain"

View more information about parameters (檢視參數的詳細資訊

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

將執行個體加入網域

以下命令會將執行個體加入指定的 AWS Directory Service 網域,並將任何產生的輸出上傳至 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 demo-ssm-output-bucket

取得每個執行個體的命令資訊

以下命令使用 CommandId,以取得命令執行的狀態。

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

使用執行個體的回應資料來取得命令資訊

此命令會傳回特定 Send-SSMCommand 之原始 CommandId 的輸出。

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 來管理在單一執行個體上的效能計數器和日誌之詳細資訊,請參閱將效能計數器傳送到 CloudWatch 並將日誌傳送到 CloudWatch Logs

View the description and available parameters (查看描述和可用參數

Get-SSMDocumentDescription ` -Name "AWS-ConfigureCloudWatch"

View more information about parameters (檢視參數的詳細資訊

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 服務更新到最新版本或您指定的版本。

View the description and available parameters (查看描述和可用參數

Get-SSMDocumentDescription ` -Name "AWS-UpdateEC2Config"

View more information about parameters (檢視參數的詳細資訊

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 相容。

View the description and available parameters (查看描述和可用參數

Get-SSMDocumentDescription ` –Name "AWS-ConfigureWindowsUpdate"

View more information about parameters (檢視參數的詳細資訊

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

開啟 Windows 自動更新

以下命令會將 Windows Update 設定為每日下午 10: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 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的更新。此命令會在 Windows Server Amazon EC2 執行個體上掃描或安裝遺漏的更新,並在安裝後選擇性重新開機。您也可以為要在您環境中安裝的更新指定適當的分類和嚴重性層級。

注意

如需使用 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'}