Azure解决方案:如何通过脚本批量更新用户属性?
51CTO 博客地址:https://blog.51cto.com/14669127
我们都知道,如果想获取Azure AD里的某个用户属性信息,可以通过Get-AzureADUser命令来获取其单一用户的信息,但如果获取到用户属性,比如部门或者Job Titile与当前信息不符合,可以通过Set-AzureADUser来修改单个用户的属性。
但很多IT面临的是定期的部门重组,职位的调动,如果采用Set-AzureADUser逐个用户修改,那么工作效率非常低,今天,我将给大家分享一下,如何通过脚本批量更新用户属性。
具体操作步骤如下所示:
1. 打开PowerShell,执行命令:Connect-AzureAD.
2. 执行命令:Get-AzureADUser | Get-Member -MemberType property,获取 Azure AD中用户的UPN和属性,如下所示:
3. 新建一个CSV文件,根据用户实际需求,编辑CSV文件属性和属性值,如下所示:
4. 执行脚本,如下所示:
$AzureADUsers = Import-CSV "C:\AzureADUserAttributes.csv"
$i = 0;
$TotolRows = $AzureADUsers.Count
$UpdateStatusResult=@()
ForEach($UserInfo in $AzureADUsers)
{
$UserId = $UserInfo.'UserPrincipalName'
$NewUserData = @{}
$UserInfo.PSObject.Properties | ForEach { $NewUserData[$_.Name] = $_.Value }
$i++;
Write-Progress -activity "Processing $UserId " -status "$i out of $TotolRows completed"
Try
{
$UserObj = Get-AzureADUser -ObjectId $UserId
$ExistingUserData = @{}
$UserObj.PSObject.Properties | ForEach { $ExistingUserData[$_.Name] = $_.Value }
$AttributesToUpdate = @{}
$CSVHeaders = @("JobTitle","Department","CompanyName","PhysicalDeliveryOfficeName","City","Country","PostalCode","State","StreetAddress")
ForEach($property in $CSVHeaders)
{
if ($NewUserData[$property] -ne $null -and ($NewUserData[$property] -ne $ExistingUserData[$property]))
{
$AttributesToUpdate[$property] = $NewUserData[$property]
}
}
if($AttributesToUpdate.Count -gt 0)
{
Set-AzureADUser -ObjectId $UserId @AttributesToUpdate
$UpdateStatus = "Success - Updated attributes : " + ($AttributesToUpdate.Keys -join ',')
} else {
$UpdateStatus ="No changes required"
}
}
catch
{
$UpdateStatus = "Failed: $_"
}
$UpdateStatusResult += New-Object PSObject -property $([ordered]@{
User = $UserId
Status = $UpdateStatus
})
}
$UpdateStatusResult | Select User,Status
$UpdateStatusResult | Export-CSV "C:\AzureADUserUpdateStatus.CSV" -NoTypeInformation -Encoding UTF8
5. 访问一个用户的属性,已经更新完成,如下所示:
谢谢大家的阅读,若大家日后有其他疑问,欢迎线下讨论。
版权声明
本文仅代表作者观点,不代表博信信息网立场。