Проблема с синтаксисом фильтра в инструментах AWS для Powershell Core

Я написал скрипт Powershell, который получает отфильтрованный список идентификаторов cognito-idp с помощью AWS CLI. Однако я хотел сделать это лямбда-сценарием и понял, что не могу использовать интерфейс командной строки AWS, и вместо этого мне нужно было использовать модуль AWS для Powershell Core.

Когда я использую команду AWS CLI

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

Я получаю ожидаемый результат.

Когда я использую эквивалентный командлет из модуля

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 синтаксис для параметра фильтра должен быть одинаковым. Что я делаю неправильно?

1 ответ

Решение

Модуль powershell не может разобрать строку фильтра 'email=\"foo@bar.com\"' из-за избежавших двойных кавычек.

Просто удалите их, и вы должны пройти эту ошибку, как одиночная кавычка ' в powershell выражает содержимое как строковый литерал:

'email="foo@bar.com"'

Вы также можете заключить строку фильтра в двойные кавычки ", Как правило, вам нужно сделать это, только если ваша строка содержит переменную powershell, которую вы хотите интерполировать. Вам нужно будет заменить \ escape-символ в этом случае с escape-символом powershell `примерно так:

"email=`"foo@bar.com`""
Другие вопросы по тегам