You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将使用管道和%的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:18:00