【初級】【たった6つ】これだけでわかる!M365で必要なPowerShell知識_後半パート

PowerShell

皆さんこんにちは!ナガイです。
 いよいよ後半戦です。後半戦は、すこし難易度が上がりますが習得すればほかのエンジニアの1枚2枚上手の技術を使えるようになります。
 ぜひ、繰返し学んでマスターしましょう。

ポイント4 : 変数の定義「$」

変数とは

ここで変数という概念が出てきます。変数は様々なプログラミングで利用されています。
変数とは、値を入れておく「箱」のことを指します。
例えば、「ナガイ」という値を10個のコマンドレットで使うプログラムを考えてみましょう。一つ一つに「ナガイ」という文字列を記載して10個のコマンドレットを作成してももちろん動作します。
ただし、「ナガイ」ではなく「サトウ」や「スズキ」でも同じように動作するようにしたいときに、10個のコマンドレットの一つ一つを変更するのは大変面倒です。

【とあるプログラム】
1.ーーー [ナガイ]ーーーーーー
2.ー[ナガイ]ーーーーーーーー
3.ーーーー[ナガイ]ーーーーー
4.ーー[ナガイ]ーー[ナガイ]ー
・・・
8.ー[ナガイ]ーーーーーーーー
9.ーー[ナガイ]ーーーーーーー
10.ーーー[ナガイ]ーーーーーー

1-10のコマンドレットで、それぞれ「ナガイ」が使われているプログラムがあったとします。このとき、「ナガイ」を「サトウ」や「スズキ」に変えたいときいちいち変えるのは面倒。。。

そこで、変数という機能を使います。
最初に、10個のコマンドレットには「x」という値を使って記述し、プログラムを作成しておきます。そのあと、実行する前に「x=ナガイとする」と設定して、実行するできるようにしておくのです。
これにより、「サトウ」や「スズキ」でも「x=サトウ」「x=スズキ」とすれば、プログラムをいちいち変更しなくても動作させることができるのです。

【とあるプログラム】
1.ーーー [x]ーーーーーー
2.ー[x]ーーーーーーーー
3.ーーーー[x]ーーーーー
4.ーー[x]ーー[x]ー
・・・
8.ー[x]ーーーーーーーー
9.ーー[x]ーーーーーーー
10.ーーー[x]ーーーーーー

x=ナガイ、サトウ、スズキを好きに入れられるようにすれば、簡単にプログラムの内容を変更できる!

変数の定義方法

変数をプログラム内で設定することを変数を「定義する」という言い方をします。PowerShellでの、変数の定義方法は非常にシンプルで、定義したい変数名に「$」を付けます。

【変数の定義】
$(変数名)

これによって、変数という値を入れる箱を作ることができます。
変数名には、利用できない値もありますが今回の説明には割愛します。
箱ができた後に、箱に値を入れます。こちらもシンプルで、「=」を記載し、そのあとに、入れたい値を書けばOKです。
入れられる値は文字列や数字だけでなく、配列を入れることも可能です。
利用する具体例を記載します。

【変数の具体例】
例1) $a
→aという箱を作りました。

例2) $A = 1
→Aという箱を作り、1を入れます。

例3) $B = Import-CSV “C:\Users\nagai.akasa\Desktop\userlist.csv”
→Bという箱に、userlist.csvのファイルをインポートして入れておきます。

変数内の特定の値を呼び出したいとき

変数の定義方法と、値の入れ方はわかったと思います。
次に、呼び出し方について勉強していきましょう。
すでに、値が入っている場合、その変数を入力すると入っている値を教えてくれます。

$a = 1と定義したとき、
$aの値を知りたいときは、「$a」を入力すれば値を教えてくれます。

では、ある変数Aがあったきに以下の値が入っていたとします。これは、配列と呼ばれているものですが、この「Name」だけを使いたい場合があります。この時の呼び出し方法があり、「. (ピリオド)」を使って呼び出します。下の例の場合は、「$A.Name」と記述するができます。

【変数A】に入っている値が以下のとき

変数Aに入っている「Name」を呼び出したいときは、「$A.Name」と記述します。

ポイント5 : 単数から複数に変換する「ForEach Object」

 このポイントでは、「ForEach-Object」というコマンドについて説明していきます。このコマンドを使うことで、1つのコマンドを繰り返して利用することができます。
 作成するユーザーが1ユーザーなのであれば今まで学習した知識で問題ないのですが、100ユーザーや200ユーザーを新規作成したり、更新したりする場合、コマンドを100、200作るのは非常に工数がかかります。間違いも起きえますよね。そこで、繰返し実行する機能を用いて、楽に作成するのです。
 記載ルールは簡単で、繰り返したいコマンドを「{}」で囲み、先頭に「ForEach-Object」をつければよいです。

【ForEach-Objectの使い方】

ForEach-Object { 基本形 -(項目名) 入力値 -(項目名) 入力値}

さて、このままでは分からないので、次の例文で考えてみましょう。

例文)
$a = Import-CSV “C:\Users\nagai.akasa\Desktop\userlist.csv”

ForEach-Object {New-MsolUser -UserPrincipalName $a.UserPrincipalName -DisplayName $a.DisplayName -UsageLocation JP -ForceChangePassword $True }

解説に行く前にまず、結論をお伝えします。これにより、『userlist.csvに記載されている「UserPrincipalName」「DisplayName」の値を1行ずつ繰り返し、記載されている最後まで実行する』という意味になります。
解説がややこしくなるので、まず、こう覚えてください笑。

 では、コマンドの解説をしていきますね。
 まずは、$aについてみていきます。$a=から始まるコマンドは、「Import-CSV」から始まります。ということで、CSVファイルをインポートし、$aという箱に格納します。
 続いて、ForEach-Objectから始まるコマンドを見ていきます。最初に{}の中を見ていきます。New-MsolUserの基本形を使っており、意味としては、M365ユーザーを新規作成することを指します。新規作成するユーザーはどのようなユーザーになるかを、基本形の後に書いていることになります。
 「-(項目名) 入力値」の形を見ていきます。「-UserPrincipalName $a.UserPrincipalName」は、$aの中にあるUserPrincipalNameの値をUserPrincipalNameに指定するという意味になります。「-DisplayName $a.DisplayName」も同様ですね。
 「-UsageLocation JP」は、UsergeLocation(利用される場所)をJP(日本、「-ForceChangePassword $True」は、ForceChangePassword(初回ログイン時にパスワードを変更されるかどうか)を$True(変更させる)に会設定することになります。この2つの要素については、すべてのユーザー同じ値を設定する前提なので、JPや$Trueなど値をそのまま記述しています。
 さて、New-MsolUserから始まるコマンドについては解説しました。
これをForEach-Objectで括っています。すると、繰返しコマンドを実行することになります。繰り返すってどこからどこまで?と感じる方がいらっしゃると思います。今回の場合、インポートしたCSVファイルの最初の行から最後の行までとなります。
 

例文)
$a = Import-CSV “C:\Users\nagai.akasa\Desktop\userlist.csv”

ForEach-Object {New-MsolUser -UserPrincipalName $a.UserPrincipalName -DisplayName $a.DisplayName -UsageLocation JP -ForceChangePassword $True }

(意味)→$aでインポートCSVファイルに記載されている、UserPrincipalName,DisplayNameの組み合わせを最初から最後まで使ってユーザーを新規ユーザー作成する。

 この方法を使えば、コマンドを1つ1つ記載する必要性がなくなり、めんどくさいコマンド作成作業や設定間違いを減らすことが可能になるでしょう。
 大きなメリットがある記述ですので、ぜひ使ってみてください。

ポイント6 : コマンドレットとコマンドレットをつな ぐ パイプ「|」

 いよいよ最後の項目です。この項目はポイント5を抑えていれば、正直使わなくてよいのですが、エンジニアとしてシンプルなコマンドを記載したい人には覚えておいてほしいポイントになります。
 最後のポイントです。気合を入れて進みましょう。
ポイント5で例として挙げたコマンドレットですが、これ、連結することが可能です。いちいち、変数を定義しなくてよくなるのです。この時に利用するのが「 | (パイプ)」になります。日本語キーボードであれば、「\」のキーと同じキーにある縦棒に見えるものですね。

例文)
$a = Import-CSV “C:\Users\nagai.akasa\Desktop\userlist.csv”

ForEach-Object {New-MsolUser -UserPrincipalName $a.UserPrincipalName -DisplayName $a.DisplayName -UsageLocation JP -ForceChangePassword $True }

パイプを使ってつなぐと、

$a = Import-CSV “C:\Users\nagai.akasa\Desktop\userlist.csv”
| ForEach-Object {New-MsolUser -UserPrincipalName $_.UserPrincipalName -DisplayName $_.DisplayName  -UsageLocation JP -ForceChangePassword $True }

 2つのコマンドレットを「|」を使ってつなげばいいのですが、つなぐ際の注意点が2つあります。それは、変数の記述です。
 つなぐ前の分では$aを定義していたのですが、つなぐときには、不要となります。すると、ForEach-Objectから始まるコマンドレット内の、$a.UserPrincipalNameなどが利用できなくなってしまいます。そこで、登場するのが、「$_」という変数です。
 「$_」という変数ってなに?となりますが、落ち着いてください。
これは、PowerShellが用意してくれているオリジナルの変数だと思ってください。変数を定義せずに、CSVファイルなどをインポートすると自動的に「$_」に格納される仕組みになっています。

 「$a」だったものが、「$a」が定義されなくなったので代わりに「$_」を使っていると考えてもらえばシンプルになります。

すべてのポイント解説が終了!あとは実践あるのみ!

 皆さん、お疲れ様でした!2パートにわたってPowerShellで押させておきたいポイント解説してきました。ここまで読んでいただいた方、相当我慢強く学習していただいたと思います。
 正直難しい内容沢山です!笑。ただ、この6ポイントの知識を入れられたことで、Microsoft365の設定方法が劇的に変化すること間違いないです。Microsoftの公開情報に記載しているコマンドレットをほとんど読むことが可能になると断言できます。
 あとは、実際のテナントで実践あるのみです。実際のコマンドレットを作って、実行してみることでより知識が深まり、エンジニアとしてのレベルがアップすると思います。
 このブログでは、ほかにも有益な情報をお伝えしていきますので、ぜひ活用していってください。

 お疲れ様でした!

コメント