@BenH和@TheMadTechnician非常有助于协助我使用脚本,以便从特定AD OU中的用户删除发布列表(仅限于)。我忘了添加所需的标准,因此决定张贴此作为一个单独的问题(原来的线程here)针对两个OU中的所有用户并删除通讯组列表 - 添加日期条件
@ BenH的做法是这样的:
$OUs = 'OU=PendingDeletion,OU=Users,DC=Stuff,DC=Place,DC=net','OU=HoldForReview,OU=Users,DC=Stuff,DC=Place,DC=net'
$Users = ForEach ($OU in $OUs) {
Get-ADUser -Filter * -SearchBase $OU
}
ForEach ($User in $Users) {
Get-ADPrincipalGroupMembership -Identity $user |
Where-Object {$_.GroupCategory -eq 0} |
ForEach-Object {
Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $_
}
}
我的问题 - 我可以迫使脚本只需要对已超过30天以前,通过增加一个变量,“位置对象”的逻辑来第一个循环是这样?:
$OUs = 'OU=PendingDeletion,OU=Users,DC=Stuff,DC=Place,DC=net','OU=HoldForReview,OU=Users,DC=Stuff,DC=Place,DC=net'
$30DaysOld = (Get-Date).AddDays(-30)
$Users = ForEach ($OU in $OUs) {
Get-ADUser -Filter * -SearchBase $OU |
Where-Object {$_.AccountExpirationDate -gt $30DaysOld}}
ForEach ($User in $Users) {
Get-ADPrincipalGroupMembership -Identity $user |
Where-Object {$_.GroupCategory -eq 0} |
ForEach-Object {
Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $_
}
}
可能过期的帐户行动?或者我需要将-gt
更改为-lt
才能获得正确的日期范围?
感谢您的期待!
你的问题是“我写过这段代码,它工作吗?”?那么......它工作吗?它能让你获得你期望的账户吗? – TessellatingHeckler
你会想要'-lt'。下面是一个应该说明的比较声明:'(Get-Date).AddDays(-30)-gt(Get-Date).AddDays(-40)'是'$ True'。您可以将'-WhatIf'添加到您的'Remove-ADPrincipalGroupMembership'中,以查看该命令将尝试执行的内容。 – BenH
@TessellatingHeckler - 坚实的点,对不起,我不是更清楚。经过审查,我的问题不是很好。 第一个循环不会收集正确的用户;检查变量'$ Users'的内容,AccountExpirationDate显示空白。我将该行更改为: 'Get-ADUser -Filter * -Properties AccountExpirationDate -SearchBase $ OU' 现在我看到在AD帐户中列出的Exp Date,但使用'-lt'返回所有用户或AD中没有过期日期,并且'-gt'不返回任何用户。 – 3Jake