新的 AzureADUserAppRoleAssignment 扩展

New-AzureADUserAppRoleAssignment Expansion

我正在使用此 cmdlet 创建一个用户并应用一个应用程序角色,该角色位于 Azure 中构建的自定义应用程序中,运行 很好。问题是,我有多个 Azure 自定义构建的应用程序,它们具有我希望用户在每个应用程序中拥有的相同角色。有没有一种方法可以使用此 cmdlet,比方说,将 -ResourceId 设置为多个 ServicePrincipals 以允许在每个应用程序中一次摄取此用户,还是我必须一个一个地执行?

我当前的代码:

$PasswordProfile = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile
$PasswordProfile.Password = "<Password>"
$PasswordProfile.EnforceChangePasswordPolicy = $True
New-AzureADUser -DisplayName "<Display Name of User>" -PasswordProfile $PasswordProfile -UserPrincipalName "<developer's test user>@dosinvest.onmicrosoft.com" -AccountEnabled $true -MailNickName "<NickName to use for Mail name>"
$username = "<developer's test user>@dosinvest.onmicrosoft.com"
$app_name = "<Name of Application>"
$app_role_name = "<Display Name of Role within Application>"
$user = Get-AzureADUser -ObjectId "$username"
$sp = Get-AzureADServicePrincipal -Filter "displayName eq '$app_name'"
$appRole = $sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name }
New-AzureADUserAppRoleAssignment -ObjectId $user.ObjectId -PrincipalId $user.ObjectId -ResourceId $sp.ObjectId -Id $appRole.Id

ResourceID 参数将 String 作为基于 its documentation 的输入,因此无法为其提供多个 ID。

可能对您有帮助的是 ForEach。例如,让我们定义应用程序名称数组(注意 names 而不是 name):

$app_names = "<Name of Application>","<Name of Application2>"

您基本上需要迭代此数组和 运行 列表中每个应用程序的 cmdlet(假设 $app_role_name 对所有应用程序都相同):

$user = Get-AzureADUser -ObjectId "$username"
$app_role_name = "<Display Name of Role within Application>"

foreach ($n in $app_names) {
  $sp = Get-AzureADServicePrincipal -Filter "displayName eq '$n'"
  $appRole = $sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name }
  New-AzureADUserAppRoleAssignment -ObjectId $user.ObjectId -PrincipalId $user.ObjectId -ResourceId $sp.ObjectId -Id $appRole.Id
}

其他资源: