我们希望在我们的域中找到具有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一起使用,但我没有尝试过。
答案 0 :(得分:1)
说实话,你错过了很多。首先,你并没有真正“找到”用户更改属性。
您不需要创建新的PSDrive,原因有两个:
1)如果您已加载AD模块,则已经有一个 2)首先不需要它。
从this SO answer开始,进行一些调整,你应该设置好。
get-aduser -filter "*" -property office |
where-object {$_.office -like 'Student*'} | set-aduser -whatif -office "";