我在PowerShell中导入CSV,并希望通过添加或更改内容再次导出。
这就是我导入它的方式:
$csv = Import-Csv $csvFile -Delimiter ";"
CSV具有三个列,即用户名,密码和密钥。
当我想更改一行时:
$csv = $csv | ? { $_.UserName -eq $UserName } | % {
$_.pass = $PasName
$_.key = $KeyName
}
$csv | Export-Csv $csvFile -Delimiter ";" -Force -NoTypeInformation
它留下了没有任何内容的CSV文件。为什么会这样?
此外,当我只想添加一行时
$csv += [PSCustomObject]@{
UserName = $UserName
pass = $PasName
key = $KeyName
}
$csv | Export-Csv $csvFile -Delimiter ";" -Force -NoTypeInformation
它返回错误,说:
Fehler beim Aufrufen der Methode,请使用[System.Management.Automation.PSObject] Keine Methode mit dem Namen“ op_Addition”。
在Zeile:44 Zeichen:13
有人知道为什么会这样吗?
我知道我可以像这样添加内容
$xy = "{0};{1};{2}" -f xy,xy,xy
Add-Content -Path $csvFile -Value $xy
但是我宁愿导出全新的CSV
答案 0 :(得分:1)
您的第二个代码段将空结果,因为您将循环输出分配回了变量$csv
。但是,循环不会产生任何输出,因此您可以通过这样做有效地清除变量。要解决此问题,只需删除分配。循环就地更新变量。
$csv | Where-Object {
$_.UserName -eq $UserName
} | ForEach-Object {
$_.pass = $PasName
$_.key = $KeyName
}
$csv | Export-Csv $csvFile -Delimiter ";" -Force -NoTypeInformation
如果$csv
不是数组(例如,当它为空或仅包含一条记录时),则可能会出现来自第三代码段的错误。您可以通过在导入时将其强制为数组来减轻这种情况:
$csv = @(Import-Csv $csvFile -Delimiter ";")
此外,要将新记录附加到CSV上,将其实际添加到CSV更加干净和直接:
[PSCustomObject]@{
UserName = $UserName
pass = $PasName
key = $KeyName
} | Export-Csv $csvFile -Delimiter ";" -Force -NoTypeInformation -Append