Active Directory ユーザーの一括登録 その②


前回の 備忘録 ( .csv ファイルにADユーザーの情報を記載して、PowerShell の New-ADUser コマンド で一括作成 ) の続きになります。

今回は、登録するユーザ用の個人フォルダを併せて作成したかったので、 New-ADUser した後に New-Item でフォルダを作成する PowerShell スクリプト にしました。

 


 

1)  ユーザ情報の入った .csv を 「 C:\99.work\new_user.csv 」 としてファイルを設置。( .csv の中身については、前回の備忘録 を参照ください。)
※ このあとのスクリプトを実行することで、new_user.csv は new_user-YYYYMMDD-HHMMSS.csv にリネームするようにしています。(残っちゃうと事故の元なので)

 

2)  スクリプト ( と実行用のショートカット ) を 「 C:\10.AD_User_Create\ 」 に置く。

↑ このフォルダの中身はこんなです。
00a. と 00b. はファイル名通りで、中身は 0 byte です。

ファイル「10.AD-User-Add.ps1」 が、 New-ADUser して New-Item して .csv をリネームする用のスクリプトファイル、

ファイル 「01.これを右クリックで管理者として実行すると10.が実行されます。」 は 「10.AD-User-Add.ps1」 を実行するためのショートカットで、 
ファイル名の通り、「01.~」 を右クリックして管理者として実行すると、「10.~」 が起動されて .csv に記載したユーザがADに登録されて、個人用フォルダが作成されます。

直接  「 10.~.ps1 」 を実行してもよいのですが、その場合処理結果が流れてしまう(画面が閉じてしまう)ので、powershell.exe から -noexit オプションで実行する様にショートカットを作成してます。

ファイル 「01.これを右クリックで管理者として実行すると10.が実行されます。」 の中身は、

ショートカットのリンク先は下記になります。

 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit C:\10.AD_User_Create\10.AD-User-Add.ps1

 

 

「10.AD-User-Add.ps1」の中身は ↓ こんなんです。

 <###
    このスクリプトについて:
    .csv ファイルの情報を元に Active Directory のユーザを追加します。

    !事前に STEP 001 の .csv 作成を忘れずに!

    STEP 001 = なんとかして、.csv を作成
    STEP 002 = ADユーザの作成、個人フォルダの作成、.csv をリネームして保管

    【更新履歴】
      2016.10.14 新規作成 o'miz
###>


<###
    STEP 001. 【事前準備】登録するユーザーのリスト(*.csv)を作成します。

    作成したら、↓ ここに置いてください。

    C:\99.work\new_user.csv

###>



<###
    STEP 002. ADユーザーの作成と、個人フォルダの作成

    ※ ユーザーの初期パスワードは Himitsu@1234 です。

###>


### C:\99.work\new_user.csv の存在確認

$csv_path =  "C:\99.work\new_user.csv"
$csv_exist = (Test-Path -Path $csv_path)


### C:\99.work\new_user.csv が存在した場合は、ADユーザ作成 & 個人フォルダの作成を行う
if($csv_exist -eq $true) 
{

    ### 例外を catch するために $ErrorActionPreference自動変数の値を stop に設定
    $ErrorActionPreference = "stop"

    ### ADユーザー作成
    Try 
    {
        ### Get-Content でユーザ一覧の .csv ファイルを読み取って、
        Get-Content $csv_path |
        ### ConvertFrom-Csv に渡して、
        ConvertFrom-Csv |
        ### ForEach-Object(= % )で New-ADUserを繰り返し(.csv の末尾のエントリーまで)実行します。
        %
        {
        New-ADUser $_.Name -Surname $_.Surname -GivenName $_.GivenName -DisplayName $_.DisplayName -UserPrincipalName $_.UserPrincipalName -AccountPassword (ConvertTo-SecureString "Himitsu@1234" -AsPlainText -Force) -ProfilePath \\hogehoge.local\Profile$\UserProfiles$\%username% -Path "OU=test,DC=hogehoge,DC=local" -Enabled $true -ChangePasswordAtLogon $true -HomeDrive O: -HomeDirectory \\hogehoge.local\Share\共有フォルダ
        } |
        Out-Null

        Write-Output ""
        Write-Output "================================"
        Write-Output "下記のADユーザーを登録しました。"
        Write-Output ""
        Get-Content $csv_path |
        ConvertFrom-Csv |
        %
        {
        $_.Name + "    " + $_.DisplayName
        } |
        %
        {
        Write-Output "$_"
        }
    ### Try の処理が失敗したら。
    }
    Catch
    {
        Write-Output ""
        Write-Output "ユーザー作成に失敗しました。"
        ### 直前に発生した例外($Error[0])を表示
        Write-Host $Error
        Write-Output ""
        Exit
    }


    ### 個人フォルダの作成:
    ### .csv の Name と DisplayName を読み取って結合して、個人フォルダを作成
    Write-Output ""
    Write-Output ""
    Write-Output ""
    Write-Output "================================"
    Write-Output ""
    Write-Output "個人フォルダを作成します。"

    Get-Content $csv_path |
    ConvertFrom-Csv |
    %
    {
    $_.Name + "_" + $_.DisplayName
    } |
    %
    {
    New-Item "\\hogehoge.local\Share\共有フォルダ\$_" -type directory
    }


    ### new_user.csv をリネームします。
    ### 残っとくと紛らわしいので。

    ### 日付の取得
    $NowDate = Get-Date -Format "yyyyMMdd_HHmmss"

    Move-Item $csv_path C:\99.work\new_user-$NowDate.csv

    Write-Output ""
    Write-Output ""
    Write-Output ""
    Write-Output "================================"
    Write-Output ""
    Write-Output "C:\99.work\new_user.csv を C:\99.work\new_user-$NowDate.csv にリネームしました。(残ると紛らわしいので)"

###  C:\99.work\new_user.csv が存在しなかった場合
}
else
{
    Write-Output ""
    Write-Output " 登録ファイル(C:\99.work\new_user.csv) がありません。"
    Write-Output ""
}

↑ 個人用フォルダのACLは特に操作していない (親ディレクトリのを継承) してますので、変更が必要な場合は別途設定します。

 


ユーザ作成(と個人フォルダの作成)に成功すると、このように出力されます。

 

ファイル「new_user.csv」 が存在しない場合は、このように表示されます。

 

既にアカウントが存在する場合は、

 

その他のエラーが発生した場合は、こんな感じでエラーが出ますので、

 

それぞれ、適宜対応を。

 


今回の備忘録は以上です。