#json #powershell #azure-devops #azure-cli
#json #powershell #azure-devops #azure-cli
Вопрос:
Я извлекаю информацию о группе из Azure Devops через azure CLI ( az devops security group membership list --id "xxx"
). К сожалению, результат почему-то не может быть использован в Powershell.
Это результат json, мне нужен почтовый адрес.
{
"DESCRIPTOR": {
"descriptor": "DESCRIPTOR",
"directoryAlias": "DIRECTORYALIAS",
"displayName": "DISPLAYNAME",
"domain": "DOMAIN",
"legacyDescriptor": LEGACYDESCRIPTOR,
"mailAddress": "MAILADDRESS",
"metaType": "METATYPE",
"origin": "ORIGIN",
"originId": "ORIGINID",
"principalName": "PRINCIPALNAME",
"subjectKind": "SUBJECTKIND",
"url": "URL"
},
.....
}
Кто-нибудь работал с результатами и знает, как получить адрес электронной почты?
Спасибо!
Комментарии:
1. Вы можете использовать
ConvertFrom-Json
командлет для преобразования строки в формате JSON в пользовательский объект или хэш-таблицу.2. Да, я знаю этот командлет, но все равно результат непригоден для использования.
3. @Mens обновил мой ответ, чтобы удовлетворить ваше требование об извлечении нескольких адресов. Пожалуйста, проверьте. Надеюсь, это поможет. 🙂
Ответ №1:
Короткий ответ: вы должны иметь возможность получить доступ к mailAddress
свойству с $result.'DESCRIPTOR'.mailAddress
помощью .
Вот почему и как:
PS C:> $result = az devops security group membership list --id "xxx" --organization "yyy" | ConvertFrom-Json
PS C:> $result.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False PSCustomObject System.Object
PS C:UsersBHANNADE> $result | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
aad.NmEzOTc1MTIt...xYr58NWZkLTg4MDQtY2QxZGUxODkzMWQ4 NoteProperty System.Management.Automation.PSCustomObject ...
aad.Y2I1NjM2NjIt...mZi03NzA5LTg4MWQtNDZjZmI5NjRjYWMy NoteProperty System.Management.Automation.PSCustomObject ...
Это говорит нам о том, что $result
это пользовательский объект PowerShell с самими дескрипторами в качестве членов (NoteProperties).
Поэтому $result.'DESCRIPTOR'.mailAddress
вы должны получить доступ к mailAddress
свойству:
PS C:> $result.'aad.NmEzOTc1MTIt...xYr58NWZkLTg4MDQtY2QxZGUxODkzMWQ4'.mailAddress
abc.xyz@email.com
Обновить:
В команде может быть несколько участников, и поэтому ваш $result
может содержать несколько объектов. Вы можете извлечь все адреса электронной почты следующим образом:
$properties = $result | Get-Member -MemberType Properties | Select-Object -ExpandProperty Name
$mailAddresses = @()
$mailAddresses = $properties.ForEach({$result.$_.mailAddress})
Ответ №2:
Вы можете напрямую использовать Azure CLI с глобальными параметрами --query
, и вы можете получить адрес электронной почты следующим образом:
az devops security group membership list --id "xxx" --query "DESCRIPTOR.mailAddress"
Кроме того, вы можете изменить формат вывода с --output
помощью .