如何将 Powershell 结果导出到 csv
how to export powershel result to 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
您不应使用 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:33456.csv -NoTypeInformation
Write-host
除了在控制台中显示结果外什么都不做,因此它不会修改或删除您在 $getTapes.rows
中不需要的内容。
相反,您可以定义一个变量 $result
并使用 Foreach-Object
遍历 $getTapes.rows
,如果结果满足您的 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:33456.txt}
我想导出我已经在 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
您不应使用 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:33456.csv -NoTypeInformation
Write-host
除了在控制台中显示结果外什么都不做,因此它不会修改或删除您在 $getTapes.rows
中不需要的内容。
相反,您可以定义一个变量 $result
并使用 Foreach-Object
遍历 $getTapes.rows
,如果结果满足您的 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:33456.txt}