見出し画像

M365の退職者アカウントをPowerShellで一括処理(準備編)

残念ながら会社を去る人がいます。

仲良い人でも、顔見知りの人でも、名前だけ見たことある人(アカウント管理している大概名前だけは見たことある^^)でも、やることは同じですよね。パパッと対応してしまいましょう。

退職者アカウントに対して行っている処理は以下。

  • 全ての配布グループから外す

  • 全ての365グループから外す

  • サインインを禁止する

  • (ライセンスを外す※将来的に)

  • (共有メールボックス化※将来的に)

重要なポジションの人だと多くの配布グループや365グループに登録されていますが漏れなく外す必要があります。管理ポータルでポチポチ入力していくのは若干ストレスでした。(少数だと管理ポータルの方が早いけど)

すべての退職者アカウントをエクセルに入力するだけで、上記を漏れなく自動的に処理できるようにします。その準備として入力用エクセルファイルをPowerShellで作成します。

PowerShell

※ 必要なモジュールは適宜インストールしてください。

# スクリプトファイルがある場所のパスを取得
$CurrentFolder = Split-Path $MyInvocation.MyCommand.Path -Parent

# 「99_バックアップデータ」がなければ作成
if (-not(Test-Path $CurrentFolder"\99_バックアップデータ")){
    New-Item $CurrentFolder"\99_バックアップデータ" -ItemType Directory
}

# 前回のデータがあればバックアップに移動
if (Test-Path $CurrentFolder"\退職_*.xlsx"){
    Move-Item $CurrentFolder"\退職_*.xlsx" $CurrentFolder"\99_バックアップデータ"
}
if (Test-Path $CurrentFolder"\退職_ErrorLog_*.txt"){
    Move-Item $CurrentFolder"\退職_ErrorLog_*.txt" $CurrentFolder"\99_バックアップデータ"
}
if (Test-Path $CurrentFolder"\退職_SuccessLog_*.txt"){
    Move-Item $CurrentFolder"\退職_SuccessLog_*.txt" $CurrentFolder"\99_バックアップデータ"
}

# Excelを操作する為の宣言
$excel = New-Object -ComObject Excel.Application
# 起動したExcelを表示しない
$excel.Visible = $False
# ワークブックを作成
$book = $excel.Workbooks.Add()
# ワークシートを番号で指定し、接続する
$sheet = $excel.Worksheets.Item(1)

# 指定したセルに文字列を入力し、装飾する
$sheet.Cells.Item(1, 1) = "※入力ミスがあるとエラーになるため、右側の各一覧からコピペしてください。"
$sheet.Cells.Item(1, 1).font.color = 0x0000ff
$sheet.Cells.Item(2, 1) = "退職ユーザー名"
$sheet.range("A2:A2").interior.color = 0xC0C0C0
$sheet.range("A2:A2").HorizontalAlignment = -4108
$sheet.Cells.Item(2, 3) = "ユーザー名一覧"
$sheet.range("C2:C2").font.color = 0xffffff
$sheet.range("C2:C2").interior.color = 0x666666
$sheet.range("C2:C2").HorizontalAlignment = -4108

# 列幅を自動調整する
$sheet.Range("A1:A1","C1:C1").columnwidth = 20
$sheet.Columns.item(2).columnwidth = 2

# 認証情報を入力
$Credential = Get-Credential

# MsolServiceに接続する
Connect-MsolService -Credential $credential
$AllUser = Get-MsolUser -All | Where-Object {$_.isLicensed -eq $true} | Select-Object DisplayName

# 最新情報を取得しエクセルに入力
for ($i = 0; $i -lt $AllUser.count; $i++) {
    $sheet.Cells.Item($i+3, 3).value = $AllUser[$i].DisplayName
}

# 名前をつけて保存
$book.SaveAs("$CurrentFolder\退職_$(Get-Date -Format "yyyyMMdd_HHmmss").xlsx")
# Excelを閉じる
$excel.Quit()
# プロセスを解放する
$excel = $null
[GC]::Collect()

※ 本コードを利用する場合は必ず以下の免責事項をご確認ください。

手入力するとタイプミスがあるので、コピペ入力しやすいようすべてのユーザーがエクセル内に記載されるようになっています。また、定期的な作業となるので、前回データを自動的にバックアップフォルダへ移動させる処理も行っています。

おわり

「準備編」はここまでです。「更新編」は以下よりアクセスしてください。


おまけ

やっぱり身軽。

この記事が気に入ったらサポートをしてみませんか?