无Azure CLI/Az PS的Windows VM:Azure工具安装及命令执行方案问询
Windows VM自动部署Azure工具与代理执行方案
一、无交互自动安装Azure CLI/Az PowerShell
不用手动操作或捕获自定义镜像,Azure自定义脚本扩展(Custom Script Extension) 是官方推荐的自动化配置方案,能在VM部署完成后自动运行脚本完成工具安装:
1. 安装Azure CLI(静默无交互)
编写PowerShell脚本,调用官方MSI安装包并静默执行:
# 下载Azure CLI Windows安装包 Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi # 静默安装,无任何交互弹窗 Start-Process msiexec.exe -ArgumentList '/i AzureCLI.msi /quiet' -Wait # 清理安装包 Remove-Item .\AzureCLI.msi
2. 安装Az PowerShell模块(无交互)
先调整PowerShell执行策略,再强制安装模块:
# 允许当前用户运行远程脚本(仅作用于当前用户,不修改系统全局设置) Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force # 安装Az模块,强制覆盖现有版本,跳过交互确认 Install-Module -Name Az -Force -AllowClobber -Scope CurrentUser
3. 集成到流水线部署
在你的ARM模板/Bicep配置中嵌入自定义脚本扩展,或用Azure CLI/PowerShell命令在VM部署后立即启用:
示例Azure CLI命令:
az vm extension set \ --resource-group <你的资源组名称> \ --vm-name <目标VM名称> \ --name CustomScriptExtension \ --publisher Microsoft.Compute \ --settings '{"fileUris": ["<你的脚本存储地址,如Azure Blob URL>"]}' \ --protected-settings '{"commandToExecute": "powershell -ExecutionPolicy Bypass -File install-azure-tools.ps1"}'
将上述安装脚本上传至Azure存储Blob(可配置SAS令牌限制访问),通过扩展拉取并自动执行。
二、无需在VM安装工具的替代方案
如果不需要在VM内部执行Azure操作,可通过以下方式实现:
1. 利用VM托管身份调用Azure REST API
Azure所有资源操作均提供REST API,给VM启用系统/用户分配的托管身份后,无需本地工具,直接在VM内用PowerShell发送HTTP请求完成操作:
示例:获取订阅内VM列表
# 获取托管身份的访问令牌 $token = (Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -Headers @{Metadata="true"}).Content | ConvertFrom-Json # 调用Azure管理API $vmList = Invoke-WebRequest -Uri 'https://management.azure.com/subscriptions/<你的订阅ID>/providers/Microsoft.Compute/virtualMachines?api-version=2023-07-01' -Headers @{Authorization="Bearer $($token.access_token)"} # 解析返回结果 $vmList.Content | ConvertFrom-Json
这种方式完全依赖原生PowerShell和Azure REST API,无需安装任何Azure工具,但需熟悉API参数结构。
2. 由流水线代理代执行操作
若后续Azure操作无需在VM内部触发,直接用流水线的托管代理(如Azure DevOps托管代理、GitHub Actions Runner)执行命令即可——这些代理默认预装了Azure CLI和Az PowerShell模块,直接在流水线步骤中完成对目标VM的Azure配置操作,无需在VM上安装任何工具。
内容的提问来源于stack exchange,提问作者Shay Weitzman
相关产品推荐
相关产品推荐

