如何将powershel结果导出到csv

时间:2019-07-12 11:31:24

标签: powershell foreach export-csv

我想导出已在ForEach-Object中过滤的内容。问题是我无法导出过滤的数据。

我尝试了以下操作: $getTapes.rows | Export-Csv C:\\123\\123456.txt,但这已导出所有信息而没有过滤器。

$getTapes = Invoke-RestMethod -Method GET -ContentType $content -Uri $Uri -Headers @{'Authorization' = $Authorization}
$today = Get-Date
$getTapes.rows | ForEach-Object {
    $tape = $_;    
    if ( $tape.custom_fields.Ueberschreibschutz.value -ge $today ) {
        Write-Host "Treffer ID=" $tape.asset_tag " Name=" $tape.name " SNR=" $tape.serial " Mediensatz=" $tape.custom_fields.Mediensatz.value
    }
}
$getTapes.rows |export-Csv C:\\123\\123456.txt

我希望:

Treffer ID= 1  Name= 12  SNR= 12345  Mediensatz= M 
Treffer ID= 2  Name= 32  SNR= 54321  Mediensatz= W

2 个答案:

答案 0 :(得分:1)

您不应使用Write-Host收集数据。那只是在屏幕上输出像素。相反,您应该创建一个自定义对象,以后可以使用它,如下所示:

    $Result = $getTapes.rows | ForEach-Object { 
    if ( $_.custom_fields.Ueberschreibschutz.value -ge $today ) {
        [PSCustomObject]@{
            TrefferID  = $_.asset_tag
            Name       = $_.name
            SNR        = $_.serial
            Mediensatz = $_.custom_fields.Mediensatz.value
        }
    }
}

$Result | Export-Csv -Path C:\123\123456.csv -NoTypeInformation

答案 1 :(得分:0)

Write-host除了在控制台中向您显示结果之外,什么也不做,因此不会修改或删除$getTapes.rows中您不需要的内容。 相反,您可以定义变量$result并使用$getTapes.rowsForeach-Object上进行迭代,并在满足if条件的情况下添加结果。

尝试一下:

$getTapes = Invoke-RestMethod -Method GET -ContentType $content -Uri $Uri -Headers @{'Authorization' = $Authorization}
$today = Get-Date
$getTapes.rows | ForEach-Object -begin {$result = "" } {
    $tape = $_;    
    if ( $tape.custom_fields.Ueberschreibschutz.value -ge $today ) {
        $result += "Treffer ID= $($tape.asset_tag) Name= $($tape.name) SNR= $($tape.serial) Mediensatz= $($tape.custom_fields.Mediensatz.value)`n"
    }
} -end {$result | export-Csv C:\123\123456.txt}