You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:33:20