VMAccess 扩展用于管理用户、配置 RDP 以及检查或修复 Azure Windows 虚拟机上的磁盘。 该扩展集成了 Azure 资源管理器模板。 还可以使用 Azure CLI、Azure PowerShell、Azure 门户和 Azure 虚拟机 REST API 调用它。
本文介绍如何通过 Azure PowerShell 和 Azure 资源管理器模板运行 VMAccess 扩展。 本文还提供针对 Windows 系统的疑难解答步骤。
注释
如果你在安装 Microsoft Entra 登录扩展后使用 VMAccess 扩展重置 VM 的密码,请重新运行 Microsoft Entra 登录扩展,为 VM 重新启用 Azure AD 登录。
先决条件
支持的 Windows 版本
OS 版本。 | x64 | ARM64 |
---|---|---|
Windows 10操作系统 | 支持 | 支持 |
Windows 11 | 支持 | 支持 |
Windows Server 2016 | 支持 | 支持 |
Windows Server 2016 核心版 | 支持 | 支持 |
Windows Server 2019 | 支持 | 支持 |
Windows Server 2019 核心版 | 支持 | 支持 |
Windows Server 2022 | 支持 | 支持 |
Windows Server 2022 核心版 | 支持 | 支持 |
Windows Server 2025 | 支持 | 支持 |
Windows Server 2025 核心版 | 支持 | 支持 |
提示
- VMAccess 旨在当无法访问虚拟机 (VM) 时重新获取对该虚拟机的访问权限。 基于这一原则,它会将管理员权限授予用户名字段中指定的帐户。 如果你不希望某个用户拥有管理员权限,请登录到虚拟机并使用内置工具(如
net user
和Local Users and Groups
)来管理用户权限。 - 只能向一台 VM 应用一个扩展版本。 要运行另一个操作,可使用新配置更新现有扩展。
- 更新用户时,VMAccess 会修改远程桌面设置以允许登录。
- 在域控制器上不支持
扩展架构
VMAccess 扩展的配置包括用户名、密码以及重置管理员密码的相关设置。 可以将这些信息存储在配置文件中,在 PowerShell 中指定,或者包含在 Azure 资源管理器 (ARM) 模板中。 以下 JSON 架构包含可用于公共和受保护设置的所有属性。
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "<name>",
"apiVersion": "2023-09-01",
"location": "<location>",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
],
"properties": {
"publisher": "Microsoft.Compute",
"type": "VMAccessAgent",
"typeHandlerVersion": "2.4",
"autoUpgradeMinorVersion": true,
"settings": {
"username": "<username>"
},
"protectedSettings": {
"password": "<password>"
}
}
}
属性值
名字 | 值/示例 | 数据类型 |
---|---|---|
apiVersion | 2023-09-01 | 日期 |
发布服务器 | Microsoft.Compute | 字符串 |
类型 | VMAccessAgent | 字符串 |
typeHandlerVersion | 2.4 | 整数 (int) |
设置属性值
名字 | 数据类型 | DESCRIPTION |
---|---|---|
用户名 | 字符串 | 要管理的用户的名称(用户帐户上的所有操作都需要)。 |
密码 | 字符串 | 要为用户帐户设置的密码。 |
模板部署
可使用 Azure 资源管理器 (ARM) 模板部署 Azure VM 扩展。 上一部分中详细说明的 JSON 架构可用于 ARM 模板,以在模板部署期间运行 VMAccess 扩展。
必须将虚拟机扩展的 JSON 配置嵌套在该模板的虚拟机资源片段中,具体来说是嵌套在虚拟机模板的 "resources": []
对象和 "virtualMachineProfile":"extensionProfile":{"extensions" :[]
对象下的虚拟机规模集。
PowerShell
Set-AzVMAccessExtension - 重置密码
Set-AzVMAccessExtension `
-ResourceGroupName "myRG" `
-Location "myLocation" `
-VMName "myVM" `
-Credential (get-credential) `
-typeHandlerVersion "2.0" `
-Name VMAccessAgent
Set-AzVMAccessExtension - 重置 RDP 配置
Set-AzVMAccessExtension `
-ResourceGroupName "myRG" `
-VMName "myVM" `
-Name "myVMAccess" `
-Location "myLocation" `
-typeHandlerVersion "2.0" `
-ForceRerun $true
Set-AzVMExtension - 重置密码
$Publicsettings = '{"UserName": "myuser"}'
$protectedSettings = '{"Password": "myPassWord"}'
Set-AzVMExtension `
-ResourceGroupName "myRG" `
-VMName "myVM" `
-Location "myLocation" `
-Name "VMAccessAgent" `
-Publisher "Microsoft.Compute" `
-ExtensionType "VMAccessAgent" `
-TypeHandlerVersion "2.0" `
-ProtectedSettingString $PrivateConf `
-SettingString $settings
Set-AzVMExtension - 重置 RDP 配置
Set-AzVMExtension `
-ResourceGroupName "myRG" `
-VMName "myVM" `
-Location "myLocation" `
-Name "VMAccessAgent" `
-Publisher "Microsoft.Compute" `
-ExtensionType "VMAccessAgent" `
-TypeHandlerVersion "2.0" `
-SettingString '{}' `
-ForceRerun $true
CLI
Azure CLI - 重置密码
az vm extension set --name VMAccessAgent --publisher Microsoft.Compute --version 2.0 --vm-name "myVM" --resource-group "myRG" --settings '{"username":"myuser"}' --protected-settings '{"password":"myPassWord"}'
Azure CLI - 重置 RDP 配置
az vm extension set --name VMAccessAgent --publisher Microsoft.Compute --version 2.0 --vm-name "myVM" --resource-group "myRG" --settings '{}'
虚拟机规模集
PowerShell
$resourceGroupName = "<resource-group>"
$vmssName = "<vmss-name>"
$settings = @{"UserName"= "myuser"}
$protectedSettings = @{"Password"= "myPassWord"}
$vmss = Get-AzVmss `
-ResourceGroupName $resourceGroupName `
-VMScaleSetName $vmssName
Add-AzVmssExtension -VirtualMachineScaleSet $vmss `
-Name "VMAccessAgent" `
-Publisher "Microsoft.Compute" `
-Type "VMAccessAgent" `
-TypeHandlerVersion "2.0" `
-AutoUpgradeMinorVersion $true `
-ProtectedSetting $protectedSettings
-Setting $settings
Update-AzVmss `
-ResourceGroupName $resourceGroupName `
-Name $vmssName `
-VirtualMachineScaleSet $vmss
CLI
az vmss extension set --vmss-name my-vmss --name VMAccessAgent --resource-group my-group --version 2.0 --publisher Microsoft.Compute --settings '{"username":"myuser"}' --protected-settings '{"password":"myPassWord"}'
故障排除和支持
VMAccess 扩展的日志存储在虚拟机本地,对故障排除尤其有用。
位置 | DESCRIPTION |
---|---|
C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.VMAccessAgent\ |
包含来自 Windows 代理的日志,显示扩展何时进行了更新。 验证这些日志以确保扩展成功运行。 |
C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.VMAccessAgent\<version>\ |
VMAccess Extension 在此目录中生成详细日志。 其中包括 CommandExecution.log ,它记录了执行的每个命令及其结果;以及 extension.log ,其中包含单个执行日志。 |
C:\WindowsAzure\Logs\WaAppAgent\ |
包含与 VMAccess 扩展相关的配置详细信息和二进制日志。 |
还可以运行以下命令来检索 VMAccess 扩展的执行状态:
Get-AzVMExtension -ResourceGroupName "RG Name" -VMName "VM Name" -Name "Extension Name"
错误消息
错误 | DESCRIPTION |
---|---|
“internalErrorCode”: “CannotModifyExtensionsWhenVMNotRunning”, “code”: “OperationNotAllowed”,“message”: “在虚拟机未运行时无法修改虚拟机的扩展”。 | 该错误表示不允许在虚拟机未运行时修改虚拟机中的扩展,因为虚拟机处于未运行状态。 请确保在尝试修改扩展之前,虚拟机处于运行状态。 |
错误消息:“VMAccess 扩展不支持域控制器。 | 该错误表示虚拟机扩展 "enablevmAccess" 失败,因为它不支持域控制器。 使用此扩展时,请确保虚拟机未配置为域控制器。 有关更多信息,请参阅在 Windows 虚拟机中重置远程桌面服务或其管理员密码。 |
虚拟机 "vmname" 尚未报告虚拟机代理或扩展的状态。 请验证操作系统是否已启动且运行正常,虚拟机是否正在运行虚拟机代理,并且它是否可以建立到 Azure 存储的出站连接。 | 请参阅 排查 Azure Windows VM 代理问题。 |
错误消息:“无法更新管理员帐户的远程桌面连接设置。 密码不符合密码策略要求。 检查最低密码长度、密码复杂性和密码历史记录要求。 | 该错误表示虚拟机扩展 "enablevmAccess" 由于违反密码策略,未能更新管理员帐户的远程桌面连接设置。 请确保密码符合 Windows 密码策略要求,包括最小长度、复杂性和历史记录要求。 |
如果提供用户名,则管理员用户帐户密码不能为 null 或为空。 | 该错误表示虚拟机扩展 "enablevmAccess" 失败,因为未提供管理员用户帐户密码。 请确保为管理员用户帐户指定一个非空且不为空字符串的密码,以解决此问题。 |
虚拟机扩展 enablevmaccess 的预配已超时。完成扩展预配花费的时间过长。 扩展未报告任何消息。 | 该错误消息表示虚拟机扩展 "enablevmaccess" 的预配由于完成时间过长而超时。 此外,扩展在该过程中未提供任何状态消息。 要解决此问题,请考虑检查虚拟机的性能和网络状况,然后重试预配操作。 有关更多信息,请参阅 对 Azure Windows 虚拟机扩展故障进行故障排除。 |
错误消息:“无法更新管理员帐户的远程桌面连接设置。 错误:用户帐户用户名已存在,但无法更新,因为它不在管理员组中。 | 错误指示 VM 扩展“enablevmAccess”失败,因为用户帐户“用户名”已存在,但不在管理员组中。 请确保将该用户帐户添加到管理员组中以解决此问题。 |
“internalErrorCode”: “MultipleExtensionsPerHandlerNotAllowed”,“code”: “BadRequest”,“message”: “对于操作系统类型 ‘Windows’,一个处理程序不支持多个 VM 扩展。” VMExtension “enablevmaccess”,处理程序“Microsoft.Compute.VMAccessAgent”已在输入中添加或指定。 | 该错误消息表示对于 "Windows" 操作系统类型,不支持每个处理程序有多个虚拟机扩展。 处理程序为 "Microsoft.Compute.VMAccessAgent" 的虚拟机扩展 "enablevmaccess" 已添加或在输入中已指定。 要解决此问题,请确保为虚拟机配置每个处理程序仅一个扩展。 手动移除扩展并重试操作 Remove-AzVMExtension -ResourceGroupName "ResourceGroup11" -Name "ExtensionName" -VMName "VirtualMachineName" |
如需更多帮助,可以提交 Azure 支持事件。 转到 Azure 门户,然后选择“获取支持”。 有关 Azure 支持的详细信息,请阅读 Azure 支持计划 FAQ。