使用 New-ADUser 自动化活动目录用户创建

你厌倦了打开Active Directory(AD)用户和计算机(ADUC),四处点击,打错字并且按部就班地创建新用户账户吗?如果是这样,你需要自动化使用 PowerShell 中的 New-ADUser cmdlet 来添加用户的常见过程!

现在是星期五晚上,离你计划周末回家只有一个小时了。这是一个忙碌的一周,所以你已经决定和你最亲密的朋友一起观看大比赛。但是,你的老板随意走过来问:“你收到邮件了吗?你能在今天下班前处理好这个吗?”你迅速打开了 Microsoft Outlook,果然是人力资源部门的邮件,你的经理抄送了你,要求你在离开办公室之前为 400 个新员工的 Active Directory(AD)账户提供支持。太好了。大比赛泡汤了。

你迅速在互联网上搜索了一些加快创建这些用户账户的选项,并发现你可以使用命令行和一个名为 New-ADUser 的 PowerShell cmdlet 来自动化 AD 账户的提供。

通常,管理员会通过使用安装在你的桌面计算机上的Active Directory 用户和计算机MMC 快照来手动创建 AD 账户,该快照通过远程服务器管理工具(RSAT)安装。但是以这种方式创建 AD 用户平均每个用户账户需要三分钟的时间。创建 AD 用户账户并不是一项光彩的工作,而且非常适合自动化。

管理员使用 New-AdUser cmdlet 创建 AD 用户账户对象的常见方法有三种。

  1. 添加一个 Active Directory 用户帐户,使用所需的和额外的 cmdlet 参数。
  2. 使用 Instance 参数复制现有的 AD 用户对象,创建一个新帐户。
  3. Import-Csv cmdlet 与 New-ADUser cmdlet 配对,使用逗号分隔值(CSV)文件创建多个 Active Directory 用户对象。

有时可以将这些做法结合起来,以创建更高效的解决方案。例如,您可以使用所有三个选项创建一个模板 AD 帐户,然后使用 CSV 文件复制它,以生成多个新的 AD 帐户。

在本文中,您将学习如何利用每种方法使用 New-AdUser

使用 ManageEngine ADManager Plus 管理和报告 Active Directory、Exchange 和 Microsoft 365。 下载免费试用版!

先决条件/要求

在开始使用 New-AdUser cmdlet 之前,您需要确保满足一些先决条件。

  • Windows PowerShell 5.1
  • 安装了远程服务器管理工具(RSAT)包。此包安装了包含PowerShell模块的Active DirectoryNew-AdUser cmdlet
  • 已登录到与要创建用户帐户相同域中的Windows计算机
  • 以拥有权限创建新用户帐户的AD用户帐户身份登录

一旦满足这些要求,您就可以开始了!

使用New-ADUser cmdlet创建单个用户帐户

让我们首先创建一个单个用户帐户,以演示New-ADUser在基本层面上的工作方式。您会发现New-ADUser没有许多强制参数。实际上,唯一的强制参数是Name参数,但通常不单独使用。

通常,您会使用许多不同的参数来创建用户帐户。幸运的是,大多数参数都是不言自明的,并且与ADUC中看到的内容很匹配。在下面的示例中,您可以轻松使用许多参数。每个参数大致对应一个单独的用户帐户属性。

请注意,我们在示例中使用反引号。这仅是为了防止长行以提高可读性。

PS51> New-ADUser `
    -Name "Kevin Sapp" `
    -GivenName "Kevin" `
    -Surname "Sapp" `
    -SamAccountName "kesapp-test" `
    -AccountPassword (Read-Host -AsSecureString "Input User Password") `
    -ChangePasswordAtLogon $True `
    -Company "Code Duet" `
    -Title "CEO" `
    -State "California" `
    -City "San Francisco" `
    -Description "Test Account Creation" `
    -EmployeeNumber "45" `
    -Department "Engineering" `
    -DisplayName "Kevin Sapp (Test)" `
    -Country "us" `
    -PostalCode "940001" `
    -Enabled $True

包含AD用户对象的组织单位(OU)不能有重复的SamAccountName。

现在账户已创建,请确认使用 Get-ADUser cmdlet 创建了账户。如下所示,Get-AdUser 返回了刚创建的用户账户的一些常见属性。

PS51> Get-ADUser -Identity kesapp-test -Properties State,Department,Country,City

DistinguishedName : CN=Kevin Sapp,CN=Users,DC=mylab,DC=local
Enabled           : True
GivenName         : Kevin
Name              : Kevin Sapp
ObjectClass       : user
ObjectGUID        : 3b18338d-b3c7-4d00-a54a-1d3121e1363f
SamAccountName    : kesapp-test
SID               : S-1-5-21-1181311581-1397355964-1468337501-1109
Surname           : Sapp
UserPrincipalName : kesapp-test@mylab.local

复制现有的AD用户对象

另一种账户创建方法是复制现有的AD用户对象,并将其用作新AD账户的模板。这种方法有几个好处:

  • 节省了逐个指定每个参数的时间
  • 有助于标准化AD账户的创建
  • 它防止了手动账户创建引起的人为错误,并允许同一团队的员工拥有相同的自定义AD属性

对于这个示例,您将使用刚创建的账户作为模板(kesapp-test)。也许您需要创建一个具有相同的状态位置部门国家城市AD属性的新用户账户。这个新账户将是员工James Brown的账户。

请注意,这种方法存在一些限制,只有以下链接中列出的AD账户属性才能通过此过程复制。欲了解更多信息,请查看复制用户属性的Microsoft文档页面

第一步是找到将用作模板的AD用户帐户,同时确保通过Properties参数提供了要复制的所有属性。为此,请使用如下所示的Get-ADUser cmdlet。这只是将AD用户对象存储在$template_account变量中。

请注意,第二行将模板对象的UserPrincipalName(UPN)属性设置为$null。建议这样做是为了确保模板的UPN是唯一的。每个AD用户帐户必须具有唯一的UPN。

$template_account = Get-ADUser -Identity kesapp-test -Properties State,Department,Country,City
$template_account.UserPrincipalName = $null

一旦捕获了模板用户帐户,您就可以将该对象用作Instance参数的值,并提供任何用户特定的参数来填充其他属性,如下所示。

New-ADUser `
    -Instance $template_account `
    -Name 'James Brown' `
    -SamAccountName 'jbrown' `
    -AccountPassword (Read-Host -AsSecureString "Input User Password") `
    -Enabled $True

现在,您应该已经有了一个James帐户,并且模板对象带来了所有允许的AD属性

用户帐户模板常见问题

使用此方法的一个常见错误是在捕获模板对象时对Properties参数使用通配符*。管理员这样做是因为他们想一次复制所有用户帐户属性。但这样做是行不通的。

例如,下面的命令将会抛出错误:

$template_account = Get-ADUser -Identity kesapp-test -Properties *
New-ADUser `
    -Instance $template_account `
    -Name 'James Brown' `
    -SamAccountName 'jbrown' `
    -UserPrincipalName '[email protected]' `
    -AccountPassword (Read-Host -AsSecureString "Input User Password") `
    -Enabled $True

这种方法的问题在于UserPrincipalName属性需要在AD Forest中是唯一的。因此,UPN应该在New-ADUser命令中被覆盖,或者在模板变量中设置为空(如下所示)。

$template_account.UserPrincipalName = $null

另一个使用通配符方法失败的原因是,一些被通配符复制的AD属性是只读的(由安全帐户管理器拥有)。

Permission error when copying AD objects

使用CSV文件创建新用户帐户

更进一步学习的方法是从CSV文件中读取员工帐户,并使用New-ADUser创建AD用户帐户。

这种解决方案经常被许多组织用来自动化帐户创建,配合创建新员工入职信息的HR系统。

假设你收到了一个包含新员工列表的CSV文件。CSV文件中的每一行代表一个单独的帐户,并包含以下列:FirstNameLastNameDepartmentStateEmployeeIDOffice。用户登录帐户的命名约定是员工的名字首字母与姓氏连接在一起,例如ksapp代表员工Kevin Sapp

FirstName, LastName, Department, State, EmployeeID, Office, UserPrincipalName, SamAccountName, Password
Micheal, Jordan, NBA, Chicago, 23, Chicago Bulls, mjordan@mylab.local, mjordan, p@ssw0rd1
Lebron, James, NBA, Los Angeles,24, LA Lakers,ljames@mylab.local, ljames, p@ssw0rd2
Dwayne, Wade, NBA, Miami, 13, Miami Heat, dwade@mylab.local, dwade, p@ssw0rd3
$import_users = Import-Csv -Path sample.csv

一旦你有了CSV文件,就使用Import-Csv来读取CSV文件,并将每一行作为单独的对象捕获。然后遍历每一行,将CSV文件中的适当字段传递给New-ADUser的期望参数。你可以在下面看到一个示例。

$import_users | ForEach-Object {
    New-ADUser `
        -Name $($_.FirstName + " " + $_.LastName) `
        -GivenName $_.FirstName `
        -Surname $_.LastName `
        -Department $_.Department `
        -State $_.State `
        -EmployeeID $_.EmployeeID `
        -DisplayName $($_.FirstName + " " + $_.LastName) `
        -Office $_.Office `
        -UserPrincipalName $_.UserPrincipalName `
        -SamAccountName $_.SamAccountName `
        -AccountPassword $(ConvertTo-SecureString $_.Password -AsPlainText -Force) `
        -Enabled $True
}

管理和报告Active Directory、Exchange和Microsoft 365,请使用ManageEngine ADManager Plus。 立即下载免费试用!

摘要

在本文中,您学习了如何使用三种不同的方法来配置新用户帐户:

  1. 单个帐户创建
  2. 从模板复制用户帐户
  3. 使用CSV文件创建多个帐户

这些是在您的环境中配置新用户的基本方法。当您将它们捆绑在一起创建一个PowerShell函数和模块时,这些方法效果很好。您甚至可以进一步采取措施,使用SQL或Oracle数据库作为源(而不是CSV文件)创建自己的自动化流程。根据您自己独特的需求和用例,随意利用每种方法。

希望这些信息能在关键时刻为您节省时间!您学会了一项新技能,并且能够与朋友一起参加聚会,而不会牺牲您的工作与生活平衡!

进一步阅读

Source:
https://adamtheautomator.com/new-aduser/