Проблема с синтаксисом фильтра в инструментах 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`""