You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量运行PowerShell Microsoft许可证检查脚本后导出CSV问题咨询

问题原因

你直接在master.ps1末尾加Export-CSV不生效的核心原因是:子脚本运行产生的结果直接输出到了控制台,没有被捕获存储,Export-CSV无法接收到需要导出的输入内容。

适配现有脚本结构的解决方案

修改master.ps1,先将所有子脚本的执行结果统一收集到数组变量中,最后再统一导出即可,示例代码如下:

# 初始化空数组存储所有许可证检查结果
$allCheckResults = @()

# 依次执行子脚本并收集返回结果
$allCheckResults += & "$PSScriptroot\Script1.ps1"
$allCheckResults += & "$PSScriptroot\Script2.ps1"
$allCheckResults += & "$PSScriptroot\Script3.ps1"
# 按规则补全剩余8个脚本的调用代码

# 所有脚本执行完成后统一导出为CSV
$allCheckResults | Export-Csv -Path "$PSScriptroot\LicenseCheckResult.csv" -NoTypeInformation -Encoding UTF8

如果不想逐个写11个脚本的调用语句,也可以批量遍历匹配命名规则的子脚本:

$allCheckResults = @()
# 按名称排序后批量执行所有Script开头的ps1脚本
Get-ChildItem -Path $PSScriptroot -Filter "Script*.ps1" | Sort-Object Name | ForEach-Object {
    $allCheckResults += & $_.FullName
}
$allCheckResults | Export-Csv -Path "$PSScriptroot\LicenseCheckResult.csv" -NoTypeInformation -Encoding UTF8

优化建议(可选)

由于11个子脚本仅skuId参数不同,完全可以合并为一个脚本减少冗余代码,无需维护多个子脚本,示例实现如下:

# 填入所有需要检查的许可证SkuId
$targetSkuIds = @(
    "contoso:SPE_E3",
    "contoso:EMS"
    # 补充剩余许可证ID
)

$allCheckResults = @()
foreach ($skuId in $targetSkuIds) {
    $allCheckResults += Get-MsolUser -All | Where-Object {$_.isLicensed -eq $true -and $_.Licenses.AccountSKUID -eq $skuId} | Select-Object UserPrincipalName,
    @{Name="SkuId";Expression={$skuId}}, 
    @{Name="AssignedDirectly";Expression={(UserHasLicenseAssignedDirectly $_ $skuId)}}, 
    @{Name="AssignedFromGroup";Expression={(UserHasLicenseAssignedFromGroup $_ $skuId)}}
}

$allCheckResults | Export-Csv -Path "$PSScriptroot\LicenseCheckResult.csv" -NoTypeInformation -Encoding UTF8

内容的提问来源于stack exchange,提问作者Admaine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:45:01