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

时间:2018-12-11 01:19:19

标签: amazon-web-services powershell amazon-cognito aws-cli aws-powershell

我编写了一个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 filter参数的语法应相同。我在做什么错了?

1 个答案:

答案 0 :(得分:1)

由于对双引号进行了转义,因此Powershell模块无法解析过滤器字符串'email=\"foo@bar.com\"'

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

'email="foo@bar.com"'

您还可以将过滤器字符串用双引号"括起来。通常,仅当您的字符串包含要插入的powershell变量时,才需要执行此操作。在这种情况下,您需要将\转义字符替换为powershell的转义字符`,如下所示:

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