将使用管道和%的Azure AD应用查询PowerShell代码改写为ForEach循环
PowerShell管道逻辑转显式foreach循环实现
原代码存在一处笔误:匹配服务主体的行使用了未定义的$cred变量,已修正为$app.ApplicationId,改写后逻辑和原代码输出完全一致。
改写后完整代码
# 拉取所有应用并按名称排序,预先拉取所有服务主体信息 $APPs = Get-AzADApplication | Sort-Object -Property DisplayName $SPs = Get-AzADServicePrincipal # 初始化结果数组 $appCreds = @() # 第一层循环:遍历每个应用注册 foreach ($app in $APPs) { # 匹配当前应用对应的服务主体 $sp = $SPs | Where-Object ApplicationId -eq $app.ApplicationId # 输出调试日志 New-MyQLogEntry -Severity DEBUG -Message ("'Fetching information for application {0}' -f $app.DisplayName") # 获取当前应用的凭据信息,忽略报错 $appCredentials = Get-AzADAppCredential -InputObject $app -ErrorAction SilentlyContinue # 第二层循环:遍历当前应用下的所有凭据,构造结果对象 foreach ($cred in $appCredentials) { $resultObj = [PSCustomObject]@{ DisplayName = $app.DisplayName ObjectId = $app.Id ApplicationId = $app.ApplicationId UsedIn = $app.ReplyUrls KeyId = $cred.KeyId Type = $cred.Type StartDate = $cred.StartDate -as [datetime] EndDate = $cred.EndDate -as [datetime] } $appCreds += $resultObj } }
如果你需要将匹配到的服务主体属性合并到最终结果中,直接在
$resultObj的属性定义中添加对应字段即可,比如添加ServicePrincipalObjectId = $sp.Id就可以把服务主体的ID加入结果对象。
内容的提问来源于stack exchange,提问作者Varoon
相关产品推荐
相关产品推荐

