簡體   English   中英

Powershell - 在不同的列中將數組導出到 CSV

[英]Powershell - Export array to CSV in different columns

我正在嘗試從 csv 文件自動執行以下 API 調用。

http_uri
/ModuleName/api/12345/moverequest/MoveRequestQueue?batchSize=200
/ModuleName/api/Portal/GetGarageLocations?email=Dummy@mail.com
/ModuleName/api/DeliveryDate/CommitEta?ref=H7J3M1EA4LF
/ModuleName/api/35345/moverequest/MoveRequestQueue?batchSize=500

在 csv 文件中的輸出應如下所示。

ScenarioName        Parameter   Value
MoveRequestQueue    batchSize   200
GetGarageLocations  email       Dummy@mail.com
CommitEta           ref         H7J3M1EA4LF
MoveRequestQueue    batchSize   500

我正在使用下面的代碼

$csv = Import-Csv C:\Powershell\Documents\Source.csv

$scenario   = @()

ForEach ($row in $csv){
$httpuri = $($row.http_uri)


#Iterating through CSV rows and segregate values
if ($httpuri -match "="){
    $equalarr = $httpuri -split '='
    if ($equalarr[0] -match "\?"){
        $questionarr = $equalarr[0] -split '\?'
        $scenarionamearr = $questionarr[0] -split '/'
        $totalelements = $scenarionamearr.Count
        $scenarioname = $scenarionamearr[$totalelements-1]

        $Scenario += $scenarioname
        $Scenario += $questionarr[1]
        $Scenario += $equalarr[1]

        }
    }


}

#Adding columns to csv
$columnName = '"Scenario","Parameter","Value"'
Add-Content -Path C:\Powershell\Documents\Output.csv -Value $columnName

#Writing values to CSV
$Scenario | foreach { Add-Content -Path C:\Powershell\Documents\Output.csv -Value $_ }

但是 Outout 生成如下

 Scenario                   Parameter   Value
 DequeueMoveRequestQueue        
 batchSize      
 200        
 GetCarrierLocations        
 email      
 x-qldanxqldanx     

由於我是新手,搜索了很多來解決這個問題,但未能成功。 請對此有所了解。

提前致謝....

如果您將場景存儲在結構化對象中,您可以使用 Powershell 內置的Export-Csv命令來生成您的 csv。

所以,而不是

    $Scenario += $scenarioname
    $Scenario += $questionarr[1]
    $Scenario += $equalarr[1]

存儲一組 powershell 對象:

    $Scenario += [PSCustomObject]@{
        "Scenario" = $scenarioname; 
        "Parameter" = $questionarr[1]; 
        "Value" = $equalarr[1];}

然后,在創建 csv 文件時,只需使用Export-Csv

$Scenario | Export-Csv -NoTypeInformation -Path C:\Powershell\Documents\Output.csv

所以問題是你創建一個空數組,然后一次向它添加一個字符串,這只會使它成為一個字符串數組。 然后,當您將其輸出到文件時,它只會將每個字符串添加到文件中單獨的一行。 您要做的是創建一個對象數組,然后使用Export-Csv cmdlet 將其輸出到 CSV 文件。

創建一個數組,然后一次一個地向其中添加內容並不是一個好方法。 每次您按照您的方式添加內容時,PowerShell 都必須重新創建數組。 最好有一個管道來輸出你想要的東西(對象,而不是字符串),並一次性捕獲它們,創建數組。 或者甚至更好,只需將它們輸出到 CSV 文件,而不是一般地重新收集它們。

$CSV = Import-Csv C:\Powershell\Documents\Source.csv

$CSV.http_uri -replace '^.*/(.*)$','$1'|ForEach-Object{
    $Record = $_ -split '[=\?]'
    [PSCustomObject]@{
        ScenarioName = $Record[0]
        Parameter = $Record[1]
        Value = $Record[2]
    }
    } | Export-Csv -Path C:\Powershell\Documents\Output.csv -Append

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM