如何无需RDP为Azure虚拟机规模集配置Windows Defender排除项
无需RDP配置Windows Defender排除项的解决方案
当然可以不用逐个RDP到VM里配置!针对Azure虚拟机规模集(VMSS)+ Service Fabric的场景,有几种高效的批量配置方式,下面给你详细拆解:
1. 使用Azure自定义脚本扩展(Custom Script Extension)
这是最直接的批量配置方式,你可以编写PowerShell脚本添加Defender排除项,再通过VMSS扩展推送到所有实例:
- 先写好PowerShell脚本(比如命名为
Add-DefenderExclusions.ps1),示例内容:
# 添加Service Fabric核心路径、进程的排除项 Add-MpPreference -ExclusionPath "C:\Program Files\Microsoft Service Fabric" Add-MpPreference -ExclusionPath "C:\ProgramData\SF" # 默认Service Fabric数据目录,自定义过的话要修改 Add-MpPreference -ExclusionProcess "FabricHost.exe" Add-MpPreference -ExclusionProcess "Fabric.exe" Add-MpPreference -ExclusionProcess "FabricGateway.exe"
- 把脚本上传到Azure存储账户(可以开启公共访问或生成SAS令牌确保VMSS能访问),然后用Azure CLI部署:
az vmss extension set --resource-group <你的资源组名> --vmss-name <你的VMSS名> --name CustomScriptExtension --publisher Microsoft.Compute --settings '{"fileUris": ["<脚本的存储URL>"], "commandToExecute": "powershell -ExecutionPolicy Unrestricted -File Add-DefenderExclusions.ps1"}'
执行后,所有VMSS实例会自动下载并运行脚本完成配置。
2. 通过Service Fabric应用包自动配置(推荐)
既然是部署Service Fabric应用,你可以把排除项配置整合到应用部署流程里,让应用部署到每个节点时自动执行:
- 在应用的
ApplicationManifest.xml中添加启动脚本配置:
<ServiceManifestImport> <ServiceManifestRef ServiceManifestName="YourServicePackage" ServiceManifestVersion="1.0.0" /> <SetupEntryPoint> <ExeHost> <Program>Setup-DefenderExclusions.ps1</Program> <WorkingFolder>CodePackage</WorkingFolder> <ConsoleRedirection FileRetentionCount="3" FileMaxSizeInKb="1024" /> </ExeHost> </SetupEntryPoint> </ServiceManifestImport>
- 在服务包的CodePackage目录下添加
Setup-DefenderExclusions.ps1,内容就是前面的Defender排除项PowerShell命令。这样每次应用部署或节点扩容时,都会自动执行脚本配置排除项。
3. 使用Azure Policy长期管控
如果需要确保所有现有和未来扩容的VMSS实例都自动继承排除项配置,可以用Azure Policy:
- 创建一个自定义
DeployIfNotExists类型的Policy,规则里指定自动为VMSS实例部署自定义脚本扩展,或者直接执行PowerShell命令配置Defender排除项。 - 这种方式的优势是一劳永逸,后续VMSS新增实例时,Policy会自动触发配置,不用手动干预。
4. Azure Automation Runbook批量执行
如果你有Azure Automation账户,可以创建Runbook遍历所有VMSS实例,远程执行配置命令:
- Runbook示例代码片段:
$resourceGroup = "<你的资源组名>" $vmssName = "<你的VMSS名>" # 获取VMSS所有实例 $vmssInstances = Get-AzVmssVM -ResourceGroupName $resourceGroup -VMScaleSetName $vmssName foreach ($instance in $vmssInstances) { Invoke-AzVMRunCommand -ResourceGroupName $resourceGroup -Name $instance.Name -CommandId 'RunPowerShellScript' -ScriptString @" Add-MpPreference -ExclusionPath "C:\Program Files\Microsoft Service Fabric" Add-MpPreference -ExclusionProcess "FabricHost.exe" "@ }
这种方式适合一次性批量配置,或者定期检查并修复排除项。
注意事项
添加排除项时,一定要覆盖Service Fabric的核心路径、数据目录和关键进程,避免漏配导致防护仍占用过高资源。
内容的提问来源于stack exchange,提问作者Slicc




