PowewShellで一括処理をするスクリプトを考える際のステップ:前編

はじめに

PowerShellに限らない話なのですが、スクリプトなりノーコードなりで複数のデータを一括で処理する、というのは便利ですが、いきなり一括処理を作り始めると敷居が高い事があります。

本記事では、PowerShellのスクリプトを例に、あまりスクリプト作成に慣れていない方向けに、一括処理までの考え方をステップごとに分けて説明したいと思います。

※ 2022/9/28 17:20に、テストデータの用意について追記しました

今回の題材

PowerShellを使って、CSVから読み込んだデータを元にAzure AD上にユーザーを作る、というケースを題材とします。

テストデータの用意(※ 2022/9/28 17:20追記)

人事から実際に作成するユーザー一覧を入手したとします。 ユーザー一覧には実際に設定する値が含まれているとします。

ID 役職 部署
tfunakoshi 舟越 エキスパート 人材戦略部
(以下略)

ただ、最初から本番データを使うのは避けたいので、まずは本番に近いテストデータを作成します。

ID 役職 部署 勤務地
bloguserA Blog UserA 部長 技術部 東京
bloguserB Blog UserB 課長 技術部 大阪
(中略)
bloguserG Blog UserG 一般社員 技術部 東京

ここでは、役職があるケースとないケースがある、といったパターンは出来ればそろえておきたいところです。

GUIでユーザーを作成する

まず最初は、GUIを使ってユーザーを1人作ってみます。

これによって、どういった値が必須なのか、入れようとしている値は入力可能な文字列なのか、などが分かります。

作成されたユーザーを確認します。

もし、GUIでのユーザー作成時には指定できない値を利用したい場合は、一度編集で値を足しておきましょう。

GUIで作成したユーザーの情報をPowerShellで確認する

続いて、先ほど作成したユーザーの情報を、PowerShellで確認します。

どういったコマンドレットを使えばいいか、については近道はないので、調べましょう。

今回はこちらを見つけて参考に、必要なパラメーターや引数を入れて実行しました。

learn.microsoft.com

Connect-AzureAD
Get-AzureADUser -ObjectId bloguserA@example.com | FL

これにより、設定したい値をPowerShellで指定するときに、どういったパラメーターを使えばいいのかが分かります。

(通常、NewやSetなどのコマンドレットでは、プロパティ名がそのままパラメーターとして使用されます)

例えば先ほどGUIで入力していた時には「部署」や「名」など日本語になっていましたが、実際にPowerShellのパラメーターとしては「Department」や「GivenName」を使えばいいことが分かります。

この辺りは一から調べてもいいのですが、GUIで作成、設定してからGetのコマンドを使うと、必要なパラメーターを簡単に絞り込めるのでお勧めです。*1

ここから、ユーザー作成時に必要そうな値を抜き出したのがこちらです。*2

ObjectType                     : User
Department                     : 技術部
DisplayName                    : Blog UserA
GivenName                      : UserA
JobTitle                       : 部長
MailNickName                   : bloguserA
State                          : 東京都
Surname                        : Blog
UserPrincipalName              : bloguserA@example.com
UserType                       : Member

PowerShellでユーザーを作成する

先ほどのGet-AzureADUserの結果を踏まえつつ、次はPowerShellでユーザーを作成します。

ただ、まだこの段階ではCSVからの読み取りは行いません。まずは、PowerShellでユーザーを作成するコマンドレットと必要なパラメーターを確認するところからはじめます。

Get-AzureADUserがあるならNew-AzureADUserでユーザーを作成できるだろう、というあたりをつけます。

ひとまず、先ほどGet-AzureADUserで設定したパラメーターを使い、引数に別のユーザーを指定して実行してみました。*3

New-AzureADUser -ObjectType:User  -Department:技術部  -DisplayName:BlogUserB  -GivenName:UserB  -JobTitle:部長  -MailNickName:bloguserB  -State:東京都  -Surname:Blog  -UserPrincipalName:bloguserB@example.com  -UserType:Member

が、このパラメーターは無いよ、またはこのパラメーターが必要だよ、と言われてしまいます。

こういうときは素直にドキュメントを確認しましょう。

learn.microsoft.com

今回指定しなかったパラメーターのうち、AccountEnabledとPasswordProfileは必須だったことが分かりました。

これを元に少し加工します。

$PasswordProfile = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile
$PasswordProfile.Password = "<Password>"
New-AzureADUser -Department:技術部  -DisplayName:BlogUserB  -GivenName:UserB  -JobTitle:部長  -MailNickName:bloguserB  -State:東京都  -Surname:Blog  -UserPrincipalName:bloguserB@example.com  -UserType:Member -AccountEnabled:$False -PasswordProfile:$PasswordProfile

これで、PowerShellを使って希望のユーザーを作成することが出来ました。

後は念のため、Azureポータルで、想定通りにアカウントが作成され、プロパティが設定されていることを確認しましょう。

おわりに

長くなってきたので、いったん、ここで区切ります。

本記事では、スクリプト作成前に、まずはPowerShellで実現する際に必要なコマンドレットやパラメーターを確認しました。

後編では、今回利用したコマンドレットを元に、外部データを使って一括作成するまでの流れを確認していきたいと思います。

*1:特に、パラメーターは英語なので、日本語での表記が英語ではどれにあたるか、は調べるより作ったほうが楽な事が多いと思います

*2:実際にはここの値で不要なものも、逆にここに書いてないもので必須のものもありました

*3:Get-AzureADUserの結果をVS Codeに貼り付けて正規表現で加工すると楽です

執筆担当者プロフィール
舟越 匠

舟越 匠(日本ビジネスシステムズ株式会社)

人材開発部に所属。社内向けの技術研修をメインにしつつ、JBS Tech BlogやMS認定資格取得の推進役もやっています。資格としてはAzure Solutions Architect Expertを所持。好きなサービスはPower Automate / Logic Apps。好きなアーティストはZABADAK。

担当記事一覧