【问题标题】:Powershell-Update attribute "departmentNumber"Powershell-更新属性“departmentNumber”
【发布时间】:2015-08-18 21:38:13
【问题描述】:

我有以下脚本 - 除了部门编号外,它可以工作。有什么想法吗?

# Import AD Module             
Import-Module ActiveDirectory 

# Import CSV into variable $users    
$users = Import-Csv -Path C:\users.csv

# Loop through CSV file and update users if they exist        
foreach ($user in $users) {
Get-ADUser -Filter "SamAccountName -eq '$($user.samaccountname)'" - Properties * | 
Set-ADUser  -EmailAddress $($user.EmailAddress) -Title $($user.Title)  -Office $($user.Office)  -OfficePhone $($user.OfficePhone) -departmentNumber $($user.departmentNumber) }

编辑:

我使用“-Add”运算符尝试了以下操作:

Import-Module ActiveDirectory
$users = Import-Csv -Path C:\users.csv
foreach ($user in $users) {
Get-ADUser -Filter "SamAccountName -eq '$($user.samaccountname)'" -Properties * | 
Set-ADUser  -Add @{departmentNumber = "$($user.departmentNumber)"}
}

以下,使用“-Replace”运算符:

Import-Module ActiveDirectory
$users = Import-Csv -Path C:\users.csv
foreach ($user in $users) {
Get-ADUser -Filter "SamAccountName -eq '$($user.samaccountname)'" -Properties * | 
Set-ADUser  -Replace @{departmentNumber = "$($user.departmentNumber)"}
}

还是没有运气——我的语法是不是搞错了?

【问题讨论】:

  • 如果我们能看到 CSV 内容会很有帮助。如果您没有收到错误消息,则可能是 $user.departNumber 的值是 $null 或类似地不是您所期望的。
  • 我正在使用测试 CSV,其中一条记录使用上面 Set 子句中列出的相同列,并且每个字段都有一个要输入的值。

标签: powershell active-directory


【解决方案1】:

我正在快速查看 Set-ADUser 的帮助:https://technet.microsoft.com/en-us/library/ee617215.aspx

我看到 -Department 的参数,但没有看到 -DepartmentNumber 的参数

仅使用 -Department 在贵公司的结构中是否有效?

对于自定义属性,应该可以使用 -Add 参数

-Add @{otherTelephone='555-222-1111', '555-222-3333'; otherMobile='555-222-9999' }

为了使用 -Add 或 -Replace,您需要使用哈希表而不是字符串作为输入。 这是我用来将字符串转换为单个项目哈希表的一组快速命令:

$DeptNo = 'test'
$hash = @{}
$hash.Add('DepartmentNumber',$DeptNo)
$hash

$hash 的输出:

Name                           Value
----                           -----
DepartmentNumber               test

我认为你将能够使用 -Add $hash 让它做你想做的事。

【讨论】:

  • 很遗憾没有。我只是大轮子上的一个小齿轮,这就是“他们”想要填充的领域。 departmentNumber 参数仅在查看高级功能时位于属性编辑器选项卡下,所以我想知道它是某种隐藏参数还是其他什么...
  • 为此,您需要使用 -Replace 或 -Add 参数。它们专为更改无法使用普通参数更改的属性而设计。
  • 我发现一篇文章对此进行了更详细的介绍。您可能会遇到一些困难,因为这些参数需要一个哈希表作为输入,您可能需要进行一些试验和错误才能使其正常工作。我无能为力,因为我手边没有测试环境。 link
  • 嗯,仍然没有运气 - 我正在使用 CSV;我必须使用不同的分隔符吗?
  • 您的其他参数需要字符串作为输入,因此它们正在工作。这个期待一个哈希表。有人可能会打败我,但我会看看我是否能弄清楚如何将字符串转换为哈希表。
【解决方案2】:

这是我让它工作的代码:

Set-ADUser -Identity $samName -Add @{'departmentNumber'="$UserDept"}

请务必注意,如果没有任何内容,您只能使用 -Add 否则使用-Replace

$UserDept 是一个数字,但引号使它成为一个字符串 并且属性必须有单引号。

【讨论】:

    猜你喜欢
    • 2019-03-04
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多