我需要能够导出用户名或电子邮件地址(无论哪个)、公司(从 Exchange 管理控制台的用户帐户中的组织选项卡下的公司字段中)和许可证类型(例如 Exchange Online e1、Exchange Online Kiosk 等...)
我能够将两个语句中的两个值导出到两个单独的文件中,但这对我来说没有多大帮助。
我可以使用以下命令导出用户名和许可证类型:
Get-MSOLUser | % { $user=$_; $_.Licenses | Select {$user.displayname},AccountSKuid } | Export-CSV "sample.csv" -NoTypeInformation
并且,我可以通过以下内容获取公司价值:
Get-User | select company | Export-CSV sample.csv
另一个论坛上的某人建议这样做 -
$index = @{}
Get-User | foreach-object {$index.Add($_.userprincipalname,$_.company)}
Get-MsolUser | ForEach-Object { write-host $_.userprincipalname, $index[$_.userprincipalname], $_.licenses.AccountSku.Skupartnumber}
这似乎应该可以工作,但它没有在我的 powershell 中显示任何许可证信息,只是空白。而且我不知道如何将其导出到 csv 文件。
任何帮助都将不胜感激。谢谢。
答案1
这将导出具有许可证类型的许可用户
Get-MsolUser -All |
Where {$_.IsLicensed -eq $true } |
Select DisplayName,UsageLocation,@{n="Licenses Type";e={$_.Licenses.AccountSKUid}},SignInName,UserPrincipalName,@{n="ProxyAddresses";e={$_.ProxyAddresses}} |
Export-Csv -Path C:\_Cory\Test.csv -NoTypeInformation
答案2
稍作修复以支持最新的命令行:
- 第 4 行更新为“$UserInfo = Get-MSOLUser -UserPrincipalName $msolUser.UserPrincipalName”
- 第 2 行:添加 -All 参数
$lines = @() foreach($msolUser in (Get-MSOLUser -All)) {
$UserInfo = Get-MSOLUser -UserPrincipalName $msolUser.UserPrincipalName
foreach($license in $msolUser.Licenses)
{
$lines += New-Object PsObject -Property @{
"Username"="$($UserInfo.DisplayName)";
"Company"="$($UserInfo.Company)";
"AccountSKUID"="$($license.AccountSKUid)"
}
} } $lines | Export-CSV C:\output.csv -NoTypeInformation
对我来说,它非常有效。
答案3
在第一个例子中,您选择AccountSkuId
属性,在第二个例子中,您选择AccountSKU.SkuPartNumber
(我很确定它不存在)。
你的脚本/单行代码也不太容易阅读,这样怎么样:
$lines = @()
foreach($msolUser in (Get-MSOLUser))
{
$UserInfo = Get-User -Identity $msolUser.UserPrincipalName
foreach($license in $msolUser.Licenses)
{
$lines += @{
"Username"="$($UserInfo.DisplayName)";
"Company"="$($UserInfo.Company)";
"AccountSKUID"="$($license.AccountSKUid)"
}
}
}
$lines | Export-CSV C:\output.csv -NoTypeInformation
更容易获得概览和维护。
答案4
这个脚本对我来说很有用,但我无法将其直接导出到 CSV,所以我使用复制/粘贴到 Excel 中。
Get-MsolUser -all | Where-Object {$_.isLicensed -eq "True"} | Select UserPrincipalName,DisplayName,Licenses | Out-GridView