Windows Intune / Office 365 は、クラウドである Windows Azure Active Directory でアカウント管理されています。
このため、オンプレの Active Directory と AD FS で連携している場合、アカウントは Windows Azure Active Directory に登録されていますが、Windows Intune / Office 365 のライセンス割り当て/解除は別途管理する必要があります。
管理するためには 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"
}
Copyright © MURA All rights reserved.