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



我正在通过Azure CLI(az devops security group membership list --id "xxx"(从Azure Devops检索组信息。不幸的是,结果在Powershell中不可用。

这是json的结果,我需要mailAddress。

{
"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"
},
.....
}

是否有人处理过结果并知道如何获取mailAddress?

谢谢!

简短回答:您应该能够使用$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: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自定义对象,描述符本身为Members(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})

您可以直接使用带有全局参数--query的Azure CLI,您可以获得如下的mailAddress:

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

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

此命令默认返回JSON。

您可以通过ConvertFrom-Json将JSON转换为PSCustomObject

下一个问题是,该命令不会像您所期望的那样返回集合,而是返回一个具有属性的对象(如您所见,每个属性名称都是描述符值(。

正如其他人所建议的,您可以通过Get-Member -PropertyType NoteProperty获取这些属性名称。。。也可以通过对象的PSObject属性访问这些属性。后者的优点是,您可以访问属性的value属性,这就是您在之后的属性

# fetch the direct members of our group (NOTE: this is not recursive :/)
$secGroupInfo = az devops security group membership list --org $orgUri --id $someId | 
ConvertFrom-Json
# list all mails in this group
$secGroupInfo.PSObject.Properties.where{$_.MemberType -eq 'NoteProperty'}.Value.mailAddress
# or display mails & related info in a table
$secGroupInfo.PSObject.Properties.where{$_.MemberType -eq 'NoteProperty'}.Value | 
ft displayName, principalName, originId, mailAddress -AutoSize

相关内容

  • 没有找到相关文章

最新更新