Active Directory 图形化管理工具(例如 Active Directory Users and Computers(ADUC))适合对单个账户执行操作。但当你需要处理多个 AD 账户时,PowerShell 会是更灵活的工具。在这篇文章中,我将展示如何使用 PowerShell,通过使用逗号分隔文件,对 AD 用户和计算机账户进行单独以及批量的锁定、解锁、启用和禁用。
在你能够运行 Active Directory PowerShell cmdlet 之前,你需要在计算机上安装 PowerShell 的 Active Directory 模块。如果你使用的是 Windows 10,请从 Microsoft 的网站下载适用于 Windows 10 的 Remote Server Administration Tools (RSAT)(此处),然后安装它。接着,通过以本地管理员权限打开 PowerShell 提示符,并运行 Enable-WindowsOptionalFeature cmdlet(如下所示)来启用 AD PowerShell 模块功能:
Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell
另外,您也可以使用 Update-Help cmdlet 更新帮助文件:
Update-Help -Module ActiveDirectory -Verbose -Force
请务必关闭 PowerShell 提示符,因为除此之外不需要使用提升的权限。以下说明可以在任何具有权限的用户的安全上下文中运行;该用户在 Active Directory 中具备执行用户账户操作的权限,例如解锁用户账户,以及启用和禁用用户、计算机和服务账户。
如何查找被锁定的 Active Directory 帐户
无法使用 PowerShell 或 GUI 锁定 Active Directory 帐户;实际上也没有理由想要这样做。但您可以借助 Search-ADAccount cmdlet 来搜索被锁定(锁定状态)的用户帐户。这里,我将 Search-ADAccount cmdlet 的结果通过管道传递给 Select-Object cmdlet,以仅显示每个被锁定帐户的 Name 和 SamAccountName 属性:
Search-ADAccount -LockedOut -UsersOnly | Select-Object Name, SamAccountName
如何解锁 Active Directory 帐户
您可以使用以下命令轻松解锁用户帐户:Unlock-ADAccount cmdlet。使用 -Identity 参数来指定要解锁的帐户;您可以提供其专有名(distinguished name)、安全标识符(SID)、全局唯一标识符(GUID)或 Security Account Manager(SAM)帐户名。下面我将解锁帐户 RussellS:
Unlock-ADAccount -Identity RussellS
如何启用 Active Directory 帐户
如果由于任何原因禁用了帐户对象,您可以使用以下命令启用它:Enable-ADAccount cmdlet:
Enable-ADAccount -Identity RussellS
如何禁用 Active Directory 帐户
同样地,Disable-ADAccount cmdlet 用于禁用 AD 帐户:
Disable-ADAccount -Identity RussellS
从 CSV 文件禁用用户
你还可以禁用逗号分隔(.csv)文本文件中列出的所有 Active Directory 用户帐户。该文件必须包含表头,然后是用户名称列表,每行一个。我的 CSV 文件只有一列(表头为“Name”),因此我这个逗号分隔文件里没有逗号!如果你的 CSV 文件有多于一列,那么这些额外的列将会被脚本直接忽略。
我首先将 CSV 文件的内容导入为一个对象($users),然后使用 ForEach 循环来禁用文本文件中每一行对应的用户。下面是 PowerShell 脚本:
$users=Import-CSV c:tempusers.csv
ForEach ($user in $users)
{
Disable-ADAccount -Identity $($user.name)
}
使用 Netwrix Directory Manager 管理 AD 账户
从 CSV 文件禁用计算机帐户
用于禁用 CSV 文件中列出的计算机帐户的 PowerShell 脚本几乎相同。主要区别在于:我必须在 -Identity 参数值的末尾添加美元符号($),以指定我想要禁用的是计算机对象,而不是用户帐户对象。我还会将变量和文件名更改为更适合计算机帐户的名称。
脚本如下:
$computers=Import-CSV c:tempcomputers.csv
ForEach ($computer in $computers)
{
Disable-ADAccount -Identity "$($computer.name)$"
}
要检查结果,请使用 Search-ADAccount cmdlet:
Search-ADAccount –AccountDisabled –ComputersOnly | Select-Object Name, SamAccountName
禁用不活跃用户
Search-ADAccount 和 Disable-ADAccount 这两个 cmdlet 可以一起使用来禁用不活跃的用户帐户。下面我给出两个示例。首先,我将创建一个新的 timespan 对象($timespan),并将其设置为 90 天;然后我会把它作为 -TimeSpan 参数的值,用于禁用在过去三个月内没有活动过的帐户。 -AccountInactive 参数要求域功能级别为 Windows Server 2003 或更高。
$timespan = New-Timespan -Days 90
Search-ADAccount -UsersOnly -AccountInactive -TimeSpan $timespan | Disable-ADAccount
另一个选择是使用 -DateTime 参数,返回自指定日期以来一直处于不活跃状态的帐户。该脚本会禁用所有自 2018 年 6 月 3 日以来未处于活动状态的帐户:
Search-ADAccount -UsersOnly -AccountInactive -DateTime ‘6/3/2018’ | Disable-ADAccount
值得注意的是,由于 Active Directory 同步 LastLogOnDate 这个属性的方式,当在 –AccountInactive 参数中配合使用 Search-ADAccount cmdlet 时返回的结果可能最多会偏差 9–14 天。
如你所见,使用 PowerShell 管理 Active Directory 帐户的状态非常直接。由于 PowerShell 是面向对象的,因此很容易创建包含你希望处理的数据的对象,然后将其传递给执行所需操作的其他 cmdlet。
分享到
了解更多
关于作者
Russell Smith
IT 顾问
专注于管理与安全技术的 IT 顾问和作者。Russell 拥有超过 15 年的 IT 经验,撰写过一本关于 Windows 安全的书籍,并共同撰写了 Microsoft 官方学术课程(MOAC)系列的相关教材。