自动化管理:PowerShell 脚本优化 Active Directory 计算机账户

文摘   2024-09-19 23:44   北京  

在 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 "测试完成。"

通过这样的脚本,管理员可以高效地管理和清理不再活跃的计算机账户,同时确保数据的备份和完整性。这种方法不仅提升了工作效率,还减少了人工管理的错误风险。

如果喜欢这篇文章,请点下方在看,

后续推荐更多类似文章

日常运维文档
多做实验,少做自己!分享一些日常运维和学习文档,欢迎大家一起交流。
 最新文章