如何基于Get-AzureRmVM结果批量将资源组内VM加入域?
批量将指定资源组内的Azure VM加入域的实现方案
没问题,这事儿用PowerShell的循环就能轻松搞定,我给你拆解一下具体步骤:
第一步:获取目标资源组的所有VM并存入数组
先通过Get-AzureRmVM命令把指定资源组里的所有VM信息捞出来,存到一个数组变量里,方便后续循环遍历:
# 替换成你的目标资源组名称 $targetResourceGroup = "abcd" # 获取该资源组下的所有VM,存入数组 $vmList = Get-AzureRmVM -ResourceGroupName $targetResourceGroup
第二步:循环遍历VM列表,逐个执行域加入操作
用foreach循环遍历刚才拿到的VM数组,每一次循环针对一台VM执行Set-AzureRmVMExtension命令,注意用循环变量动态填充VM名称参数:
# 遍历每台VM,执行域加入操作 foreach ($vm in $vmList) { Set-AzureRmVMExtension ` -ResourceGroupName $targetResourceGroup ` -VMName $vm.Name ` -ExtensionType "JSONADDomainExtension" ` -Name "joindomain" ` -Publisher "Microsoft.Compute" ` -TypeHandlerVersion "1.3" ` -Settings @{ "Name" = "yourdomain.com" # 替换成你的域名 "OUPath" = "OU=Servers,DC=yourdomain,DC=com" # 可选,指定要加入的OU "User" = "yourdomain\domain-admin-account" # 替换成域管理员账号 "Restart" = "true" # 加入域后自动重启VM,必须设置 "Options" = 3 # 常用选项,代表加入域并创建计算机账户 } ` -ProtectedSettings @{ "Password" = "Your-Secure-Domain-Password" # 替换成域管理员密码 } }
几个必须注意的细节:
- 所有带注释的参数(域名、账号、密码、OU路径)一定要替换成你自己的实际配置
TypeHandlerVersion建议使用Azure官方推荐的兼容版本,1.3是经过验证的稳定版本,如需更新可以参考Azure的扩展文档- 如果你想先确认要处理的VM列表是否正确,可以先单独执行
$vmList.Name命令,查看输出的VM名称是否符合预期 - 执行命令前确保你的PowerShell已经通过
Connect-AzureRmAccount登录到了正确的Azure租户
这样不管资源组里有多少台VM,都会被逐一处理,不会遗漏任何一台。
内容的提问来源于stack exchange,提问作者itye1970
相关产品推荐
相关产品推荐

