Невозможно отфильтровать вывод таблицы при запросе статуса лицензирования Office 365 - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь отфильтровать вывод этой команды (Get-MsolUser -UserPrincipalName) .Licenses.ServiceStatus

Что выглядит так:

ServicePlan               ProvisioningStatus
-----------               ------------------
MCOMEETADV                Success
ADALLOM_S_DISCOVERY       Disabled
EXCHANGE_S_FOUNDATION     PendingProvisioning
AAD_PREMIUM               Success
MFA_PREMIUM               Success
ONEDRIVE_BASIC            Success
VISIOONLINE               Success
EXCHANGE_S_FOUNDATION     PendingProvisioning
VISIO_CLIENT_SUBSCRIPTION Success
MCOPSTN1                  Success
EXCHANGE_S_FOUNDATION     PendingProvisioning
DYN365_CDS_VIRAL          Success
FLOW_P2_VIRAL             Success
EXCHANGE_S_FOUNDATION     PendingProvisioning
INTUNE_A                  PendingInput
EXCHANGE_S_FOUNDATION     PendingProvisioning
BI_AZURE_P2               Success
MCOEV                     Success
MICROSOFT_SEARCH          PendingProvisioning
WHITEBOARD_PLAN2          PendingProvisioning
MIP_S_CLP1                PendingProvisioning
MYANALYTICS_P2            Success
BPOS_S_TODO_2             Success
FORMS_PLAN_E3             Success
STREAM_O365_E3            Success
Deskless                  Success
FLOW_O365_P2              Success
POWERAPPS_O365_P2         Success
TEAMS1                    Success
PROJECTWORKMANAGEMENT     Success
SWAY                      Success
INTUNE_O365               PendingActivation
YAMMER_ENTERPRISE         Success
RMS_S_ENTERPRISE          Success
OFFICESUBSCRIPTION        Success
MCOSTANDARD               Success
SHAREPOINTWAC             Success
SHAREPOINTENTERPRISE      Success
EXCHANGE_S_ENTERPRISE     Success

Я фильтрую для Exchange_S_Enterprise и MCOEV.

Я пытался (Get-MsolUser -UserPrincipalName) .Licenses.ServiceStatus | Обмен объектами Select-Object

Я пробовал Where-Object

Что ничего не возвращает

(Get-MsolUser -UserPrincipalName) .Licenses.ServiceStatus

Я бы хотел сделать оператор if, чтобы продолжить мой сценарий, если EXCHANGE_S_ENTERPRISE предоставляет статус -eq "Success"

1 Ответ

0 голосов
/ 22 мая 2019

Если вы заглянули в 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() на этом уровне, вы также заметите, что текущий уровень - это не строка, а еще один объект, поэтому сравнение объекта со строкой не дало ожидаемого результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...