【问题标题】:Powershell - CSV - AD Attribute UpdatePowershell - CSV - AD 属性更新
【发布时间】:2014-08-11 20:44:18
【问题描述】:

我正在尝试使用我的工资系统中的信息更新 AD 属性。我有一个很好的员工信息转储,并且可以更新大部分内容,但是我遇到了一些小问题,希望有人比我能提供的帮助更好地使用 Powershell。

--- UpdateInfo.ps1 ---

Import-Module ActiveDirectory
$Users=Import-Csv C:\info_update.csv
foreach($u in $Users)
{
Get-ADUser -Filter "employeeID -eq '$($u.employeeID)'" -properties * | set-aduser -replace @{title="$($u.title)";extensionAttribute1="$($u.title)";givenName="$($u.givenName)";initials="$($u.initials)";middleName="$($u.middleName)";sn="$($u.sn)";physicalDeliveryOfficeName="$($u.physicalDeliveryOfficeName)";streetAddress="$($u.streetAddress)";l="$($u.l)";st="$($u.st)";co="$($u.co)";countryCode="$($u.countryCode)";c="$($u.c)";postalCode="$($u.postalCode)";department="$($u.department)"}
}

--- info_update.csv ---

employeeID,givenName,initials,middleName,sn,name,title,physicalDeliveryOfficeName,streetAddress,l,st,co,countryCode,c,postalCode,department,manager
"111","Smith","Q","Quincy","John","Smith, John Q.","Tech II","Springfield, IL","800 E Monroe St.","Springfield","IL","United States","840","US","62701","IT","540"

两个问题:

  • 我无法更新“名称”字段。我以为是空间的原因,但physicaldeliveryofficename也有空间......而且工作正常。
  • 我需要查找经理 ID(最后一列),返回经理的 DN,并使用它来更新经理属性。

如果有人能提供帮助,我将不胜感激。我觉得我真的很接近,但我忽略了一些东西。

谢谢!

---更新--- 感谢@TheMadTechnician

这是最终答案。

Import-Module ActiveDirectory
$Users=Import-Csv C:\Job_titles.csv
foreach($u in $Users)
{
$Mgr = Get-ADUser -Filter "employeeID -eq '$($u.manager)'" | Select -ExpandProperty DistinguishedName
Get-ADUser -Filter "employeeID -eq '$($u.employeeID)'" -properties * | set-aduser -replace @{title="$($u.title)";extensionAttribute1="$($u.title)";givenName="$($u.givenName)";displayName="$($u.name)";initials="$($u.initials)";middleName="$($u.middleName)";sn="$($u.sn)";physicalDeliveryOfficeName="$($u.physicalDeliveryOfficeName)";streetAddress="$($u.streetAddress)";l="$($u.l)";st="$($u.st)";co="$($u.co)";countryCode="$($u.countryCode)";c="$($u.c)";postalCode="$($u.postalCode)";department="$($u.department)";manager="$Mgr"} -PassThru | Rename-ADObject -NewName "$($u.name)"
}

【问题讨论】:

  • 您尝试设置管理器时遇到什么错误?根据文档,将您的 AD 用户对象传递给 Set-ADUser -Manager "Bob Smith" 应该没问题。
  • 该记录已将经理列为“540”。除非那个人的父母有一种非常病态的幽默感,否则我怀疑那是他的名字。是否有某个地方将该号码与名称相关联的列表?
  • 经理字段列出了经理的员工ID号。对于该部分,我需要查找该经理员工 ID 的 DN,并将 DN 注入到用户的更新中。

标签: powershell csv active-directory


【解决方案1】:

因此,我们将对经理使用 get-aduser 和过滤器 EmployeeID,并对 DistinguishedName 属性使用 Select -ExpandProperty。我还使用 Set-ADUser 上的 -PassThru 开关,并将其通过管道传递给 Rename-ADObject。看看这是否适合您:

Import-Module ActiveDirectory
$Users=Import-Csv C:\info_update.csv
$Managers = Import-Csv C:\Managers.csv
foreach($u in $Users)
{
$Mgr = Get-ADUser -Filter "employeeID -eq '$($u.manager)'" | Select -ExpandProperty DistinguishedName
Get-ADUser -Filter "employeeID -eq '$($u.employeeID)'" -properties * | set-aduser -replace @{title="$($u.title)";extensionAttribute1="$($u.title)";givenName="$($u.givenName)";initials="$($u.initials)";middleName="$($u.middleName)";sn="$($u.sn)";physicalDeliveryOfficeName="$($u.physicalDeliveryOfficeName)";streetAddress="$($u.streetAddress)";l="$($u.l)";st="$($u.st)";co="$($u.co)";countryCode="$($u.countryCode)";c="$($u.c)";postalCode="$($u.postalCode)";department="$($u.department)";manager="$Mgr"} -PassThru | Rename-ADObject -NewName "$($u.name)"
}

【讨论】:

  • 不幸的是,我没有经理的名单。经理字段列出了经理的员工 ID 号。对于该部分,我需要查找该经理员工 ID 的 DN,并将 DN 注入到用户的更新中。
  • 好的,更新了我的答案以使用 Get-ADUser 并过滤employeeID 字段以获取经理的DN。
  • 既然我从同一个 CSV 中提取所有内容,它应该是这样的吗? Import-Module ActiveDirectory $Users=Import-Csv C:\info_update.csv foreach($u in $Users) { $Mgr = Get-ADUser -Filter "manager -eq '$($u.manager)'" | Select -ExpandProperty DistinguishedName Get-ADUser -Filter "employeeID -eq '$($u.employeeID)'" -properties * | set-aduser -replace ...";manager="$Mgr"} -PassThru | Rename-ADObject -NewName "$($u.name)" }
  • 对,抱歉,忘记删除 $managers = 行。是的,你是对的。
  • 我用最终代码更新了我的原始帖子。谢谢@TheMadTechnician
【解决方案2】:

Set-ADUser 不能用于设置名称。见http://technet.microsoft.com/en-us/library/ee617215.aspx

尝试使用 Rename-ADObject:

    Rename-ADObject [-Identity] <ADObject> [-NewName] <string>

来源:http://technet.microsoft.com/en-us/library/ee617225.aspx

【讨论】:

  • 这样的? Get-ADUser -Filter "employeeID -eq '$($u.employeeID)'" -properties * | set-aduser -replace @{title="$($u.title)";extensionAttribute1="$($u.title)";givenName="$($u.givenName)";initials="$($u.initials)";middleName="$($u.middleName)";sn="$($u.sn)";physicalDeliveryOfficeName="$($u.physicalDeliveryOfficeName)";streetAddress="$($u.streetAddress)";l="$($u.l)";st="$($u.st)";co="$($u.co)";countryCode="$($u.countryCode)";c="$($u.c)";postalCode="$($u.postalCode)";department="$($u.department)"} | Rename-ADObject -NewName "$($u.name)" }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 2019-03-04
  • 1970-01-01
相关资源
最近更新 更多