Powershell-新AzureRmADServicePrincipal-获取机密属性不需要';不行?

Powershell-新AzureRmADServicePrincipal-获取机密属性不需要';不行?,azure,powershell,azure-active-directory,Azure,Powershell,Azure Active Directory,当我试图运行下面的代码时 $ServicePrincipalName = "MY SPN name" $ScopeSubscriptionId = "Subscription ID" $AzureAdApplication = New-AzADApplication -DisplayName $ServicePrincipalName -HomePage "https://$ServicePrincipalName.local" -IdentifierUris "https://$Servic

当我试图运行下面的代码时

$ServicePrincipalName = "MY SPN name"
$ScopeSubscriptionId = "Subscription ID"

$AzureAdApplication = New-AzADApplication -DisplayName $ServicePrincipalName -HomePage "https://$ServicePrincipalName.local" -IdentifierUris "https://$ServicePrincipalName.com" -ErrorAction Stop

$sp = New-AzADServicePrincipal -ApplicationId $AzureAdApplication.ApplicationId -Scope /subscriptions/$ScopeSubscriptionId -ErrorAction Stop
我无法从“$sp”对象检索机密属性。我完全知道这是一个秘密字符串,应该这样接受:

$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sp.Secret)
$UnsecureSecret = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
当我从第二行删除ApplicationId参数时,一切都正常工作

$sp = New-AzADServicePrincipal -DisplayName $ServicePrincipalName -Scope /subscriptions/$ScopeSubscriptionId -ErrorAction Stop

你知道为什么会这样吗?尽管我注意到这种行为发生在最近几天。

因为当您使用下面的两个命令时,它不会自动为您创建秘密

$AzureAdApplication = New-AzADApplication -DisplayName $ServicePrincipalName -HomePage "https://$ServicePrincipalName.local" -IdentifierUris "https://$ServicePrincipalName.com" -ErrorAction Stop    
$sp = New-AzADServicePrincipal -ApplicationId $AzureAdApplication.ApplicationId -Scope /subscriptions/$ScopeSubscriptionId -ErrorAction Stop
$sp = New-AzADServicePrincipal -DisplayName $ServicePrincipalName -Scope /subscriptions/$ScopeSubscriptionId -ErrorAction Stop

您也可以在门户中进行检查:

当您使用不带
-ApplicationId
的命令创建服务主体时,它将创建一个服务主体以及一个广告应用程序(应用程序注册),并且还会自动为您创建一个秘密

$AzureAdApplication = New-AzADApplication -DisplayName $ServicePrincipalName -HomePage "https://$ServicePrincipalName.local" -IdentifierUris "https://$ServicePrincipalName.com" -ErrorAction Stop    
$sp = New-AzADServicePrincipal -ApplicationId $AzureAdApplication.ApplicationId -Scope /subscriptions/$ScopeSubscriptionId -ErrorAction Stop
$sp = New-AzADServicePrincipal -DisplayName $ServicePrincipalName -Scope /subscriptions/$ScopeSubscriptionId -ErrorAction Stop

在门户网站中进行检查:


如果您想将命令与
-ApplicationId
一起使用,您可以手动为您的广告应用程序创建一个密码,您可以使用,您可以自己设置密码值,在我的示例中,密码是
password01

$AzureAdApplication = New-AzADApplication -DisplayName $ServicePrincipalName -HomePage "https://$ServicePrincipalName.local" -IdentifierUris "https://$ServicePrincipalName.com"
$sp = New-AzADServicePrincipal -ApplicationId $AzureAdApplication.ApplicationId -Scope /subscriptions/$ScopeSubscriptionId 

$SecureStringPassword = ConvertTo-SecureString -String "password01!" -AsPlainText -Force
New-AzADAppCredential -ApplicationId $AzureAdApplication.ApplicationId -Password $SecureStringPassword -EndDate (Get-Date).AddYears(1)

除了,如果您只想为机密生成随机值,您需要在
AzureAD
模块中使用,请参见此