PowerShell首次运行无法加载Amazon.CloudWatch程序集,二次运行正常是什么原因?
现象解释
该问题是AWS Tools for PowerShell的模块延迟加载机制导致的,具体触发逻辑如下:
- 首次执行
New-Object Amazon.CloudWatch.Model.Dimension语句时,PowerShell会优先检查当前会话中是否已经加载了包含该类型的AWS CloudWatch程序集 - 首次运行前CloudWatch模块还未被触发加载,程序集不存在于当前会话,因此抛出类型找不到的报错:
New-Object : Cannot find type [Amazon.CloudWatch.Model.Dimension]: verify that the assembly containing this type is loaded.
- 第一次执行报错的同时,PowerShell的模块自动发现机制会触发AWS CloudWatch模块的后台加载,对应的程序集会在报错后完成加载并入当前会话
- 第二次执行相同代码时,所需程序集已经加载完成,类型可以正常识别,因此不会再抛出报错
规避方案
如果需要避免首次运行报错,可选择以下两种处理方式:
- 代码开头显式预加载CloudWatch模块,提前导入所需程序集
Import-Module AWS.Tools.CloudWatch $dimension = New-Object Amazon.CloudWatch.Model.Dimension
- 改用AWS PowerShell封装的专用命令创建维度对象,自动触发模块加载
$dimension = New-CWDimension -Name <维度名称> -Value <维度取值>
内容的提问来源于stack exchange,提问作者Sameer Mhaisekar
相关产品推荐
相关产品推荐

