0

我有以下代码用于提取有关我的AzADServicePrincipals. 现在,我找到了一个使用这样的管道执行此操作的代码:

$APPs = Get-AzADApplication
    $SPs = Get-AzADServicePrincipal
    
    $appCreds = @()
    $appCreds += $APPs | Sort-Object -Property DisplayName | % {
        $app = $_
        $sp = $SPs | ? ApplicationId -eq $cred.ApplicationId
        New-MyQLogEntry -Severity DEBUG -Message "'Fetching information for application {0}' -f $app.DisplayName"
        $app | Get-AzADAppCredential -ErrorAction SilentlyContinue | Select-Object -Property @{Name='DisplayName'; Expression={$app.DisplayName}}, @{Name='ObjectId'; Expression={$app.Id}}, @{Name='ApplicationId'; Expression={$app.ApplicationId}}, @{Name='UsedIn'; Expression={$app.ReplyUrls}}, @{Name='KeyId'; Expression={$_.KeyId}}, @{Name='Type'; Expression={$_.Type}}, @{Name='StartDate'; Expression={$_.StartDate -as [datetime]}}, @{Name='EndDate'; Expression={$_.EndDate -as [datetime]}}
    }

改编自:https ://github.com/slapointe/azure-scripts/blob/master/azure-ad/expiring-app-credentials/Get-AzADAppExpiringCredentials.ps1

我正在尝试将其转换为 foreach 循环,但我无法做到。

关于代码的背景: Get-AzADApplication 将为您提供 Azure 帐户中的所有应用程序,我正在尝试查找所有类型的应用程序:服务主体(基于应用程序 Id 匹配),然后将所有属性合并到一个对象中(此处$appCreds 在这种情况下)

4

1 回答 1

2
  • 我假设$cred.ApplicationId是一个错字,因为原始代码使用的是:
$application = $_
$application.ApplicationId
  • 下面的行没有理由存在,该变量$sp没有在其他任何地方使用(不是这里也不是原始代码),但如果它正在使用,我肯定会改变它hashtable
$sp = $SPs | ? ApplicationId -eq $cred.ApplicationId`

在我看来,下面是更经典且肯定更高效的代码的样子:

$APPs = Get-AzADApplication
$SPs = Get-AzADServicePrincipal

$appCreds = foreach($app in $APPs | Sort-Object DisplayName)
{
    New-MyQLogEntry -Severity DEBUG -Message ('Fetching information for application {0}' -f $app.DisplayName)
    if($azAppCreds = Get-AzADAppCredential -ObjectId $app.ObjectId -ErrorAction SilentlyContinue)
    {
        foreach($cred in $azAppCreds)
        {
            [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]
            }
        }
    }   
}
于 2021-10-26T01:30:49.893 回答