Home > Windows にまつわる e.t.c.

Windows Intune / Office 365 のユーザーアカウントを PowerShell で管理する


Windows Intune / Office 365 は、クラウドである Windows Azure Active Directory でアカウント管理されています。

このため、オンプレの Active Directory と AD FS で連携している場合、アカウントは Windows Azure Active Directory に登録されていますが、Windows Intune / Office 365 のライセンス割り当て/解除は別途管理する必要があります。

 

SKU の確認

管理するためには SKU を確認する必要があるで、まずは「Windows PowerShell 用 Windows Azure Active Directory モジュール」を開いて SKU を確認します。

 

Connect-MsolService ← 接続なので、同一セッション内であれば一度実行すれば OK
Get-MsolAccountSku

 

すると、AccountSkuId(SKU)、ActiveUnits(ライセンス契約数)、ConsumedUnits(ライセンス割り当てユーザー数)が表示されます。

AccountSkuId には、ライセンスしている組織情報と Microsoft の SKU 情報の両方が含まれています。
例えば、「HogeHoge:OFFICESUBSCRIPTION」の場合は、「HogeHoge:」が組織情報で、「OFFICESUBSCRIPTION」が Microsoft の SKU になります。

 

ちなみに、SKU とは Stock Keeping Unit の略で、製品管理単位です。(厳密に言うと少し違うのですが、ざっくりと言うとこんな感じです)

 

CSV(UserPrincipalName列)を読み込ませて、アカウント管理をする PowerShell こんな感じになります。

 

ライセンス割り当て

##############################################################################
#
# ライセンス割り当て
#     CSV の「userPrincipalName」列にある UPN を処理する
#
##############################################################################

param ( $Path )

# 引数確認
if( $Path -eq $null ){
    Write-Output "Need CSV File"
    exit
}

if(Test-Path $Path){
    # ライセンス割り当て CSV 読み込み
    Import-CSV $Path | foreach {
        Write-Output $_.UserPrincipalName

        # Azure Active Directory よりアカウント情報(UPN)取得(アカウント存在確認)
        $ChkUser = $null
        $ChkUser = Get-MsolUser -UserPrincipalName $_.userPrincipalName

        # アカウントが存在していたとき
        if( $ChkUser -ne $null ) {

            # ライセンスがあるか
            $SKU_Flag = $False
            foreach( $SKU in $ChkUser.licenses ) {
                if( $SKU.AccountSku.SkuPartNumber -eq "SKU" ) {
                    $SKU_Flag = $True
                }
            }

            # ライセンスされていないときのみライセンス付与
            if( $SKU_Flag -eq $false ) {
                # 「ユーザーの所在の設定」を日本にする
                Set-MsolUser -UserPrincipalName $ChkUser.UserPrincipalName -UsageLocation JP

                # ライセンス付与
                Set-MsolUserLicense -UserPrincipalName $ChkUser.UserPrincipalName -AddLicenses "HogeHoge:SKU"
                $DisplayString = $ChkUser.UserPrincipalName + " License Added"
                Write-Output $DisplayString
            }
        }
    }
}
# 引数に誤りあり
else{
    Write-Output "$Path not found"
}

 

ライセンスの解除

##############################################################################
#
# ライセンス解除
#     CSV の「userPrincipalName」列にある UPN を処理する
#
##############################################################################

param ( $Path )

# 引数確認
if( $Path -eq $null ){
    Write-Output "Need CSV File"
    exit
}

if(Test-Path $Path){
    # ライセンス割り当て解除 CSV 読み込み
    Import-CSV $Path | foreach {
        Write-Host $_.UserPrincipalName

        # Azure Active Directory よりアカウント情報(UPN)取得(アカウント存在確認)
        $ChkUser = $null
        $ChkUser = Get-MsolUser -UserPrincipalName $_.userPrincipalName

        # アカウントが存在していたとき
        if( $ChkUser -ne $null ) {

            # ライセンスがあるか
            $SKU_Flag = $False
            foreach( $SKU in $ChkUser.licenses ) {
                if( $SKU.AccountSku.SkuPartNumber -eq "SKU" ) {
                    $SKU_Flag = $True
                }
            }

            # ライセンスされていたときのみライセンス解除
            if( $SKU_Flag ) {
                Set-MsolUserLicense -UserPrincipalName $ChkUser.UserPrincipalName -RemoveLicenses "HogeHoge:SKU"
                $DisplayString = $ChkUser.UserPrincipalName + "License Removed"
                Write-Output $DisplayString
            }
        }
    }
}
# 引数に誤りあり
else{
    Write-Output "$Path not found"
}

現在のライセンス状況

##############################################################################
#
# 現在のライセンス確認
#     CSV の「userPrincipalName」列にある UPN を処理する
#
##############################################################################

param ( $Path )

# 引数確認
if( $Path -eq $null ){
    Write-Output "Need CSV File"
    exit
}

if(Test-Path $Path){
    # CSV 読み込み
    Import-CSV $Path | foreach {
        # Azure Active Directory よりアカウント情報取得
        $User = Get-MsolUser -UserPrincipalName $_.userPrincipalName

        $SKU_Flag = $False

        foreach( $SKU in $User.licenses ) {
            if( $SKU.AccountSku.SkuPartNumber -eq "SKU" ) {
                $SKU_Flag = $True
            }
        }

        $DisplayString = $User.UserPrincipalName + "`t" + $User.DisplayName + "`t"

        if( $SKU_Flag ) {
            # ライセンスがあるとき
            $DisplayString += "True"
        } else {
            # ライセンスが無いとき
            $DisplayString += "False"
        }

    Write-Output $DisplayString
    }
}
# 引数に誤りあり
else{
    Write-Output "$Path not found"
}

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.