Если вы заглянули в Service Status для одного из ваших пользователей, вы бы увидели, что ServiceStatus - это объект, который содержит несколько подуровней.
Вам нужно добраться до ServiceName, чтобы выполнить оператор Where
..
Вот рабочий пример этого, который будет выполнять различные действия как на MCOEV , так и на Exchange_S_Enterprise , если их статус обеспечения SUCCESS
.
$User = Get-MsolUser -UserPrincipalName 'MyUser@MyDomain.com'
$PlanstoCheck = @('MCOEV', ' EXCHANGE_S_ENTERPRISE')
$Plans = $User.Licenses.ServiceStatus.where( { $_.ServicePlan.ServiceName -in $PlanstoCheck })
Foreach ($Plan in $Plans) {
if ($Plan.ProvisioningStatus -eq 'SUCCESS') {
switch ($Plan.ServicePlan.ServiceName) {
'MCOEV' { Write-Host 'Do thing #1' }
'EXCHANGE_S_ENTERPRISE' { 'Do THing #2' }
}
}
}
При отладке вы можете использовать F8 для выполнения только одной строки за раз.В вашем случае, загружая пользователя MSOL в $ User.Licenses.ServiceStatus, вы можете увидеть, что есть несколько уровень глубже.Если вы выполните GetType()
на этом уровне, вы также заметите, что текущий уровень - это не строка, а еще один объект, поэтому сравнение объекта со строкой не дало ожидаемого результата.