Azure VM启用EncryptionAtHost报错:属性不存在问题求助
问题:批量启用Azure虚拟机Encryption at Host功能失败,部分VM报属性不存在错误
背景与脚本逻辑
尝试通过PowerShell脚本批量为Azure租户内的虚拟机启用Encryption at Host功能,初始脚本逻辑为:获取所有VM、检查加密状态、停止VM、更新属性、重启原本运行的VM。但有大约30台VM修复失败,同订阅内部分同OS、同规格的VM可正常启用该功能。修改后的强制更新脚本如下:
$subscriptionID = "mysubid" Set-AzContext $subscriptionID # List remaining non-compliant VMs $subVMs = ("list of vm names") foreach ($name in $subVMs) { $vm = Get-AZVM -Name $name $thisVm = Get-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Status $powerState = $thisVm.Statuses.DisplayStatus Stop-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Force $vm.Name $vm.SecurityProfile.EncryptionAtHost = $true Update-AzVM -ResourceGroupName $vm.ResourceGroupName -vm $vm if ($powerState -eq "VM running") { Start-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name } }
报错信息
执行上述脚本时,未修复成功的VM均抛出以下错误:
在此对象上找不到属性'EncryptionAtHost'。请验证该属性是否存在并可设置。
已确认的前置条件
- 已通过以下命令确认订阅级已注册
EncryptionAtHost功能,且订阅已启用该功能:
Get-AzProviderFeature -FeatureName "EncryptionAtHost" -ProviderNamespace "Microsoft.Compute"
- 排除VM规格影响:存在同操作系统、同VM规格的实例,一台可成功启用加密,另一台报错。
排查结果
运行以下排查脚本验证VM的属性状态:
foreach ($name in $subVMs) { $vm = Get-AZVM -Name $name $vm.Name if ($vm.SecurityProfile.EncryptionAtHost -eq $true) { Write-Output "Already Encrypted" } if ($vm.SecurityProfile.EncryptionAtHost -eq $false){ Write-Output "Not Encrypted" } Write-Output "" }
输出示例:
VM1 Not Encrypted VM2 Already Encrypted VM3 VM4 Already Encrypted
其中无后续状态输出的VM(如VM3)即为报属性不存在的VM,此类VM的SecurityProfile对象中未包含EncryptionAtHost属性。
需求
寻求无需手动修改的批量修复方案,解决此类VM无法通过脚本启用Encryption at Host的问题。
内容的提问来源于stack exchange,提问作者jway22
相关产品推荐
相关产品推荐

