你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

用于扩展属性的 Azure AD cmdlet

关于扩展属性

扩展属性提供一种简便的方式来通过用于在目录中存储对象属性值的新属性扩展 Azure AD 目录。 可将扩展属性附加到以下对象类型:

  • users
  • 租户详细信息
  • devices
  • applications

扩展属性在开发人员目录中的应用程序对象上注册。 开发人员目录中的用户或管理员许可应用程序后,该属性将添加到目标目录类型,并立即可在开发人员目录中访问。 对于多租户应用程序,当另一组织中的用户或管理员向应用程序授予许可后,扩展属性将立即可另一组织的目录中的目标目录类型上访问。

如果组织使用注册的扩展为应用程序许可了“只读”权限,属性也仍可在另一组织的目录中访问。 此外,扩展属性可由组织中任何已获许可的应用程序访问,而不仅仅可由这些属性注册到的应用程序访问。 如果该组织中其他已获许可的应用程序具有足够的权限,则它们可以读取或写入新扩展属性的值。

如果删除了该应用程序或者在另一组织的目录中删除了许可,则无法在目标目录对象上访问扩展属性。 如果应用程序删除了扩展,则无法在目标目录对象上访问该扩展。 如果在授予许可后多租户应用程序添加了其他扩展属性,可立即在另一组织的目录中访问这些属性。

注意

如果在某个对象上设置了某一扩展属性的值,并且在该对象的目录中无法访问该属性,则该属性仍将计入该对象的 100 个扩展属性值的限制。 设置属性值后,将该属性排除在考虑之外的唯一方法是显式将它设置为 null。 如果扩展属性不可访问,则无法执行此操作。

可以在此文中阅读有关扩展属性的详细信息。

示例

这些示例中,我们将使用用户对象和扩展属性。 我们首先找到用户的 ObjectId,以便稍后可以轻松引用它:

$UserId = (Get-AzureADUser -Searchstring <UPN of the user we're working with>).ObjectId 

获取用户的所有属性值

(Get-AzureADUser -ObjectId $UserId).ToJson()

获取用户并显示所有扩展属性

Get-AzureADUser -ObjectId $UserId | Select -ExpandProperty ExtensionProperty

此 cmdlet 返回用户的所有扩展属性及其当前值:

Key                                                                   Value
---                                                                   -----
odata.metadata                                                        https://graph.windows.net/85b5ff1e-0402-400c-9e3c-0f9e965325d1/$metad...
odata.type                                                            Microsoft.DirectoryServices.User
thumbnailPhoto@odata.mediaContentType                                 image/Jpeg
extension_e5e29b8a85d941eab8d12162bd004528_extensionAttribute13       Test 

检索用户的特定扩展属性的值

(Get-AzureADUserExtension -ObjectId $UserId).get_item("extension_e5e29b8a85d941eab8d12162bd004528_wWWHomePage")

检索在租户中定义的所有扩展属性

Get-AzureADApplication | Get-AzureADApplicationExtensionProperty 

创建新的扩展属性

扩展属性始终是针对特定应用程序创建的。 如果只是想要将泛型属性添加到目录,可以创建一个占位符应用程序:

$MyApp = (New-AzureADApplication -DisplayName "My Properties Bag" -IdentifierUris "https://dummy").ObjectId 

请注意,还需要在目录中创建此应用程序的服务主体,以便可以创建新的扩展属性:

New-AzureADServicePrincipal -AppId (Get-AzureADApplication -SearchString "My Properties Bag").AppId 

现在,我们可以使用此应用程序来创建新的扩展属性:

New-AzureADApplicationExtensionProperty -ObjectId $MyApp -Name "MyNewProperty" -DataType "String" -TargetObjects "User" 

当 cmdlet 成功完成时,将返回新的扩展属性对象:

ObjectId                             Name                                                     TargetObjects
--------                             ----                                                     -------------
91ec8ae5-6813-4453-afd7-31680a484892 extension_0380f0f700c040b5aa577c9268940b53_MyNewProperty {User}

注意

新属性的名称是从占位符应用程序的> “Extension_” + objectID + <“_” + <新属性>名称的格式生成的。 因此,名称的确切值会根据创建的应用程序不同而不同。 可以将属性分配给多个对象类型。 在我们的示例中,我们只使用了一个 TargetObject“User”,但也可以指定“User”、“Group”,这将将对象分配给用户对象和组对象。

设置扩展属性的值

使用我们在前面的示例中所用的扩展属性,现在可以向它赋值:

Set-AzureADUserExtension -ObjectId $UserId -ExtensionName "extension_0380f0f700c040b5aa577c9268940b53_MyNewProperty" -ExtensionValue "MyNewValue" 

检索为应用程序定义的所有扩展属性

可以检索为应用程序定义的扩展属性列表:

Get-AzureADApplicationExtensionProperty -ObjectId (Get-AzureADApplication -SearchString "My Properties Bag").ObjectId 

此 cmdlet 返回应用程序中的扩展属性列表:

ObjectId                             Name                                                      TargetObjects
--------                             ----                                                      -------------

91ec8ae5-6813-4453-afd7-31680a484892 extension_0380f0f700c040b5aa577c9268940b53_MyNewProperty  {User}

删除扩展属性

如果不再需要某个扩展属性,可以删除它:

Remove-AzureADApplicationExtensionProperty -ObjectId (Get-AzureADApplication -SearchString "My Properties Bag").ObjectID -ExtensionPropertyId 91ec8ae5-6813-4453-afd7-31680a484892 

注意

扩展后,既不能从 Azure AD 中删除属性, Tenant Schema Extension App 也不能在不向 PayOps 团队提出请求的情况下删除 。 此外,从 Azure AD 向导中关闭目录扩展选项不会删除属性或删除应用。