PowerShell中-join拼接MgGraph应用所有者仅返回首项问题
问题原因
代码存在两个核心问题导致拼接逻辑失效:
- 调用
Get-MgApplicationOwner时携带了-Top 1参数,该参数会限制接口仅返回1条所有者记录,根本没有拉取到全量所有者列表 - 未配置全量拉取参数,即使写了
-join逻辑,也没有多个元素可供拼接
快速修复方案
直接替换原有逻辑即可,核心修改点见代码注释:
Connect-MgGraph -Scopes 'Application.Read.All' $results = @() Get-MgApplication -filter "AppID eq 'xyzxyzxyzxyz'" | % { $app = $_ # 移除-Top 1参数,添加-All拉取该应用下所有所有者,变量名改为复数更符合语义 $owners = Get-MgApplicationOwner -ApplicationId $_.ID -All $app.PasswordCredentials | %{ $results += [PSCustomObject] @{ DisplayName = $app.DisplayName; AppID = $app.AppID; CredentialType = "PasswordCredentials"; ExpiryDate = $_.EndDateTime; Type = 'NA'; # 遍历所有所有者对象提取UPN后,再执行逗号拼接 Owners = ($owners | ForEach-Object { $_.AdditionalProperties.userPrincipalName }) -join ', '; } } } $results
补充说明
如果你使用的是较新版本的Microsoft Graph PowerShell模块,也可以直接将Owners行简写为Owners = ($owners.AdditionalProperties.userPrincipalName) -join ', ',PowerShell的属性枚举特性会自动批量提取集合内每个元素的对应属性值;显式写ForEach-Object的写法兼容性更强,不会出现低版本模块取值异常的问题。
内容的提问来源于stack exchange,提问作者Chabango
相关产品推荐
相关产品推荐

