的版本 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 依赖于 适用于 .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-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 和 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 -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 V5
PS >
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 依赖于 适用于 .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-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_ID
AWS_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-LMFunctionAsync
cmdlet。 -
这个
Get-EC2ImageByName
cmdlet。改用 Get-SSMLatest EC2 Image cmdlet。 -
来自 Write-S3Objectcmdlet 的
CalculateContentMD5Header
参数。