PowerShell和CSV文件

时间:2018-09-06 16:55:13

标签: powershell csv

我有一个脚本,该脚本以for循环运行。

它输出3个变量:$A$B$C

我希望在每次迭代时都将这3个变量输出到文件内的同一行上,而不是标准输出(每个输出都用逗号分隔)。 我想添加一个标题。我正在创建一个CSV文件。

我已经看到了几种在CSV文件中而不是在for循环中输出变量的方法。

是否可以将这三个变量串联起来并将其附加到文件中?

Write-Host $A ',' $B ',' $C | Out-File -FilePath C:\temp\TEST.csv -Append

3 个答案:

答案 0 :(得分:0)

$A = 'foo'
$B = 'bar'
$C = 'baz'
"$A,$B,$C" # outputs Foo,Bar,Baz

但是,如果您使用的是CSV,首选的方法是使用Import-CsvExport-Csv,它们可以为您处理格式。

答案 1 :(得分:0)

Write-Host的输出直接进入主机控制台。它不能通过管道传输。另外,正如已经提到的,在处理CSV时,您通常希望使用Import-CsvExport-Csv cmdlet(特别是因为您想要带有标头的CSV)。

要以Export-Csv可以导出的形式获取一堆变量,请构造一个自定义对象,如下所示:

New-Object -Type PSObject -Property @{
    'X' = $A
    'Y' = $B
    'Z' = $C
} | Export-Csv 'C:\Temp\test.csv' -NoType

属性哈希表的键成为CSV的列标题。

由于您说要从for循环中导出数据,因此需要将参数-Append添加到Export-Csv

for (...) {
    New-Object ... | Export-Csv 'C:\Temp\test.csv' -NoType -Append
}

这是因为for循环不会写入管道,这意味着这样的操作将不起作用:

for (...) {
    New-Object ...
} | Export-Csv 'C:\Temp\test.csv' -NoType

但是,根据实际循环的样子,您可以用范围运算符(..)和ForEach-Object循环的组合来代替它:

1..5 | ForEach-Object {
    New-Object ...
} | Export-Csv 'C:\Temp\test.csv' -NoType

答案 2 :(得分:0)

提供的at each iteration to outout those 3 variables 表示文字,
您可以通过PSCustomObject收集变量的for循环输出,然后Export-Csv收集结果。

为演示一个简单的计数循环:

$Result = for ($i=1;$i -lt 5;$i++){[pscustomobject]@{X=$i;Y=$i+1;Z=$i+2}}
$Result

X Y Z
- - -
1 2 3
2 3 4
3 4 5
4 5 6

然后导出/转换为Csv:

$Result|ConvertTo-Csv -NoTypeInformation
"X","Y","Z"
"1","2","3"
"2","3","4"
"3","4","5"
"4","5","6"