合并PowerShell脚本实现指定O365许可证查询及弹窗展示
完整实现代码及说明
以下是满足你需求的完整PowerShell脚本,包含许可证筛选、前缀处理和弹窗展示功能:
# 加载Windows Forms程序集以支持弹窗 Add-Type -AssemblyName System.Windows.Forms # -------------------------- 可配置参数 -------------------------- # 指定需要显示的两类许可证SKU(可根据实际需求修改) $targetSkus = @("ENTERPRISEPACK", "O365_BUSINESS_PREMIUM") # 是否去除AccountSkuId的前缀(如"contoso."),设为$true开启,$false关闭 $removePrefix = $true # ---------------------------------------------------------------- # 连接到Microsoft Online服务(如果未连接则执行) if (-not (Get-MsolDomain -ErrorAction SilentlyContinue)) { Connect-MsolService } # 获取所有许可证SKU并筛选目标类型,同时处理前缀与剩余计算 $licenseData = Get-MsolAccountSku | Where-Object { $skuPart = if ($removePrefix) { $_.AccountSkuId.Split('.')[-1] } else { $_.AccountSkuId } $targetSkus -contains $skuPart } | Select-Object @{ Name = "AccountSkuId" Expression = { if ($removePrefix) { $_.AccountSkuId.Split('.')[-1] } else { $_.AccountSkuId } } }, @{ Name = "Spare Licenses" Expression = { $_.ActiveUnits - $_.ConsumedUnits } } # 格式化输出内容为易读的文本格式 $outputContent = "许可证剩余数量统计`n`n" $outputContent += "AccountSkuId`t`tSpare Licenses`n" $outputContent += "------------------------`n" foreach ($license in $licenseData) { $outputContent += "$($license.AccountSkuId)`t`t$($license.'Spare Licenses')`n" } # 弹出窗口展示结果 [System.Windows.Forms.MessageBox]::Show($outputContent, "许可证统计", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
关键部分说明
- 可配置参数:直接修改
$targetSkus数组指定要显示的许可证类型,通过$removePrefix开关控制是否去除SKU前缀。 - MSOL连接检查:脚本自动检测是否已连接到Microsoft Online服务,未连接时会弹出登录窗口。
- SKU筛选与前缀处理:用
Split('.')[-1]截取SKU后缀实现前缀去除,同时只保留$targetSkus中指定的许可证。 - 剩余许可证计算:
Spare Licenses由总可用许可证数ActiveUnits减去已使用数ConsumedUnits得到。 - 弹窗展示:通过
System.Windows.Forms.MessageBox将格式化后的统计结果以弹窗形式展示,搭配信息图标提升可读性。
内容的提问来源于stack exchange,提问作者Frank Vorstenburg
相关产品推荐
相关产品推荐

