我希望这是个不错的速战速决。我设置了11个脚本来检查是否直接分配了Microsoft许可证。然后,我有一个master.ps1,它将一个接一个地运行所有这些脚本。我想要实现的基本上是在master.ps1运行结束后从它导出结果。所有脚本都是相同的,唯一的区别是许可证名称发生了变化。例如,检查EMS许可证:
$skuId = "contoso:SPE_E3"
`Get-MsolUser -All | where {$_.isLicensed -eq $true -and $_.Licenses.AccountSKUID -eq $skuId} | select UserPrincipalName,
@{Name="SkuId";Expression={$skuId}},
@{Name="AssignedDirectly";Expression={(UserHasLicenseAssignedDirectly $_ $skuId)}},
@{Name="AssignedFromGroup";Expression={(UserHasLicenseAssignedFromGroup $_ $skuId)}}`
Master.ps1将如下所示:
&"$PSScriptroot\Script1.ps1"
&"$PSScriptroot\Script2.ps1"
&"$PSScriptroot\Script3.ps1"
等
我试着在主文件后添加了Export-CSV,但不起作用,有人能帮忙吗?
2条答案
按热度按时间z9ju0rcb1#
以下是使用
ForEach-Object
管道的方法:这会将包含脚本名的数组文字传递给
ForEach-Object
。然后将ForEach-Object
脚本块的输出传递给Export-Csv
,因为它是生成的(流方法)。如果您希望保留单独的脚本调用(如果脚本需要不同的参数,这可能会更直接),您可以只创建一个脚本块
{}
,并使用&
操作符立即运行它:这与上面的
ForEach-Object
变体具有相同的优势,即它是一种流方法,需要更少的内存来存储中间输出(仅用于内部缓冲,与脚本输出大小无关)。gdrx4gfi2#
确保在导出到CSV时捕获所有脚本的输出:
或者,逐个导出每个脚本的输出,然后对后续脚本使用
Export-Csv -Append
: