Powershell Core 的 AWS 工具中的过滤器语法问题

Issue with filter syntax in AWS tools for Powershell Core

我编写了一个 Powershell 脚本,它使用 AWS CLI 获取过滤后的 cognito-idp 身份列表。但是,我想让它成为一个 lambda 脚本,但我意识到我无法使用 AWS CLI,而是需要使用 AWS for Powershell Core 模块。

当我使用 AWS CLI 命令时

aws cognito-idp  list-users --user-pool-id $user_pool_id --filter 'email=\"foo@bar.com\"'

我得到了预期的结果。

当我使用模块中的等效 cmdlet 时

Get-CGIPUserList -UserPoolId $user_pool_id -Region $region -Filter 'email=\"foo@bar.com\"'

我收到过滤器解析错误

Get-CGIPUserList : One or more errors occurred. (Error while parsing filter.)
At line:1 char:9
+ Get-CGIPUserList -UserPoolId "****" -Region "u ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (Amazon.PowerShe...PUserListCmdlet:GetCGIPUserListCmdlet) [Get-CGIPUserList], InvalidOperationException
+ FullyQualifiedErrorId : System.AggregateException,Amazon.PowerShell.Cmdlets.CGIP.GetCGIPUserListCmdlet

根据此处的模块参考: https://docs.aws.amazon.com/powershell/latest/reference/items/Get-CGIPUserList.html 过滤器参数的语法应该相同。我做错了什么?

由于双引号转义,powershell 模块无法解析您的过滤字符串 'email=\"foo@bar.com\"'

只需删除它们,您就应该可以克服此错误,因为 powershell 中的单引号 ' 将内容表示为字符串文字:

'email="foo@bar.com"'

您也可以用双引号将您的过滤器字符串括起来 "。如果您的字符串包含您想要插入的 powershell 变量,您通常只需要这样做。在这种情况下,您需要将 \ 转义字符替换为 powershell 的转义字符 `,如下所示:

"email=`"foo@bar.com`""