Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
O365 PowerShell拉转许可_Powershell_Office365 - Fatal编程技术网

O365 PowerShell拉转许可

O365 PowerShell拉转许可,powershell,office365,Powershell,Office365,我正在尝试提取O365租户中所有用户的列表,如果他们已获得许可,则列出他们已获得的分许可。以下代码非常适合列出我的分许可证: $userlicensetest = get-msoluser -userprincipalname "steve.dorr@merrillcorp.com" $userlicensetest.licenses[0].servicestatus ServicePlan::ProvisioningStatus -----------::------------------

我正在尝试提取O365租户中所有用户的列表,如果他们已获得许可,则列出他们已获得的分许可。以下代码非常适合列出我的分许可证:

$userlicensetest = get-msoluser -userprincipalname "steve.dorr@merrillcorp.com"
$userlicensetest.licenses[0].servicestatus
ServicePlan::ProvisioningStatus

-----------::------------------

INTUNE_O365::挂起激活

YAMMER_ENTERPRISE::PendingInput

OFFICESUBSCRIPTION::成功

所以我试图修改我在网上找到的代码,以包含转授权信息。以下是我迄今为止建立的:

$ReportPath = "c:\users\userlist.csv"
Add-Content -value ("UserPrincipalName"+","+"IsLicensed"+","+ "Licenses”"+","+ "SubLicenses") -Path $ReportPath
$AllUsers = Get-MsolUser -All 
foreach ($User in $AllUsers)
{
 $UserPrincipalName = $User.UserPrincipalName
 $IsLicensed = $User.IsLicensed
 $Licenses = $User.Licenses.AccountSkuId
 $SubLicenses = $User.Licenses[0].servicestatus

 Add-Content -value ($UserPrincipalName+","+$IsLicensed+","+$Licenses+","+$SubLicenses) -Path $ReportPath
}
问题在于,它只是从子许可查询中提取标题行,而不是所有细节行。因此,CSV中我自己的行如下所示:

史蒂夫。Dorr@MerrillCorp.comTRUE mymerrillcorp:ENTERPRISEPACK Microsoft.Online.Administration.ServiceStatus Microsoft.Online.Administration.ServiceStatus Microsoft.Online.Administration.ServiceStatus Microsoft.Online.Administration.ServiceStatus Microsoft.Online.Administration.ServiceStatus Microsoft.Online.Administration.ServiceStatusMicrosoft.Online.Administration.ServiceStatus Microsoft.Online.Administration.ServiceStatus

这并没有给我所需要的细节线

如何将许可证[0].servicestatus生成的所有行拉入CSV文件?我不在乎它是将其展平并跨越更多列,还是占用Excel中的多行

谢谢

所以,自从我发布这个问题以来,我已经做了一些工作。我没有一个完美的解决方案,可以将这些信息放入一个漂亮整洁的CSV文件中,但我有一个例程,现在可以将所有这些信息放入一个文本文件中。下面是我的代码

$MyCredentials = Get-Credential -Message "Enter Office 365 Email & Password"
Connect-MsolService -Credential $MyCredentials
$ReportFile = "C:\temp\O365Data.txt"
" " | Out-File $ReportFile  #erases the file if it exists

$AllUsers = Get-MsolUser -All 
foreach ($User in $AllUsers)
{
 $UserPrincipalName = $User.UserPrincipalName
 $IsLicensed = $User.IsLicensed
 $Licenses = $User.Licenses.AccountSkuId
 $SubLicenses = $User.Licenses[0].servicestatus
 $OneLine = $UserPrincipalName + " " + $IsLicensed
 $OneLine| Out-File $ReportFile -Append
 if($User.Licenses[0].servicestatus) {$User.Licenses[0].servicestatus | Out-File $ReportFile -Append}
}

要创建报告,您需要创建自定义对象来保存您感兴趣的属性

以下内容将考虑可应用于用户的所有不同许可证,然后生成每行列出一个用户的csv

# Connect to o365
$MyCredentials = Get-Credential -Message "Enter Office 365 Email & Password"
Connect-MsolService -Credential $MyCredentials

# Prepare result file
$ExportFile = ".\o365Output.csv"
Remove-Item $ExportFile
$Result = @()

# Query all Msol Users
$AllUsers = Get-MsolUser -All

foreach ($User in $AllUsers)
{
    # Generate a new object for each user
    $ReturnObject = [pscustomobject]@{
        UserPrincipalName = $User.UserPrincipalName
        IsLicensed = $User.IsLicensed 
        Licenses = [string]$User.Licenses.AccountSkuId
    }

    # In the event multiple licenses are found append properties for each license
    foreach ($License in $User.Licenses)
    {
        if($($License.ServiceStatus.ServicePlan.ServiceName).count -eq 1)
        {
            $ReturnObject | Add-Member -MemberType NoteProperty -Name $License.ServiceStatus.ServicePlan.ServiceName -Value $License.ServiceStatus.ProvisioningStatus
        }
        else
        {
            for($i = 0; $i -lt $($License.ServiceStatus.ServicePlan.ServiceName).count; $i++)
            {
                $ReturnObject | Add-Member -MemberType NoteProperty -Name $License.ServiceStatus.ServicePlan.ServiceName[$i] -Value $License.ServiceStatus.ProvisioningStatus[$i]
            }
        }
    }   
    $Result += $ReturnObject 
}

# Combine properties from all returned objects
$Properties = $Result | ForEach-Object { Get-Member -InputObject $_ -MemberType NoteProperty | Select-Object -ExpandProperty Name } | Select-Object -Unique | Sort-Object
$Headers = @("UserPrincipalName")
$Headers += $Properties -notlike "UserPrincipalName"

# Export to csv
$Result | Select-Object $Headers | Export-Csv -NoTypeInformation $ExportFile

# Open csv
Invoke-Item $ExportFile