我希望這是一個很好的快速的。我設定了 11 個腳本來檢查是否直接分配了 Microsoft 許可證。然后我有一個 master.ps1,它將一個接一個地運行所有這些腳本。我想要實作的是,在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 但它不起作用,有人可以幫忙嗎?
非常感謝,
一種
uj5u.com熱心網友回復:
這是使用ForEach-Object管道的方法:
'Script1', 'Script2', 'Script3' | ForEach-Object {
& "$PSScriptroot\$_.ps1"
} | Export-Csv ...
這會將包含腳本名稱的陣列文字傳遞給ForEach-Object. ForEach-Object腳本塊的輸出然后被傳遞給Export-Csv,因為它是生成的(一種流方法)。
如果您想保留單獨的腳本呼叫(如果腳本需要不同的引數,這可能更直接),您可以只創建一個腳本塊{}并使用&運算子立即運行它:
& {
& "$PSScriptroot\Script1.ps1"
& "$PSScriptroot\Script2.ps1"
& "$PSScriptroot\Script3.ps1"
} | Export-Csv ...
這與上述ForEach-Object變體具有相同的優點,即它是一種流方法,需要更少的記憶體來存盤中間輸出(僅用于內部緩沖,與腳本輸出大小無關)。
uj5u.com熱心網友回復:
確保在匯出為 CSV 時捕獲所有腳本的輸出:
@(
& "$PSScriptroot\Script1.ps1"
& "$PSScriptroot\Script2.ps1"
& "$PSScriptroot\Script3.ps1"
) |Export-Csv ...
或者,一次匯出每個腳本的輸出,然后Export-Csv -Append用于后續腳本:
& "$PSScriptroot\Script1.ps1" |Export-Csv ...
& "$PSScriptroot\Script2.ps1" |Export-Csv -Append ...
& "$PSScriptroot\Script3.ps1" |Export-Csv -Append ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/366181.html
上一篇:在PowershellI中回圈
