的版本 5 (V5) AWS Tools for PowerShell 已经发布!
有关重大更改和迁移应用程序的信息,请参阅迁移主题。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
从 AWS Tools for PowerShell 版本 4 迁移到版本 5
AWS Tools for PowerShell 版本 5 (V5) 有重大更改,这可能会导致现有脚本停止运行。本主题介绍了 V5 中的重大更改以及从 V4 迁移环境或代码可能需要完成的工作。
有关中值得注意的变化的更多信息, AWS Tools for PowerShell 另请参阅以下资源:
-
中的 V5 开发跟踪器问题。 GitHub
除了重大更改列表外,请务必查看每个预览的详细信息。
注意
由于 AWS Tools for PowerShell 依赖于 AWS SDK for .NET,因此与 SDK 的 V4 相关的一些更改也可能会影响工具的 V5。 PowerShell要查看 V4 的更改内容 AWS SDK for .NET,请参阅《AWS SDK for .NET 开发人员指南》中的迁移信息。
最低 PowerShell 版本
对于名为 AWSPowerShell 的旧版、特定于 Windows 的单一大型模块版本 AWS Tools for PowerShell,该模块支持的最低 PowerShell 版本已更新为 5.1。这与.NET Framework 4.7.2 AWS SDK for .NET 的新最低版本相匹配。
有关旧版 AWSPower Shell 模块的更多信息,请参阅在 Windows 上安装。
安装或更新 AWS.Tools V4
安装或更新名为 cmdlet 的 AWS Tools for PowerShell模块化版本时AWS.Tools,默认情况下,Install-AWSToolsModule和 Update-AWSToolsModule cmdlet 自然会使用版本 5。AWS.Tools如果出于某种原因需要安装或更新版本 4,AWS.Tools则可以分别使用以下命令来实现:
Install-AWSToolsModule -MaximumVersion '4.9.999' Update-AWSToolsModule -MaximumVersion '4.9.999'
有关安装和更新的 “工具” 的其他信息 PowerShell,请参阅 开始使用
使用 CTRL+C 取消执行 cmdlet
的版本 5 AWS Tools for PowerShell 允许您使用诸如 CTRL+C 之类的键盘快捷键取消 cmdlet 的执行。
可为空的值类型
采用的类型 AWS SDK for .NET 已更新为使用 SDK 的新可为空的更改。例如,类型的属性int已更改为Nullable[int]。此更改不会影响为 AWS cmdlet 指定输入参数值的方式,因为这些值类型参数已经建模为可为空。但是,cmdlet 输出的可为空的类型是一个重大变化,因为 cmdlet 输出中的属性将包含$null而不是各种类型的默认值。
以下示例演示了 Tools V4 中的行为。 PowerShell在此示例中,该MissingMeta属性设置为 0,因为这是类型的默认值int。
# In V4PS >Get-S3ObjectMetadata -BucketNameamzn-s3-demo-bucket-Key 'test' | >> Select LastModified, MissingMeta, ObjectLockRetainUntilDate, BucketKeyEnabled LastModified MissingMeta ObjectLockRetainUntilDate BucketKeyEnabled ------------ ----------- ------------------------- ---------------- 8/29/2023 10:20:44 PM 0 1/1/0001 12:00:00 AM
以下示例演示了 V5 中工具的 PowerShell行为。在此示例中,该MissingMeta属性设置为$null。
# In V5PS >Get-S3ObjectMetadata -BucketNameamzn-s3-demo-bucket-Key 'test' | >> Select LastModified, MissingMeta, ObjectLockRetainUntilDate, BucketKeyEnabled LastModified MissingMeta ObjectLockRetainUntilDate BucketKeyEnabled ------------ ----------- ------------------------- ---------------- 8/29/2023 10:20:44 PM
在大多数情况下,无需更改代码,因为 PowerShell 可以从可为空的值类型隐式转换为不可为空的值类型。但是,对于显式检查可为空值类型的默认值的比较逻辑代码来说,这是一个重大变化。必须修改检查不可为空类型的默认值的比较逻辑才能进行检查。$null
对于其中一些类型,以下示例说明如何更新为 V4 编写的用于检查是否未返回任何内容的代码:
#Type int: # In V4, if you were checking whether an int is 0... if($s3Metadata.MissingMeta -eq 0){} # In V5, check if the int is null instead: if($s3Metadata.MissingMeta -eq $null) {} # Type datetime: # In V4, if you were checking whether a datetime is '0001-01-01'... if($s3Metadata.ObjectLockRetainUntilDate -eq '0001-01-01'){} # In V5, check if the datetime is null instead: if($s3Metadata.ObjectLockRetainUntilDate -eq $null){} # Type boolean: # In V4, if you were checking whether a boolean is $false... if($s3Metadata.BucketKeyEnabled -eq $false){} # In V5, check if the boolean is null instead: if($s3Metadata.BucketKeyEnabled -eq $null)
由于 AWS Tools for PowerShell 依赖于 AWS SDK for .NET,因此研究类似的更改如何影响软件开发工具包的版本 4 可能会很有用。要查找此信息,请参阅《AWS SDK for .NET 开发人员指南》中的值类型迁移内容。
集合
某些 cmdlet 输出已更改为返回,$null而不是类型List为或的空集合。Dictionary有关其他信息,包括如何恢复到旧版行为,请参阅AWS SDK for .NET 开发者指南中的集合迁移内容。
DateTime 对阵世界标准时间 DateTime
某些 V4 cmdlet 定义了过时的 DateTime 参数以及替代的 UTC 参数。 DateTime这些过时的 DateTime 参数已从 V5 cmdlet 中删除,UTC DateTime 参数的名称已更改为非 UTC 参数的原始名称。 DateTime
以下是已实施此更改的 cmdlet 的一些示例。
-
Get-ASScheduledAction(V4 cmdlet 和 V 5 cmdlet):-
StartTime参数已删除,UtcStartTime参数名称已更改为 “StartTime”。 -
EndTime参数已删除,UtcEndTime参数名称已更改为 “EndTime”。
-
-
Copy-S3Object(V4 cmdlet 和 V 5 cmdlet):-
ModifiedSinceDate参数已删除,UtcModifiedSinceDate参数名称已更改为 “ModifiedSinceDate”。 -
UnmodifiedSinceDate参数已删除,UtcUnmodifiedSinceDate参数名称已更改为 “UnmodifiedSinceDate”。
-
以下是受此更改影响的 cmdlet 的完整列表。
-
Get-CWMetric 统计信息(别名 Get-CWMetric 统计信息)
-
获取RSCluster快照(别名 Get-Snapsh RSCluster ots)
-
get-RSEvent(别名 Get-RSEvents)
管道和 $AWSHistory
在 V4 AWS Tools for PowerShell 之前的版本中,引入$AWSHistory了一个名为的会话变量,用于维护 AWS cmdlet 调用记录和每次调用收到的服务响应。
在 Tools 的 V4 中 PowerShell,此会话变量已被弃用,取而代之的是-Select *参数和参数,它们可用于返回整个服务响应。有关-Select
*参数的描述,请参见流水线、输出和迭代。
在 “工具” 的 V5 中 PowerShell,会$AWSHistory话变量已被完全删除。因此,Clear-AWSHistory和 Set-AWSHistoryConfiguration cmdlet 也已被删除。
-PassThru 参数
该-PassThru参数已被删除。当 cmdlet 在默认情况下不返回任何输出时,用户可以使用请求返回的参数值。-Select ^ParameterName有关更多详细信息和示例,请参阅博客文章 AWS Tools for PowerShell
V5 的 Preview 1
某些 DynamoDB cmdlet 已移动并重命名
Get-DDBStream和 Get-DDBStreamList cmdlet 已从 Dynamo DBV2 模块移至名为 Dynamo 的新模块。DBStreams它们也分别被重命名为 “获取- 列表” DDBSStream 和 “获取-DDBSStream 列表”。
敏感信息的记录
日志记录行为已更改,因此不太可能在 cmdlet 输出中包含潜在的敏感信息,尤其是在 CI/CD 某些情况下。有关如何恢复到 V4 行为的更多信息和说明,请参阅记录敏感信息。
凭证和配置文件解析
AWS Tools for PowerShell 已更新为在解析 cmdlet 的凭据时使用某些环境变量:AWS_PROFILE、AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY、和。AWS_SESSION_TOKEN此外,凭证和配置文件的解析顺序也有一些变化。有关更多信息,请参阅 凭证和配置文件解析。
凭据错误消息
如果无法获得适当的凭证,则 AWS Tools for PowerShell 返回的错误消息已更改。
在工具的 v4 中,消息类似于以下内容:
Get-SFNExecutionList -Region us-west-2 Get-SFNExecutionList: No credentials specified or obtained from persisted/shell defaults.
在工具的 V5 中,消息与以下内容类似:
Get-SFNExecutionList -Region us-west-2 Get-SFNExecutionList: Failed to resolve AWS credentials. The credential providers used to search for credentials returned the following errors: ... <list of specific exceptions>
一致的自动迭代
默认情况下,所有分页的 cmdlet 都已更新为自动迭代所有数据。您可以使用 Set -AWSAuto IterationMode cmdlet 恢复此行为。如果你运行Set-AWSAutoIterationMode -IterationMode
v4,在 v4 中自动迭代的操作仍将自动迭代,但其余操作将恢复为手动迭代。要确定自动迭代设置为哪种模式,请使用 Get -AWSAuto IterationMode cmdlet。
要查看以这种方式更新的 cmdlet 的示例,请参阅 cmdlet(V4 cmdlet 和 V5 Get-CWLLogEvent c mdlet)。
有关自动迭代的详细信息,请参阅迭代分页数据。
S3 cmdlet 已弃用并已替换
对于 Amazon S3,get-s3acl 和 set-s3acl cmdlet 已被弃用。改用以下新 cmdlet:Get-S3BucketACL、ACL、Set-S3BucketACL、Get-S3ObjectSet-S3ObjectACL。
清理和修剪 S3 关键参数
某些 Amazon S3 cmdlet 接受名为Key和的参数。KeyPrefix的 V4 AWS Tools for PowerShell 将通过以下方式清理和修剪这些参数:删除前导空格、正斜杠(“/”)和反斜杠(“\”),将所有其他反斜杠转换为正斜杠,并删除尾随空格。在 V5 版本的 Tools 中 PowerShell,这不再是默认行为。您可以通过指定-EnableLegacyKeyCleaning参数恢复到此行为。
此信息适用于以下 cmdlet:
交互式会话功能
交互式会话功能已添加到 Star SSMSession t- cmdlet 中,该功能与行为一致。 AWS CLI 例如:
Start-SSMSession -Target 'i-1234567890abcdef0'
如果您需要传统行为,Start-SSMSession请在命令中包含该-DisablePluginInvocation参数。
CloudWatch 警报
Get-CWAlarm cmdlet 已更新,默认情况下会同时返回指标和复合亚马逊 CloudWatch 警报。要将输出限制为指标警报或复合警报,必须分别指定-AlarmType参数:Get-CWAlarm -AlarmType
'MetricAlarms'或Get-CWAlarm -AlarmType 'CompositeAlarms'。
LitJson
AWS Tools for PowerShell 已更新为LitJson用于System.Text.Json代替序列化。 LitJson已从工具的 V5 中移除。
LoggedAt输出属性
LoggedAt输出属性已被删除。在工具的 V4 中,某些 cmdlet(例如Get-SSMCommandInvocationDetail和)默认返回此属性。Invoke-LMFunction
如果需要复制 output 属性提供的信息,可以在脚本中加入类似以下内容的内容:LoggedAt
$loggedAt = (Get-Date).ToUniversalTime().ToString('s')
已移除的编程元素
已从 “工具” 的 V5 中删除了许多编程元素。 PowerShell下面列出了这些内容(如果之前尚未介绍),以及您可以采取哪些可能的措施来适应将其移除(如果有)。
-
这个
Invoke-LMFunctionAsynccmdlet。 -
这个
Get-EC2ImageByNamecmdlet。改用 Get-SSMLatest EC2 Image cmdlet。 -
来自 Write-S3Objectcmdlet 的
CalculateContentMD5Header参数。