【问题标题】:O365 PowerShell: Find users that have specific product license services enabledO365 PowerShell:查找启用了特定产品许可服务的用户
【发布时间】:2018-02-13 16:59:30
【问题描述】:

我正在使用以下文章 View account license and service details with Office 365 PowerShell 尝试获取我们租户中所有用户的报告,其中分配了产品许可证 Office 365 Enterprise E3 但仅启用了服务 Exchange Online(计划 2)。

文章建议这可以使用类似于以下的命令来完成:

Get-MsolUser | 
Where-Object {
   $_.isLicensed -eq $true 
   -and $_.Licenses[0].ServiceStatus[16].ProvisioningStatus -eq "Enabled"
}

就我而言 [16] 是 Office 365 Enterprise E3 列表中的第 17 项服务。

之前还有其他几行将其余服务的条件设置为“已禁用”,但希望您明白这一点,但文章还指出,索引号反映了产品许可证和服务计划出现时的顺序运行以下任一脚本块:

许可证:

Get-MsolUser -UserPrincipalName o365.test1@tenant.com  | Format-List DisplayName,Licenses

服务:

Get-MsolUser -UserPrincipalName o365.test2@tenant.com).Licenses.ServiceStatus

上述问题是许多用户启用了不同的计划组合,因此对于某些用户来说,[0] 的许可证索引将指代不同的服务计划。例如user1 已分配 Visio Online 计划 2 和 Office 365 Enterprise E3 产品许可证,但 user2 仅分配了 Office 365 Enterprise E3。在这种情况下,索引 [0] 会有所不同,使得初始脚本块在查找启用了特定服务的所有用户时无用,无论分配的产品许可证组合如何。

我错过了什么吗?

【问题讨论】:

    标签: powershell office365


    【解决方案1】:

    不太确定我是如何在搜索中错过它的,但以下内容将提供我需要的信息,而无需编写脚本:Office 365 License Reporting and Management Tool -Assign Remove Licenses in Bulk

    【讨论】:

      【解决方案2】:

      我知道它有点旧,但今天我遇到了完全相同的问题并设法编写了一个快速函数,它可以满足您的要求。

      [cmdletbinding()]
      
      param (
                #Provide service name e.g. SWAY
                [Parameter(Mandatory)]
                [string]$Service,
      
                #Specifies if to search for enabled or disabled service. Success = enabled.
                [Parameter(Mandatory)]
                [ValidateSet("Success","Disabled")]
                [string]$Status
           )
      
      
           foreach ($User in  ($Users = Get-MsolUser -All)  ) {
      
                $ServiceStatus = $user.licenses.ServiceStatus
      
                $ProvisionName = $ServiceStatus | Where {$_.ServicePlan.ServiceName -eq "$Service" }
      
                $Data = [PSCustomObject]@{
                     "USER" = $User.UserPrincipalName
                     "Software" = $ProvisionName.ServicePlan.ServiceName
                     "Status" = $ProvisionName.ProvisioningStatus
                }
      
                $Data | Where {$_.Status -eq "$Status" }     
      
                }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-10
        • 1970-01-01
        • 1970-01-01
        • 2021-10-06
        • 2020-11-29
        相关资源
        最近更新 更多