【发布时间】:2020-06-06 07:19:58
【问题描述】:
我需要弄清楚如何通过可分辨名称从下面的 foreach 循环中排除多个 OU,这样用户/计算机帐户就不会被找到两次(一次在它的原始 OU 中,然后再次在它移动到的 OU 中。
我尝试使用 Where 子句尝试过滤单个 OU 以进行测试,但是当我使用它运行脚本时,它下面没有任何处理。从我的 foreach 循环中排除 OU 的最佳方法是什么?
foreach ($OU in $OUs) {
#Where($OU.DistinguishedName -ne 'OU=Disabled Users,DC=test,DC=local') {
$params = @{
SearchBase = [String]$OU.DistinguishedName
SearchScope = [String]"OneLevel"
AccountInactive = $true
TimeSpan = ([timespan]$days)
Verbose = $true
}
If($users) {
$params.Add("UsersOnly",$true)
}
ElseIf($computers) {
$params.Add("ComputersOnly",$true)
}
$accounts = Search-ADAccount @params
$params.Clear()
foreach($account in $accounts) {
If ($noDisable -notcontains $account.Name -and $account.ObjectClass -eq "User" ) {
$params = @{
Identity = [string]$account.DistinguishedName
Verbose = $true
}
Disable-ADAccount @params @whatIf
$params.Add("Description",$description)
Set-ADUser @params @WhatIf
$params.Remove('Description')
$params.Add("TargetPath", 'OU=Disabled Users,DC=test,DC=local')
Move-ADObject @params @WhatIf
}
elseif($noDisable -notcontains $account.Name -and $account.ObjectClass -eq "Computer") {
$params = @{
Identity = [string]$account.DistinguishedName
Verbose = $true
}
Disable-ADAccount @params @whatIf
$params.Add("Description",$description)
Set-ADComputer @params @WhatIf
$params.Remove('Description')
$params.Add("TargetPath", 'OU=Disabled Computers,DC=test,DC=local')
Move-ADObject @params @WhatIf
}
}
#}
}
【问题讨论】:
标签: powershell foreach where-clause