Извлечение информации в Powershell из результата Az Devops

#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 помощью .