如何通过PowerShell批量断开、连接Azure VM与Log Analytics工作区
结论
该需求完全可以实现,不需要逐台手动操作,只需要通过PowerShell遍历目标VM列表,循环调用单台操作命令即可完成批量操作。
注意:你提供的命令使用的是已停止维护的AzureRM模块,正式操作前建议升级到官方推荐的Az模块,以下示例统一使用Az模块对应命令,如果坚持使用AzureRM模块,只需把命令前缀
Remove-AzVMExtension/Set-AzVMExtension换回原来的Remove-AzureRmVMExtension/Set-AzureRmVMExtension即可通用。
前置操作
执行批量操作前先完成以下准备:
- 安装对应版本的Azure PowerShell模块,执行
Connect-AzAccount登录你的Azure账号 - 如果要操作指定订阅下的VM,先执行
Set-AzContext -SubscriptionId "你的订阅ID"切换到目标订阅上下文 - 提前确认目标Log Analytics工作区的ID、主密钥,明确要操作的VM范围(指定资源组下所有VM、指定订阅下所有VM,或是自定义的VM清单)
批量断开多台VM与Log Analytics工作区的连接
根据你的操作范围选择对应脚本即可:
场景1:批量操作指定资源组下的所有Linux VM
# 替换为你的资源组名称 $resourceGroupName = "你的资源组名称" # 拉取资源组下所有VM信息 $vms = Get-AzVM -ResourceGroupName $resourceGroupName foreach ($vm in $vms) { Write-Host "正在断开VM $($vm.Name) 的Log Analytics连接..." Remove-AzVMExtension -ResourceGroupName $resourceGroupName -VMName $vm.Name -Name "OmsAgentForLinux" -Force Write-Host "VM $($vm.Name) 断开操作完成" }
场景2:批量操作自定义清单内的VM
如果只需要操作指定名称的若干台VM,使用以下脚本:
# 按格式填写要操作的VM所属资源组、VM名称 $vmList = @( @{RGName="rg-test-01"; VMName="linux-vm-01"}, @{RGName="rg-test-01"; VMName="linux-vm-02"}, @{RGName="rg-prod-02"; VMName="biz-vm-01"} ) foreach ($vmItem in $vmList) { Write-Host "正在断开VM $($vmItem.VMName)(所属资源组$($vmItem.RGName))的Log Analytics连接..." Remove-AzVMExtension -ResourceGroupName $vmItem.RGName -VMName $vmItem.VMName -Name "OmsAgentForLinux" -Force Write-Host "VM $($vmItem.VMName) 断开操作完成" }
批量连接多台VM到指定Log Analytics工作区
操作前替换脚本里的工作区、区域等参数:
场景1:批量连接指定资源组下所有Linux VM
# 替换为实际业务参数 $resourceGroupName = "你的资源组名称" $workspaceID = "你的Log Analytics工作区ID" $workspaceKey = "你的Log Analytics工作区主密钥" $location = "VM所在的Azure区域,例如chinaeast2、eastus" $vms = Get-AzVM -ResourceGroupName $resourceGroupName foreach ($vm in $vms) { Write-Host "正在为VM $($vm.Name) 配置Log Analytics代理连接..." Set-AzVMExtension -ResourceGroupName $resourceGroupName -VMName $vm.Name ` -Name "OmsAgentForLinux" ` -Publisher "Microsoft.EnterpriseCloud.Monitoring" ` -ExtensionType "OmsAgentForLinux" ` -TypeHandlerVersion "1.0" ` -Location $location ` -SettingString "{'workspaceId': '$workspaceID'}" ` -ProtectedSettingString "{'workspaceKey': '$workspaceKey'}" Write-Host "VM $($vm.Name) 连接配置完成" }
场景2:批量连接自定义清单内的VM
# 替换为实际业务参数 $workspaceID = "你的Log Analytics工作区ID" $workspaceKey = "你的Log Analytics工作区主密钥" # 按格式填写要操作的VM所属资源组、VM名称、所在区域 $vmList = @( @{RGName="rg-test-01"; VMName="linux-vm-01"; Location="chinaeast2"}, @{RGName="rg-test-01"; VMName="linux-vm-02"; Location="chinaeast2"}, @{RGName="rg-prod-02"; VMName="biz-vm-01"; Location="chinanorth3"} ) foreach ($vmItem in $vmList) { Write-Host "正在为VM $($vmItem.VMName)(所属资源组$($vmItem.RGName))配置Log Analytics代理连接..." Set-AzVMExtension -ResourceGroupName $vmItem.RGName -VMName $vmItem.VMName ` -Name "OmsAgentForLinux" ` -Publisher "Microsoft.EnterpriseCloud.Monitoring" ` -ExtensionType "OmsAgentForLinux" ` -TypeHandlerVersion "1.0" ` -Location $vmItem.Location ` -SettingString "{'workspaceId': '$workspaceID'}" ` -ProtectedSettingString "{'workspaceKey': '$workspaceKey'}" Write-Host "VM $($vmItem.VMName) 连接配置完成" }
补充说明
- 以上脚本默认针对Linux VM的
OmsAgentForLinux扩展,如果是Windows VM,把扩展名称替换为MicrosoftMonitoringAgent,同步调整Publisher、ExtensionType参数为Windows代理对应取值即可 - 批量操作前建议先选1-2台测试VM跑通流程,确认参数无误后再全量执行,避免配置错误
- 如果需要跨订阅操作,只需在遍历VM时切换对应订阅上下文即可
内容的提问来源于stack exchange,提问作者Yackzel
相关产品推荐
相关产品推荐

