使用PowerShell检查Microsoft Azure Active Directory应用程序中是否存在IdentifierURI

使用PowerShell检查Microsoft Azure Active Directory应用程序中是否存在IdentifierURI,powershell,azure-active-directory,azure-powershell,Powershell,Azure Active Directory,Azure Powershell,我正在使用以下PowerShell脚本创建Azure Active Directory应用程序 $appName = "data-factory-app" $appURI = "www.datafactoryapp.com" $appExists = Get-AzADApplication -DisplayName $appName if (-not $appExists) { if (-not $appExists.IdentifierUris New-AzADApplication -D

我正在使用以下PowerShell脚本创建Azure Active Directory应用程序

$appName = "data-factory-app"
$appURI = "www.datafactoryapp.com"
$appExists = Get-AzADApplication -DisplayName $appName
if (-not $appExists)
{
 if (-not $appExists.IdentifierUris
 New-AzADApplication -DisplayName $appName -IdentifierUris $appURI
}
else 
{
 Write-Output "Application Already Exists"
}

我正在检查
显示名称
,如果它存在但找不到任何命令,我还需要检查
标识URI
。有人能帮忙吗?

我自己无法测试,但这可能会有帮助:

$appName   = "data-factory-app"
$appURI    = "www.datafactoryapp.com"
$appExists = Get-AzADApplication -DisplayName $appName

if (-not $appExists) {
    Write-Output "Application '$appName' does not exist"
    # create it here?
    # see https://docs.microsoft.com/en-us/powershell/module/az.resources/new-azadapplication?view=azps-2.0.0
}
else {
    Write-Output "Application already exists, checking IdentifierUris"
    if (-not $appExists.IdentifierUris -or @($appExists.IdentifierUris) -notcontains $appURI ) {
        Write-Output "Updating Application IdentifierUris"
        $appExists | Update-AzADApplication -IdentifierUri $appURI
    }
}

为此,我建议使用AzureAD PowerShell模块中的cmdlet(cmdlet的格式为-AzureAD),而不是Azure PowerShell 2.0模块中的cmdlet(其中cmdlet的格式为-AzAD)

使用此cmdlet,您可以像在Azure AD Graph API参数中那样指定筛选器,并在一个请求中获得所需内容

要获取具有给定显示名称或任何标识符URI(技术上是一个列表)的所有应用程序对象与您给定的匹配,您可以执行以下操作:

$appName = "data-factory-app"
$appURI  = "www.datafactoryapp.com"
$filter  = "displayName eq '{0}' or identifierUris/any(u:u eq '{1}')" -f $appName, $appURI
$appExists = Get-AzureADApplication -Filter $filter

if (-not $appExists) {
     # No application exists with that display name or identifier URI
} else {
     # An application already exists with that display name or identifier URI!
}
编辑:如果出于某种原因您必须使用Azure PowerShell模块(Az),则您需要进行两次单独的调用以检查:

$appName = "data-factory-app"
$appURI  = "www.datafactoryapp.com"

$appExistsWithDisplayName = Get-AzADApplication -DisplayName $appName
if (-not $appExistsWithDisplayName) {

    $appExistsWithIdentifierUri = Get-AzADApplication -IdentifierUri $appURI
    if (-not $appExistsWithIdentifierUri)) {
        # No application exists with that display name or identifier URI
    } else {
        # An application already exists with that identifier URI
    }
} else {
     # An application already exists with that display name
}

$appExists.identifierURI
mostlikely@Theo. 我最初粘贴的代码,但编辑抱怨的网址,所以这就是为什么粘贴图像代替。谢谢帮助。我使用的是Az而不是Azure,当我使用这个命令Get AzADApplication时,您的解决方案就不起作用了。如果使用Get-AzureADApplication,则会收到Get-AzureADApplication:术语“Get-AzureADApplication”不被识别为cmdlet的名称是的,正如我在回答中提到的,cmdlet Get-AzureADApplication来自AzureAD模块,而不是Az模块。您可以使用
安装模块AzureAD-Scope CurrentUser
安装它。我添加了一个编辑,显示了如何对Az模块执行相同的操作,但它需要两个请求,而不是一个请求;azure sql server、azure sql数据库、azure active directory应用程序、azure data factory应用程序、集成运行时网关、ip防火墙规则等,根据本文,我正在为所有内容使用Az模块。如果我安装了AzureAD模块,那么我是否需要将所有代码更改为使用AzureAD中的命令,或者两者都可以在同一脚本中工作。要回答您的问题,您可以在脚本中同时使用As和AzureAD模块,这不是问题。很高兴听到你成功了@3355307我对该示例进行了编辑,以显示如果显示名称未找到匹配项,您将如何通过仅检查标识符URI进行轻微优化。(如果已按显示名称找到匹配项,则可避免不必要的调用。)