如何通过命令行远程获取AWS EC2中Windows实例的服务状态?
批量获取AWS Windows EC2实例服务状态的可行方案
完全可以通过命令行批量获取Windows EC2实例的特定服务状态,无需手动RDP登录,推荐使用AWS Systems Manager (SSM) 实现——无需开放额外端口,安全性和扩展性更强,以下是具体实现步骤:
前提准备
- 目标Windows EC2实例需安装并运行SSM Agent:Windows Server 2016及以上版本默认预装,旧版本需手动安装
- 实例需关联包含
AmazonSSMManagedInstanceCore权限的IAM角色,允许SSM对实例进行管理 - 本地环境已安装AWS Tools for PowerShell(或AWS CLI),并配置了具备SSM操作权限的凭证
用SSM批量查询服务状态
1. 定义目标服务与实例
先确定要查询的服务名称(比如Windows更新服务wuauserv),以及目标实例的ID列表(或用标签批量筛选)。
2. 执行批量命令并收集结果
使用PowerShell调用SSM的Run Command功能,远程在实例上执行服务查询命令:
# 配置参数 $targetService = "wuauserv" $targetInstanceIds = @("i-0123456789abcdef0", "i-0abcdef1234567890") # 替换为你的实例ID # 构建要在实例上执行的PowerShell命令 $remoteCommand = @" Get-Service -Name "$targetService" | Select-Object Name, Status, DisplayName | ConvertTo-Json "@ # 发送SSM命令到目标实例 $commandResponse = Send-SSMCommand -InstanceId $targetInstanceIds ` -DocumentName "AWS-RunPowerShellScript" ` -Parameter @{ commands = @($remoteCommand) } # 等待命令执行完成(根据实例数量调整等待时间) Start-Sleep -Seconds 15 # 获取并解析命令输出 $commandResults = Get-SSMCommandInvocation -CommandId $commandResponse.CommandId -Details $true # 格式化展示结果 foreach ($result in $commandResults.CommandInvocations) { Write-Host "实例ID: $($result.InstanceId)" $serviceData = $result.CommandPlugins.Output | ConvertFrom-Json Write-Host "服务名称: $($serviceData.Name)" Write-Host "当前状态: $($serviceData.Status)" Write-Host "显示名称: $($serviceData.DisplayName)`n" }
替代方案:WinRM直接远程执行
如果不想依赖SSM,也可以通过WinRM直接连接实例执行命令,但需要实例开放WinRM端口(5985/http或5986/https),且本地网络能访问实例:
# 配置实例连接信息 $instanceIp = "192.168.1.100" # 替换为实例的公网/私网IP $adminCreds = Get-Credential -Message "输入EC2实例管理员账号密码" # 远程查询服务状态 Invoke-Command -ComputerName $instanceIp ` -Credential $adminCreds ` -ScriptBlock { Get-Service -Name "wuauserv" | Select-Object Name, Status, DisplayName }
这种方式适合少量实例,批量操作时需要逐个处理,安全性不如SSM(需开放端口)。
内容的提问来源于stack exchange,提问作者irldev
相关产品推荐
相关产品推荐

