Назад | Перейти на главную страницу

Удаление MsolAccountSku и UPN из списка

Я хочу сбросить список лицензий MsolAccountSku, соответствующих UPN из списка.

Я ищу что-то вроде следующего:

user@domain.com tenant:STANDARDPACK
user2@domain.com tenant:ENTERPRISEPACK

Я не так хорош в PS, поэтому мне трудно форматировать вывод и размещать его с UPN.

Что у меня есть на данный момент:

$readFile = `
  Get-Content "C:\temp\changelicense.csv"

  foreach($upn in $readFile){

$licensedetails = (Get-MsolUser -UserPrincipalName `
  $upn).Licenses
$licensedetails.AccountSKUId;

if ($licensedetails.Count -gt 0){
  foreach ($i in $licensedetails){
    $i.ServiceStatus 

  }
}
}

Если вы ищете выходы, просто отображая UPN и связанный с ними SKU. Вы можете просто подправить исходный сценарий. Если вы не собираетесь также отображать план обслуживания, вам придется включить часть ServiceStatus

Вот редактирование, только для отображения UPN и SKU

$readFile = Get-Content "C:\temp\changelicense.csv"

foreach($upn in $readFile){

$licensedetails = (Get-MsolUser -UserPrincipalName $upn).Licenses

if ($licensedetails.Count -gt 0){
    foreach ($i in $licensedetails){
        $upn + " " + $licensedetails.accountSKUId }
  }
}

Это немного сложнее, чем вы просили.
Но у меня есть старая функция, которую вы могли бы использовать, которая сопоставляет каждую лицензию пользователя с UPN пользователя, а также показывает отображаемое имя.

Функция использует хеш-таблицу наиболее распространенных названий SKU и переводит их в удобочитаемую версию лицензии.

Если артикул вашего клиента отсутствует, просто добавьте его в хеш-таблицу. Конечным результатом является красивый файл .csv, который можно легко импортировать, например, в Excel, чтобы вы могли отсортировать по лицензии или пользователю, чтобы получить представление о том, кто что использует.

Просто запустите приведенный ниже код, чтобы загрузить функцию, затем запустите Get-LicenseUsage. Это создаст CSV-файл в каталоге, в котором сейчас находится ваш PS (названном в честь арендатора).

<#
.SYNOPSIS
    Creates a list showing which users has assigned which licenses.

.DESCRIPTION
    Creates a list of all licenses and which user the license is assigned to.
    The list is then output to a csv file, the file is output in the directory the script is run in.
    The filename is automatically created and uses the company name of the Office 365 Tenant.

.EXAMPLE
    Get-LicenseUsage

.NOTES
    Author: Henrik Stanley Mortensen

#>
Function Get-LicenseUsage()
{
    process  {
        $SkuPartFriendlyName = @{
            ########### Enterprise SKU's################
            "STANDARDPACK" = "Enterprise E1"
            "ENTERPRISEPACK" = "Enterprise E3"
            "ENTERPRISEPACKWSCAL" = "Enterprise E4"
            "ENTERPRISEWITHSCAL" = "Enterprise E4"
            "ENTERPRISEPREMIUM_NOPSTNCONF" = "Enterprise E5 w/o PSTN Conferencing"
            "ENTERPRISEPREMIUM " = "Enterprise E5"
            "EMS" = "Enterprise Mobility Pack"
            "AAD_BASIC" = "Azure Active Directory Basic"
            "AAD_PREMIUM" = "Azure Active Directory Premium"
            ############ Business SKU's#################
            "EXCHANGESTANDARD" = "Exchange Online Plan 1"
            "O365_BUSINESS_ESSENTIALS" = "Business Essentials"
            "O365_BUSINESS" = "Business"
            "O365_BUSINESS_PREMIUM" = "Business Premium"
            ############ Standalone Products############
            "POWER_BI_STANDARD" = "Power BI"
            "FLOW_FREE" = "Flow"
            "POWER_BI_PRO" = "Power BI Pro"
            "POWER_BI_STANDALONE" = "Microsoft Power BI for Office 365"
            "PROJECTESSENTIALS" = "Project Online"
            "PROJECTPROFESSIONAL" = "Project Online Professional"
            "PROJECTONLINE_PLAN_1" = "Project Online"
            "PROJECTCLIENT" = "Project Pro for Office 365"
            "RIGHTSMANAGEMENT_ADHOC" = "Rights Management Adhoc"
            "VISIOCLIENT" = "Visio Pro for Office 365"
            "INTUNE_A" = "Intune A Direct"
            "CRMIUR" = "Dynamics CRM URI"
            "MCOMEETADV" = "Skype for Business PSTN Conferencing"
        }

        $lines = @()
        $array= New-Object System.Collections.ArrayList

        foreach($msolUser in (Get-MSOLUser -All | Where-Object {$_.isLicensed -eq $true}))
        {
            $i = 0
            $licenses = New-Object System.Collections.ArrayList
            foreach($SKU in $msolUser.licenses.AccountSku.SkuPartNumber) {
                #Runs the SkuPartNumber through the Friendly Name List to translate the license
                $licenses = $SkuPartFriendlyName.Item($msolUser.licenses[$i].AccountSku.SkuPartNumber)

                #Creates an object with information for the user license
                $lines = @{
                            "Display Name" = "$($msolUser.DisplayName)";
                            "Licenses" = "$licenses";
                            "Login" = "$($msolUser.UserPrincipalName)";
                            }

                $userInfo = New-Object -TypeName psobject -Property $lines

                #Adds the object to an array used for export
                $array.Add($UserInfo)
                $i++
            }
        }
        #Exports the array to a csv file
        $filename = (Get-MsolCompanyInformation).DisplayName + ' License Overview.csv'
        $filename = $filename -replace "/", "."
        $array | Select-Object Login, 'Display Name', Licenses | Export-CSV $filename -Encoding UTF8 -NoTypeInformation -Delimiter ";"
    }
}