Azure跨区域迁移VM时PowerShell类型加载失败问题求助
Azure跨区域迁移VM的PowerShell脚本问题解决
问题详情
我在用PowerShell脚本把Azure VM从一个区域迁移到另一个区域,跟着官方文档操作时,创建$targetResourceSettingsObj对象卡壳了——系统提示找不到类型[Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Api202101.VirtualMachineResourceSettings],要求验证对应程序集已加载。查下来是因为依赖Az.ResourceMover.private.dll,但我没找到正确添加这个依赖的方法。
已经试了两种办法都没用:
- 执行
Import-Module AzureAD -Force,系统说同名程序集已加载,但创建对象还是失败; - 用
Add-type -path "Az.ResourceMover.private.dll"加载,同样无效。
操作步骤参考的是官方文档里「将资源添加到移动集合」的部分。
可行解决方案
1. 重装并导入正确的Az.ResourceMover模块
先清掉旧版本模块,安装最新版:
Uninstall-Module Az.ResourceMover -AllVersions -Force Install-Module Az.ResourceMover -Force -AllowClobber Import-Module Az.ResourceMover -Force
导入完用这条命令确认模块是否加载成功:
Get-Module Az.ResourceMover
2. 用模块内置命令创建目标资源设置对象
别手动去实例化私有类,直接用官方模块提供的命令创建对象:
$targetResourceSettingsObj = New-AzResourceMoverVirtualMachineResourceSetting -TargetResourceName "<你的目标VM名称>" -TargetRegion "<目标区域>"
如果需要指定虚拟机大小、可用性集等参数,可以这么写:
$targetResourceSettingsObj = New-AzResourceMoverVirtualMachineResourceSetting -TargetResourceName "myTargetVM" -TargetRegion "eastus" -TargetVmSize "Standard_D2s_v3"
3. 排查PowerShell环境与模块兼容性
- 优先用PowerShell 7.x版本,避开Windows PowerShell 5.1的兼容性坑;
- 执行
Update-Module Az把所有Az模块更到最新,保证依赖兼容; - 用管理员身份运行PowerShell,避免权限问题导致模块加载失败。
4. 手动加载程序集的正确姿势
如果一定要手动加载,先找到Az.ResourceMover.private.dll的完整路径,一般在这个位置:
C:\Program Files\WindowsPowerShell\Modules\Az.ResourceMover\<你的模块版本号>\Az.ResourceMover.private.dll
替换掉版本号后执行:
Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\Az.ResourceMover\3.1.0\Az.ResourceMover.private.dll"
内容的提问来源于stack exchange,提问作者Talang_madave
相关产品推荐
相关产品推荐

