O365 PowerShell:查找已启用特定产品许可证服务的用户

时间:2018-02-13 16:59:31

标签: powershell office365

我使用以下文章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 Plan 2和Office 365 Enterprise E3产品许可证,但仅限用户2 Office 365企业版E3。在这种情况下,索引[0]会有所不同,使得初始脚本块在查找启用了特定服务的所有用户时无用,无论分配的产品许可证组合如何。

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

[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" }     

          }