从 Az Devops 结果中检索 Powershell 中的信息

Retrieving information in Powershell from Az Devops result

我正在通过 azure CLI (az devops security group membership list --id "xxx") 从 Azure Devops 检索组信息。不幸的是,结果在 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"
  },
.....
}

有人处理过结果并知道如何获取邮件地址吗?

谢谢!

简答:您应该可以通过 $result.'DESCRIPTOR'.mailAddress.

到达 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:\Users\BHANNADE> $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})

您可以直接将 Azure CLI 与 Global Parameters --query 一起使用,您可以获得这样的邮件地址:

az devops security group membership list --id "xxx" --query "DESCRIPTOR.mailAddress"

此外,您可以使用 --output 更改输出格式。