我有一个格式良好的CSV文件,我想阅读,同时重新格式化一些值。由于某种原因,下面的代码不起作用($csv
变量最终为空):
$csv = Import-Csv "result.log" -Delimiter "|" | ForEach-Object {
$_.PSObject.Properties.Value | ForEach-Object {
if ($_ -like '*---*') { $_ = "" }
}
}
我做错了什么?
答案 0 :(得分:1)
您的结果是空白的,因为您没有向管道返回任何内容(您只是更改了一个或多个属性的值,但之后却没有输出它们)。
可能有一个更简单的解决方案,但我认为这可以达到你想要的效果:
$CSV = Import-Csv "result.log" -Delimiter "|" | Foreach-Object {
$Output = New-Object -TypeName PSObject
$_.PSObject.Properties | Foreach-Object {
If ($_.Value -like '*---*') { $_.Value = '' }
$Output | Add-Member -Name $_.Name -Value $_.Value -MemberType NoteProperty
}
$Output
}
这会对CSV的每一行执行以下操作:
Add-Member
将这些属性添加到对象此结果转到$CSV
变量,然后您可以通过Export-CSV
将其作为CSV输出(或者您可以跳过将变量放入变量并在结尾使用Export-CSV
外ForEach-Object
)。