New-ADUserを使用したActive Directoryユーザー作成の自動化

Active Directory (AD) Users and Computers (ADUC)を開き、クリックして、タイプミスをし、新しいユーザーアカウントを作成する手続きを今日6回目に行うのにうんざりしていませんか?もしそうなら、New-ADUserコマンドレットを使用してPowerShellを使ってActive Directoryを使用してユーザーを追加する手順を自動化する必要があります!

金曜日の夕方で、週末に帰宅する1時間前です。忙しい一週間だったので、親しい友人たちと大きな試合を見る計画を立てていました。しかし、上司がさりげなく近づいてきて、「メールを受け取った?日の終わりまでにこれを処理できる?」と尋ねます。急いでMicrosoft Outlookを開くと、上司によってCCされたHR部門からのメールがあり、オフィスを出る前に400人の新しい従業員のActive Directory(AD)アカウントをプロビジョニングするように求められています。素晴らしい。試合は台無しです。

急いでインターネットを検索して、これらのユーザーアカウントの作成を迅速化するいくつかのオプションを見つけ、コマンドラインとPowerShellのNew-ADUserコマンドレットを使用してADアカウントのプロビジョニングを自動化できることを知ります。

通常、管理者はデスクトップコンピュータにインストールされたActive Directory Users and Computers MMCスナップインを使用してADアカウントを手動で作成します。しかし、この方法でADユーザーアカウントを作成するには、平均してユーザーアカウントごとに3分かかります。ADユーザーアカウントの作成は魅力的な仕事ではありませんし、自動化のために適しています。

管理者がNew-AdUserコマンドレットを使用してADユーザーアカウントオブジェクトを作成する一般的な方法は3つあります。

  1. 必要なコマンドレットパラメータを使用して、Active Directoryユーザーアカウントを追加します。
  2. Instanceパラメータを使用して、既存のADユーザーオブジェクトをコピーして新しいアカウントを作成します。
  3. Import-CsvコマンドレットをNew-ADUserコマンドレットと組み合わせて、カンマ区切り値(CSV)ファイルを使用して複数のActive Directoryユーザーオブジェクトを作成します。

これらの手法は、効率的なソリューションを作成するために組み合わせることができます。たとえば、CSVファイルを使用して複数の新しいADアカウントを生成するために、すべてのオプションを使用してテンプレートADアカウントを作成することができます。

この記事では、これらの方法を活用してNew-AdUserを使用する方法について説明します。

ManageEngine ADManager Plusを使用してActive Directory、Exchange、およびMicrosoft 365を管理およびレポートします。無料トライアルをダウンロード!

前提条件/要件

New-AdUserコマンドレットを使用する前に、いくつかの前提条件を満たしていることを確認する必要があります。

  • Windows PowerShell 5.1
  • リモートサーバー管理ツール(RSAT) パッケージがインストールされました。このパッケージには、Active DirectoryのPowerShellモジュールが含まれており、New-AdUserコマンドレットを使用することができます。
  • ユーザーアカウントを作成するために、同じドメインのWindowsコンピューターにログインしてください。
  • 新しいユーザーアカウントを作成する権限を持つADユーザーアカウントでログインしてください。

これらの要件を満たしていれば、準備が整っています!

New-ADUserコマンドレットを使用して、単一のユーザーアカウントを作成します。

基本的なレベルでNew-ADUserがどのように動作するかを示すために、まず単一のユーザーアカウントを作成しましょう。New-ADUserには必須のパラメータがあまりありません。実際、唯一の必須パラメータはNameパラメータですが、単独ではほとんど使用されません。

通常、複数の異なるパラメータを使用してユーザーアカウントを作成します。幸いなことに、ほとんどのパラメータは直感的で、ADUCで表示されるものとよく一致しています。以下の例では、多くのパラメータを簡単に使用することができます。各パラメータは、ほぼ単一のユーザーアカウント属性に対応しています。

なお、この例ではバッククォートを使用しています。これは読みやすさのために長い1行を防ぐためのものです。

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)を使用します。おそらく、同じstatelocationdepartmentcountrycityのAD属性を持つ新しいユーザーアカウントを作成する必要があります。この新しいアカウントは従業員のJames Brownのためです。

この方法には制限があり、以下のリンクにリストされているADアカウントのプロパティのみがこのプロセスでコピー可能です。詳細については、Copy a User’s Properties Microsoftドキュメントページを参照してください。

最初のステップは、Propertiesパラメータを使用してコピーするすべての属性が提供されているADユーザーアカウントのテンプレートを見つけることです。以下に示すように、Get-ADUserコマンドレットを使用します。これにより、ADユーザーオブジェクトが$template_account変数に格納されます。

2行目では、テンプレートオブジェクトの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属性があるはずです。

ユーザーアカウントのテンプレートの注意点

このアプローチでよくある間違いは、テンプレートオブジェクトをキャプチャする際に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フォレスト全体で一意である必要があることです。したがって、UPNはNew-ADUserコマンドで上書きするか、テンプレート変数でnullに設定する必要があります(以下に示す)。

$template_account.UserPrincipalName = $null

ワイルドカードアプローチを使用すると失敗するもう一つの理由は、ワイルドカードによってコピーされるADのいくつかのプロパティが読み取り専用であることです(セキュリティアカウントマネージャーが所有しています)。

Permission error when copying AD objects

CSVファイルを使用して新しいユーザーアカウントを作成する

さらに学んだことを活かすためには、CSVファイルから従業員アカウントを読み取り、New-ADUserを使用してADユーザーアカウントを作成することです。

このソリューションは、多くの組織で使用されており、新しい従業員のオンボーディング情報を作成するHRシステムと組み合わせてアカウント作成を自動化するために使用されます。

CSVファイルで新しい従業員のリストが送られてきたとします。CSVファイルの各行は1つの行を表し、以下の列があります:FirstNameLastNameDepartmentStateEmployeeID、およびOffice。ユーザーログインアカウントの命名規則は、従業員の姓と連結された最初のイニシャルです。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を管理およびレポートします。 無料トライアルをダウンロード!

要約

この投稿では、3つの異なる方法を使用して新しいユーザーアカウントをプロビジョニングする方法を学びました:

  1. 単一のアカウント作成
  2. テンプレートからユーザーアカウントをコピーする
  3. CSVファイルを使用して複数のアカウントを作成する

これらは環境で新しいユーザーをプロビジョニングするための基本的な方法です。これらの方法は、PowerShell関数とモジュールを作成してそれらをまとめると非常に効果的です。さらに、CSVファイルの代わりにSQLまたはOracleデータベースをソースとして使用して独自の自動化プロセスを作成することもできます。独自の要件とユースケースに基づいて、各方法を活用してください。

おそらく、この情報が役立つでしょう!新しいスキルを学び、友達とのパーティーに参加することができ、仕事とプライベートのバランスを犠牲にすることなく達成できました!

さらなる読み物

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