在 Windows 环境中,管理 Active Directory 计算机账户时,确保系统内的计算机账户是最新且有效的非常重要。以下是一个 PowerShell 脚本的示例,展示了如何处理未登录超过 90 天的计算机账户。
首先,脚本通过导入 Active Directory 模块来启动工作。然后,它获取当前日期的 90 天前的日期,并通过 `Get-ADComputer` 命令获取所有计算机对象,并根据 `LastLogonDate` 属性筛选出未在过去 90 天内登录的计算机。筛选出的计算机列表会被输出到桌面上的 CSV 文件中,方便管理员进行检查和记录。
接下来,脚本还备份了这些未登录计算机的属性。为了确保信息完整,脚本创建了一个备份目录,逐一获取每台计算机的所有属性,并将非空的属性备份到 CSV 文件中。备份文件也存放在用户的桌面上,以便于后续的恢复和查看。
最后,脚本包含了一个测试功能,通过计算机名称查找并尝试删除指定的计算机账户。虽然这个功能用于测试目的,实际操作中可以根据需要删除不再使用的计算机账户,以保持目录的整洁性。
# 导入 Active Directory 模块
Import-Module ActiveDirectory
# 获取当前日期的 90 天前日期
$Date = (Get-Date).AddDays(-90)
# 获取所有计算机,并根据 LastLogonDate 筛选出 90 天内未登录的计算机
$oldComputers = Get-ADComputer -Filter * -Property Name, LastLogonDate | Where-Object {
$_.LastLogonDate -lt $Date -or $_.LastLogonDate -eq $null
}
# 确保有结果输出到控制台供检查
$oldComputers | Select-Object Name, LastLogonDate
# 输出未登录超过 90 天的计算机列表到桌面上的 CSV 文件
$csvPath = "$env:USERPROFILE\Desktop\old_computers.csv"
$oldComputers | Select-Object Name, LastLogonDate | Export-Csv -Path $csvPath -NoTypeInformation
# 提示完成
Write-Output "未登录超过 90 天的计算机列表已导出到桌面上的 $csvPath 文件。"
# 备份计算机属性
foreach ($computer in $oldComputers) {
try {
# 设置备份路径
$backupPath = "$env:USERPROFILE\Desktop\Computer_Backups\"
# 检查备份目录是否存在,如果不存在则创建
if (-not (Test-Path $backupPath)) {
New-Item -ItemType Directory -Path $backupPath | Out-Null
}
# 获取计算机的所有属性并确保非空
$propList = Get-ADComputer $computer.Name -Properties *
$propsToExport = @("Name", "LastLogonDate") + ($propList.PSObject.Properties | Where-Object {
$_.MemberType -eq 'NoteProperty' -and $_.Value -ne $null -and $_.Name -ne 'DistinguishedName' -and $_.Name -ne 'Name' -and $_.Name -ne 'LastLogonDate'
}).Name
# 备份属性到 CSV
$propList | Select-Object $propsToExport | Export-Csv -Path (Join-Path $backupPath ($computer.Name + "_Backup.csv")) -NoTypeInformation
Write-Output "已备份计算机: $($computer.Name)"
} catch {
Write-Error "备份计算机 $($computer.Name) 失败: $_"
}
}
# 仅删除指定的计算机(测试目的)
$testComputer = "DESKTOP-TEST"
# 尝试通过完整 DistinguishedName 查找计算机
$computerToDelete = Get-ADComputer -Filter {Name -eq $testComputer}
if ($computerToDelete) {
try {
# 删除计算机
Remove-ADComputer -Identity $computerToDelete.DistinguishedName -Confirm:$false
Write-Output "已删除计算机: $($testComputer)"
} catch {
Write-Error "删除计算机 $($testComputer) 失败: $_"
}
} else {
Write-Output "未找到计算机: $($testComputer)"
}
Write-Output "测试完成。"
通过这样的脚本,管理员可以高效地管理和清理不再活跃的计算机账户,同时确保数据的备份和完整性。这种方法不仅提升了工作效率,还减少了人工管理的错误风险。
如果喜欢这篇文章,请点下方在看,
后续推荐更多类似文章