Microsoft 365 ユーザーのパスワードをPowershellで一括変更する

Webサービス
この記事は約8分で読めます。

 

最近Microsoft 365の管理者になった私です。

 

ユーザーのパスワードを一括変更(リセット)しようと思い、Microsoft 365 管理センターから作業しようと思ったのですが、ユーザー数を40くらい選択すると[パスワードのリセット]がグレーアウトしてクリックできません。

 

ユーザーを小分けにして複数回実施するのも面倒です。

 

調べてみるとPowershellでユーザーのパスワードを一括変更できることを知りました。

 

ということで早速やってみました。

 

                 

環境

 

  • Windows10 Pro 64bit(バージョン20H2)



  • PowerShell バージョン:5.1.19041.1023
    PS C:\WINDOWS\system32> $PSVersionTable
    
    Name                           Value
    ----                           -----
    PSVersion                      5.1.19041.1023
    PSEdition                      Desktop
    PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
    BuildVersion                   10.0.19041.1023
    CLRVersion                     4.0.30319.42000
    WSManStackVersion              3.0
    PSRemotingProtocolVersion      2.3
    SerializationVersion           1.1.0.1

     



事前準備

 

今回の作業に必要なコマンドレットをPowerShellに2つ追加します。

 

1つ目

Install-Module -Name MSOnline を実行します。

PS C:\WINDOWS\system32> Install-Module -Name MSOnline 
続行するには NuGet プロバイダーが必要です
PowerShellGet で NuGet ベースのリポジトリを操作するには、'2.8.5.201' 以降のバージョンの NuGet
プロバイダーが必要です。NuGet プロバイダーは 'C:\Program Files\PackageManagement\ProviderAssemblies' または
'C:\Users\[ユーザー名]\AppData\Local\PackageManagement\ProviderAssemblies'
に配置する必要があります。'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force' を実行して NuGet
プロバイダーをインストールすることもできます。今すぐ PowerShellGet で NuGet
プロバイダーをインストールしてインポートしますか?
[Y] はい(Y) [N] いいえ(N) [S] 中断(S) [?] ヘルプ (既定値は "Y"): y

信頼されていないリポジトリ
信頼されていないリポジトリからモジュールをインストールしようとしています。このリポジトリを信頼する場合は、Set-PSReposit
ory コマンドレットを実行して、リポジトリの InstallationPolicy の値を変更してください。'PSGallery'
からモジュールをインストールしますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): y
PS C:\WINDOWS\system32>

 

2つ目

Install-Module -Name AzureAD を実行します。

PS C:\WINDOWS\system32> Install-Module -Name AzureAD

信頼されていないリポジトリ
信頼されていないリポジトリからモジュールをインストールしようとしています。このリポジトリを信頼する場合は、Set-PSReposit
ory コマンドレットを実行して、リポジトリの InstallationPolicy の値を変更してください。'PSGallery'
からモジュールをインストールしますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): y
PS C:\WINDOWS\system32>

 

 

パスワード一括変更

 

 

一括変更用CSVファイルの用意

 

ユーザー名(userPrincipalName)とパスワード(NewPassword)を入力したCSVファイルを用意します。

userPrincipalName,NewPassword
user001@example.co.jp,P@ssw0rd1
user002@example.co.jp,P@ssw0rd2
user003@example.co.jp,P@ssw0rd3
user004@example.co.jp,P@ssw0rd4
user005@example.co.jp,P@ssw0rd5
user006@example.co.jp,P@ssw0rd6
user007@example.co.jp,P@ssw0rd7
user008@example.co.jp,P@ssw0rd8
user009@example.co.jp,P@ssw0rd9
user010@example.co.jp,P@ssw0rd10

 

ファイル形式は、CSV UTF-8(コンマ区切り)です。ファイル形式注意します。

 

 

 

一括変更実行

 

準備ができたらさっそく実行してみます。

 

  1. PowerShellでMicrosoft 365に接続する

    PS C:\WINDOWS\system32> Connect-MsolService
    PS C:\WINDOWS\system32> Connect-AzureAD
    
    Account                       Environment TenantId                             TenantDomain   AccountType
    -------                       ----------- --------                             ------------   -----------
    admin@example.co.jp AzureCloud  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX example.co.jp User

    接続時には画像のように、サインインのためのウィンドウが表示されるのでユーザー名とパスワードを画面に従って入力し、サインインします。




  2. CSVファイルの内容で一括変更する

    ファイルを指定して、スクリプトを実行します。

    ファイルパスの指定が面倒な場合は、CSVファイルが存在する場所のアドレスバーに”PowerShell”と入力すると、その場所に移動した状態でPowerShellが起動します。




    # ログイン時にパスワード変更を要求しない場合
    PS C:\WINDOWS\system32> Import-Csv -Path [ファイルパス] | ForEach-Object {Set-MsolUserPassword -UserPrincipalName $_.UserPrincipalName -NewPassword $_.NewPassword -ForceChangePassword $false}
    
    # ログイン時にパスワード変更を要求する場合
    PS C:\WINDOWS\system32> Import-Csv -Path [ファイルパス] | ForEach-Object {Set-MsolUserPassword -UserPrincipalName $_.UserPrincipalName -NewPassword $_.NewPassword -ForceChangePassword $true}

    今回は、ユーザーがログイン時にパスワード変更を要求されないように、”ForceChangePassword $false”で実行しました。



  3. ユーザーがログイン時にパスワード変更を要求されるか確認する

    PS C:\WINDOWS\system32> Get-AzureADUser | Select UserPrincipalName,DisplayName,@{Label="ForceChangePasswordNextLogin";Expression={($_.PasswordProfile | ForEach-Object {$_.ForceChangePasswordNextLogin})}}
    
    UserPrincipalName                   DisplayName ForceChangePasswordNextLogin
    -----------------                   ----------- ----------------------------
    user001@example.co.jp              ユーザー1                           
    user002@example.co.jp               ユーザー2
    user002@example.co.jp               ユーザー3
    user002@example.co.jp               ユーザー4
    user002@example.co.jp               ユーザー5
    ~以下省略~

    ”ForceChangePassword $false”で一括変更したので、”ForceChangePasswordNextLogin”は空白になっています。


    仮に、”ForceChangePassword $true”で実行した場合には、”ForceChangePasswordNextLogin”にtrueが付きます。



  4. Microsoft 365への接続を切断する

    PS C:\WINDOWS\system32> Disconnect-AzureAD
    

     

 

以上でパスワードの一括変更は完了です。

 

コメント

タイトルとURLをコピーしました