需求描述:微信
因生產環境數據接口需求,須要對某時間段已上線用戶屬性進行批量互換,涉及字段EmployeeNumber,EmployeeIDide
環境信息:優化
Windows Server 2012 R2 ActiveDirectoryspa
操做步驟:orm
PS.操做之初,建議先對當前環境屬性字段進行備份導出操做。blog
方法一:接口
1.過濾出某時間段建立賬戶信息,並導出域賬號EmployeeNumber,EmployeeID字段;ip
$date=Get-Date $oldday=(Get-Date).AddDays(-180) Get-ADUser -Filter * -Properties * -SearchBase "OU=Old,OU=Staff,DC=a,DC=com" |?{$_.whenCreated -le $date -and $_.whenCreated -ge $oldday} |` Select-Object name,samaccountname,userPrincipalName,EmployeeNumber,EmployeeID | ` Export-Csv C:\New0505.csv -Encoding UTF8 -NoTypeInformation
2.將表格數據進行按需調整,去掉ID字段爲空的用戶信息,並保存CSV文本格式爲utf8ci
3.執行導入用戶信息操做,並查看當前各字段對應信息屬性get
Import-Csv 'C:\New0505.csv' | select SamAccountName,EmployeeNumber,EmployeeID
4.如信息無誤,執行批量替換操做
4.1如ID與Number字段位置無調整,執行以下命令:
Import-Csv 'C:\New0505.csv' | ForEach-Object { Set-ADUser -Identity $_.SamAccountName -EmployeeNumber $_.EmployeeID -EmployeeID $_.EmployeeNumber }
4.2如ID與Number字段已調整,則按照正常替換格式替換,執行以下命令:
Import-Csv 'C:\New0505.csv' | ForEach-Object { Set-ADUser -Identity $_.SamAccountName -EmployeeNumber $_.EmployeeNumber -EmployeeID $_.EmployeeID }
查看替換後屬性字段信息
Import-Csv 'C:\New0505.csv' | ForEach-Object { get-ADUser -Identity $_.SamAccountName -Properties * |select SamAccountName,EmployeeNumber,EmployeeID }
5.完成替換操做
方法二:
PS.如當前環境中數據均無須調整,可直接執行替換操做,具體以下:
1.以OU爲例介紹,查看當前OU下用戶相關屬性:
Get-ADUser -SearchBase "OU=Old,OU=Staff,DC=a,DC=com" -Filter * -Properties * |select SamAccountName,EmployeeNumber,EmployeeID
2.執行批量互換當前屬性操做:
Get-ADUser -SearchBase "OU=Old,OU=Staff,DC=a,DC=com" -Filter * -Properties * |select SamAccountName,EmployeeNumber,EmployeeID |ForEach-Object { Set-ADUser -Identity $_.SamAccountName -EmployeeNumber $_.EmployeeID -EmployeeID $_.EmployeeNumber }
3.再次查看當前OU下用戶屬性,發現用戶屬性已變動完成。
Get-ADUser -SearchBase "OU=Old,OU=Staff,DC=a,DC=com" -Filter * -Properties * |select SamAccountName,EmployeeNumber,EmployeeID
綜合:對方法一腳本進行優化操做,批量互換某時間段用戶屬性字段信息:
$date=Get-Date $oldday=(Get-Date).AddDays(-180) Get-ADUser -Filter * -Properties * -SearchBase "OU=Old,OU=Staff,DC=a,DC=com" |?{$_.whenCreated -le $date -and $_.whenCreated -ge $oldday} |` Select-Object name,samaccountname,userPrincipalName,EmployeeNumber,EmployeeID | forEach-Object { Set-ADUser -Identity $_.SamAccountName -EmployeeNumber $_.EmployeeID -EmployeeID $_.EmployeeNumber }
完成本次需求操做。
歡迎關注微信公衆號:小溫研習社