使用Powershell,如何仅针对特定用户对特定属性进行批量更新?

时间:2013-12-16 19:38:20

标签: powershell active-directory

我们希望在我们的域中找到具有Office属性(即“physicalDeliveryOfficeName”)以“Student”开头的用户(例如“Student123456”,“Student111111”等)并清除Office值(即设置)它到“”)。具有不同Office值的用户应保持原样。我尝试了以下内容:

New-PSDrive -Name AD1 -PSProvider ActiveDirectory -Root "OU=BASE,DC=DOMAIN,DC=org"
Set-ItemProperty -Filter {physicalDeliveryOfficeName -Like "Student*"} -Path "ad:\OU=BASE,DC=DOMAIN,DC=org" -Name physicalDeliveryOfficeName -Value "" -WhatIf

我的输出是:

What if: Performing operation "Set" on Target "OU=BASE,DC=DOMAIN,DC=org".

就是这样。我希望通过匹配的Office属性找到每个用户的“假设”行。

请注意,我只使用了PSDrive,因为这是this Scripting Guy article中提到的内容。

我做错了吗?

答案:我在下面尝试了alroc的解决方案,看到了我正在寻找的WhatIf系列。但是当我删除“-Whatif”时,我为每个用户收到了一个InvalidOperation错误。我最终使用了以下代码:

ForEach ($User in (Get-ADUser -Filter * -Properties Office)){
  If ($User.Office -match "Student*"){
    Set-ADUser $User -Office " "
  }
}

注意新Office属性中的空格 - 使用空字符串时出现类似错误。使用空格而不是空字符串可能与alroc一起使用,但我没有尝试过。

1 个答案:

答案 0 :(得分:1)

说实话,你错过了很多。首先,你并没有真正“找到”用户更改属性。

您不需要创建新的PSDrive,原因有两个:

1)如果您已加载AD模块,则已经有一个 2)首先不需要它。

this SO answer开始,进行一些调整,你应该设置好。

get-aduser -filter "*" -property office |
    where-object {$_.office -like 'Student*'} | set-aduser -whatif -office "";