首页 > 解决方案 > Powershell - 将数组导出到不同列中的 CSV

问题描述

我正在尝试从 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

解决方案


如果您将场景存储在结构化对象中,则可以使用 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

推荐阅读