使用 New-ADUser 自動化 Active Directory 用戶創建

你是否厭倦了每天都要打開Active Directory (AD) 使用者和電腦 (ADUC),點來點去,打錯字,並且重複進行創建新使用者帳戶的過程?如果是的話,你需要使用 PowerShell 的 New-ADUser cmdlet 自動化使用 Active Directory 添加使用者的常見程序!

現在是周五晚上,離你計劃周末回家只有一小時的時間。這是個忙碌的一周,所以你已經計劃和你最親密的朋友們一起觀看重要比賽。但是,你的老闆隨意走過來問:“你有收到郵件嗎?你能在今天結束之前處理這個嗎?”你迅速打開了 Microsoft Outlook,果然是一封來自 HR 部門的郵件,你的經理也被抄送在內,要求你在離開辦公室之前提供 400 個新員工的 Active Directory (AD) 帳戶。太好了,比賽泡湯了。

你迅速在網上搜索了一些選項來加快創建這些使用者帳戶的速度,並發現你可以使用命令行和一個名為 New-ADUser 的 PowerShell cmdlet 自動化 AD 帳戶的創建。

通常,管理員會通過使用安裝在桌面電腦上的Active Directory 使用者和電腦MMC 擴展來手動創建 AD 帳戶,該擴展是通過遠程伺服器管理工具 (RSAT)安裝的。但是使用這種方式創建 AD 使用者帳戶平均需要三分鐘。創建 AD 使用者帳戶並不是一項光榮的工作,非常適合自動化。

管理員使用 New-ADUser cmdlet 創建 AD 使用者帳戶有三種常見的方法。

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

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

在本文中,您将学习如何使用 New-AdUser 利用这些方法的优势。

使用 ManageEngine ADManager Plus 管理和报告活动目录、Exchange 和 Microsoft 365。立即下载免费试用版!

先决条件/要求

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

滿足這些需求後,您就可以開始了!

使用 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屬性的新使用者帳戶。這個新帳戶將是員工詹姆斯·布朗的帳戶。

請注意,此方法存在一個限制,只能複製以下鏈接中列出的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

现在,您应该有一个使用模板对象带入了所有允许的AD属性的James帐户。

用户帐户模板的注意事项

使用此方法的一个常见错误是在捕获模板对象时使用*通配符作为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中是唯一的。因此,在New-ADUser命令中應該覆蓋UPN,或者在模板變量中將其設置為空(如下所示)。

$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
}

使用ManageEngine ADManager Plus管理和報告Active Directory、Exchange和Microsoft 365。 下載免費試用版!

總結

在本文中,您學會了使用三種不同方法來提供新的用戶帳戶:

  1. 單個帳戶創建
  2. 從範本複製用戶帳戶
  3. 使用CSV文件創建多個帳戶

這些是在您的環境中提供新用戶的基本方法。當您通過創建PowerShell函數和模塊將它們捆綁在一起時,這些方法非常有效。您甚至可以更進一步,使用SQL或Oracle數據庫作為源(而不是CSV文件)創建自己的自動化流程。根據您獨特的需求和用例,請隨意利用每種方法。

希望這些信息能夠幫助您!您學到了一項新技能,並能夠在不犧牲工作與生活平衡的情況下參加派對與朋友一起度過!

進一步閱讀

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