我想导出已在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
答案 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.rows
在Foreach-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}