从 AWS Tools for PowerShell 版本 4 迁移到版本 5 - AWS Tools for PowerShell (版本 5)

的版本 5 (V5) AWS Tools for PowerShell 已经发布!

有关重大更改和迁移应用程序的信息,请参阅迁移主题

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从 AWS Tools for PowerShell 版本 4 迁移到版本 5

AWS Tools for PowerShell 版本 5 (V5) 有重大更改,这可能会导致现有脚本停止运行。本主题介绍了 V5 中的重大更改以及从 V4 迁移环境或代码可能需要完成的工作。

有关中值得注意的变更的更多信息, AWS Tools for PowerShell 另请参阅以下资源:

注意

由于 AWS Tools for PowerShell 依赖于 适用于 .NET 的 AWS SDK,因此与 SDK 的 V4 相关的一些更改也可能会影响工具的 V5。 PowerShell要查看 V4 的更改内容 适用于 .NET 的 AWS SDK,请参阅《适用于 .NET 的 AWS SDK 开发人员指南》中的迁移信息

最低 PowerShell 版本

对于名为 AWSPowerShell 的旧版、特定于 Windows 的单一大型模块版本 AWS Tools for PowerShell,该模块支持的最低 PowerShell 版本已更新为 5.1。这与.NET Framework 4.7.2 适用于 .NET 的 AWS SDK 的新最低版本相匹配。

有关旧版 AWSPower Shell 模块的更多信息,请参阅在 Windows 上安装

安装或更新 AWS.Tools V4

安装或更新名为 cmdlet 的 AWS Tools for PowerShell模块化版本时AWS.Tools,默认情况下,Install-AWSToolsModuleUpdate-AWSToolsModule cmdlet 自然会使用版本 5。AWS.Tools如果出于某种原因需要安装或更新版本 4,AWS.Tools则可以分别使用以下命令来实现:

Install-AWSToolsModule -MaximumVersion '4.9.999' Update-AWSToolsModule -MaximumVersion '4.9.999'

有关安装和更新的 “工具” 的其他信息 PowerShell,请参阅 开始使用

使用 CTRL+C 和 CMD+C 取消执行 cmdlet

的版本 5 AWS Tools for PowerShell 允许您使用键盘快捷键(例如 CTRL+C 或 CMD+C)取消 cmdlet 的执行。

可为空的值类型

采用的类型 适用于 .NET 的 AWS SDK 已更新为使用 SDK 的新可为空的更改。例如,类型的属性int已更改为Nullable[int]。此更改不会影响为 AWS cmdlet 指定输入参数值的方式,因为这些值类型参数已经建模为可为空。但是,cmdlet 输出的可为空的类型是一个重大变化,因为 cmdlet 输出中的属性将包含$null而不是各种类型的默认值。

以下示例演示了 Tools V4 中的行为。 PowerShell在此示例中,该MissingMeta属性设置为 0,因为这是类型的默认值int

# In V4 PS > Get-S3ObjectMetadata -BucketName amzn-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 V5 PS > Get-S3ObjectMetadata -BucketName amzn-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 依赖于 适用于 .NET 的 AWS SDK,因此研究类似的更改如何影响软件开发工具包的版本 4 可能会很有用。要查找此信息,请参阅《适用于 .NET 的 AWS SDK 开发人员指南》中的值类型迁移内容。

集合

某些 cmdlet 输出已更改为返回,$null而不是类型List为或的空集合。Dictionary有关其他信息,包括如何恢复到旧版行为,请参阅《适用于 .NET 的 AWS SDK 开发者指南》中的集合迁移内容。

DateTime 对阵世界标准时间 DateTime

某些 V4 cmdlet 定义了过时的 DateTime 参数以及替代的 UTC 参数。 DateTime这些过时的 DateTime 参数已从 V5 cmdlet 中删除,UTC DateTime 参数的名称已更改为非 UTC 参数的原始名称。 DateTime

以下是已实施此更改的 cmdlet 的一些示例。

  • Get-ASScheduledActionV4 cmdlet 和 V 5 cmdlet):

    • StartTime参数已被删除,UtcStartTime参数的名称已更改为 “StartTime”。

    • EndTime参数已被删除,UtcEndTime参数的名称已更改为 “EndTime”。

  • Copy-S3ObjectV4 cmdlet 和 V 5 cmdlet):

    • ModifiedSinceDate参数已被删除,UtcModifiedSinceDate参数的名称已更改为 “ModifiedSinceDate”。

    • UnmodifiedSinceDate参数已被删除,UtcUnmodifiedSinceDate参数的名称已更改为 “UnmodifiedSinceDate”。

以下是受此更改影响的 cmdlet 的完整列表。

管道和 $AWSHistory

在 V4 AWS Tools for PowerShell 之前的版本中,引入$AWSHistory了一个名为的会话变量,用于维护 AWS cmdlet 调用记录和每次调用收到的服务响应。

在 Tools 的 V4 中 PowerShell,此会话变量已被弃用,取而代之的是-Select *参数和参数,它们可用于返回整个服务响应。中描述了该-Select *参数流水线、输出和迭代

在 “工具” 的 V5 中 PowerShell,会$AWSHistory话变量已被完全删除。因此,Clear-AWSHistorySet-AWSHistoryConfiguration cmdlet 也已被删除。

-PassThru 参数

-PassThru参数已被删除。当 cmdlet 在默认情况下不返回任何输出时,用户可以使用请求返回的参数值。-Select ^ParameterName有关更多详细信息和示例,请参阅博客文章 AWS Tools for PowerShell V5 的 Preview 1

某些 DynamoDB cmdlet 已移动并重命名

Get-DDBStreamGet-DDBStreamList cmdlet 已从 Dynamo DBV2 模块移至名为 Dynamo 的新模块。DBStreams它们也分别被重命名为 “获取- 列表” DDBSStream 和 “获取-DDBSStream 列表”

记录敏感信息

日志记录行为已更改,因此不太可能在 cmdlet 输出中包含潜在的敏感信息,尤其是在 CI/CD 某些情况下。有关如何恢复到 V4 行为的更多信息和说明,请参阅记录敏感信息

凭证和配置文件解析

AWS Tools for PowerShell 已更新为在解析 cmdlet 的凭据时使用某些环境变量:AWS_PROFILEAWS_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、ACLSet-S3BucketACLGet-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下面列出了这些内容(如果之前尚未介绍),以及您可以采取哪些可能的措施来适应将其移除(如果有)。