查询 Office 365 许可状态时无法筛选 table 的输出

Unable to filter output of table when querying Office 365 licensing status

我正在尝试筛选此命令 (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-对象交换

我试过 Where-Object

哪个returns什么都没有

(Get-MsolUser -UserPrincipalName).Licenses.ServiceStatus

如果 EXCHANGE_S_ENTERPRISE 的配置状态 -eq "Success"

,我想做一个 if 语句来继续我的脚本

如果您深入了解其中一位用户的服务状态,您会发现 ServiceStatus 是一个包含多个子级别的对象。

您需要访问 ServiceName 才能执行您的 Where 声明..

这是一个工作示例,它将对 MCOEVExchange_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一次只执行一行。 在您的例子中,在 $User.Licenses.ServiceStatus 加载一个 MSOL 用户,您可以看到更深的几个级别。如果您在该级别执行 GetType(),您还会注意到您当前的级别不是字符串,而是另一个对象,因此将对象与字符串进行比较没有产生预期的结果。