如何在不启用PSRemoting的情况下从Azure DevOps连接Azure VM的Windows Admin Center
解决方案:禁用PSRemoting/WinRM时,通过Azure DevOps连接Azure VM的Windows Admin Center实现自动化
以下是三个可行的替代方案,均无需启用目标VM的PSRemoting/WinRM:
方案1:Windows Admin Center(WAC)REST API + Azure DevOps自托管代理
WAC原生提供REST API,可直接通过API调用实现自动化操作,无需依赖PSRemoting。核心是确保Azure DevOps能访问WAC的端点:
- 部署Azure DevOps自托管代理到与目标WAC/VM连通的网络环境(如同一Azure VNet、VPN/ExpressRoute连通环境),避免公网暴露风险
- 从Azure DevOps变量组中调用保密凭据,通过PowerShell获取WAC认证令牌:
$authBody = @{username = "$(WAC-Username)"; password = "$(WAC-Password)"} | ConvertTo-Json $token = Invoke-RestMethod -Uri "https://<WAC-FQDN>/api/login" -Method Post -Body $authBody -ContentType "application/json" - 携带令牌调用WAC REST API执行操作,例如在目标VM上运行命令、配置系统:
$headers = @{"Authorization" = "Bearer $($token.access_token)"} Invoke-RestMethod -Uri "https://<WAC-FQDN>/api/computers/<VM-Name>/powershell" -Method Post -Headers $headers -Body @{script = "Get-Service"} -ContentType "application/json"
方案2:Azure Arc Run Command + Azure DevOps管道
若目标VM已注册为Azure Arc-enabled服务器(Azure VM可直接启用Arc),可利用Azure Arc的云代理通道执行命令,与WAC底层连接逻辑一致:
- 在Azure DevOps管道中添加Azure CLI任务,执行Arc Run Command:
az connectedmachine run-command invoke --resource-group <RG-NAME> --name <VM-NAME> --command-id RunPowerShellScript --scripts "Install-WindowsFeature -Name Web-Server" - 配置Azure RBAC权限:确保DevOps服务主体/代理有目标VM的
Connected Machine Contributor角色权限 - 敏感脚本参数可存储在Azure Key Vault中,通过Azure DevOps变量组引用
方案3:WAC自动化网关 + Azure DevOps Webhook
若已部署WAC自动化网关,可通过Webhook触发预定义的WAC自动化作业:
- 在WAC中创建自动化作业(如VM配置、软件安装脚本)并生成触发URL
- 在Azure DevOps中配置Webhook,设置触发事件(如发布完成、代码提交),将WAC触发URL作为目标地址
- 通过Webhook传递必要参数(如VM名称、操作类型),实现事件驱动的自动化操作
关键注意事项
- 所有敏感凭据(WAC账号、Azure密钥)必须存储在Azure DevOps保密变量或Azure Key Vault中,禁止硬编码
- 验证网络连通性:确保自托管代理/DevOps服务能访问WAC实例或Azure Arc服务端点
- 测试API/命令时,先在本地环境验证成功后再迁移至管道
内容的提问来源于stack exchange,提问作者Sasikala Bestha
相关产品推荐
相关产品推荐

