【发布时间】:2015-10-03 00:36:57
【问题描述】:
我有另一个脚本将终止的用户移动到 Active Directory 中的“终止”OU。它在描述中添加注释,并将当前日期添加到“公司”字段中。然后,此脚本在该 OU 中查找超过 60 天的任何内容,并删除 AD 帐户,并删除其他服务器上的一些相关文件夹。
它往往运行速度很慢,并且在运行时会耗尽内存。任何人都可以看到会发生这种情况的任何原因吗?也许这不是最有效的方法?
提前感谢您的帮助!
Import-Module ActiveDirectory
$users = Get-ADUser -SearchBase "ou=Terminated,dc=domain,dc=com" -Properties "company", "description" -Filter * | where {$_.description -like "Terminated*" }
$Date = Get-Date
$Today = $Date.DayOfYear
$CSVDate = Get-Date -Format yyyy-MM-dd
$TermList = @()
foreach($user in $users)
{
$DN = $user.DistinguishedName
$Homefolder = ("\\v12-dfs-home\homefolders$\" + $user.samaccountname)
$Profile = ("\\v12-dfs-pro\XA65Profiles\" + $user.samaccountname)
$Desktop = ("\\v12-dfs-home\desktops\" + $user.samaccountname)
$Term = $user.company
$Result = ($Today - $Term)
$altResult = ($Today + 365) - $Term
If ($Result -gt 60)
{
$TermList += $user | %{Get-ADUser $_.DistinguishedName -properties displayName, employeeID, samaccountname, title, Description | select displayName, employeeID, samaccountname, title, Description}
Remove-ADUser -Identity $DN -Confirm:$false
Remove-Item $Homefolder -Force -Recurse -ErrorAction SilentlyContinue -Confirm:$false
Remove-Item $Profile -Force -Recurse -ErrorAction SilentlyContinue -Confirm:$false
Remove-Item $Desktop -Force -Recurse -ErrorAction SilentlyContinue -Confirm:$false
}
ElseIf ($Result -lt 0)
{
If ($altResult -gt 60)
{
$TermList += $user | %{Get-ADUser $_.DistinguishedName -properties displayName, employeeID, samaccountname, title, Description | select displayName, employeeID, samaccountname, title, Description}
Remove-ADUser -Identity $DN -Confirm:$false
Remove-Item $Homefolder -Force -Recurse -ErrorAction SilentlyContinue -Confirm:$false
Remove-Item $Profile -Force -Recurse -ErrorAction SilentlyContinue -Confirm:$false
Remove-Item $Desktop -Force -Recurse -ErrorAction SilentlyContinue -Confirm:$false
}
}
}
# Output CSV of accounts being deleted
$TermList | Export-Csv c:\Results\Deleted_$CSVDate.csv -NoType
【问题讨论】:
-
在任何给定时间,终止的 OU 中可以有多少用户?是文件删除部分需要时间吗?做我的猜测
-
@Matt 终止的 OU 中通常有 100-200 个用户,当脚本搜索超过 60 天的用户时,它通常会返回大约 15-30 个左右。这可能是文件删除部分需要时间,但这是否会占用我正在运行脚本的服务器上的所有内存?
-
不要构建数组。获取对象并传递给
ForEach-Object来处理每一个。另一种说法是利用管道。
标签: powershell active-directory