【发布时间】:2017-09-29 22:51:45
【问题描述】:
这可能更像是一个“PowerShell 如何处理变量和管道”,而不是一个特定的编程问题,但由于(对我而言)这似乎是一种奇怪的行为,我想我会在这里发布它。
我只是在使用 PowerShell 将变量导出到 CSV 时遇到了一些困难,发现 this Stack question that helped me a lot。但是,在摆弄输出时,我得到了两个不同的结果,具体取决于我调用Export-CSV 函数的方式。
我有一个大致如下所示的自定义 PS 对象:
Account Partner ProjectName ProjectPhase
1 A Test Start
2 B Test2 Start
3 A Test4 End
4 C Test3 Middle
....
当我使用以下行时,它会正确输出 CSV 文件:
$csvBody | Export-Csv -Path "$targetPath\$fileName" -Encoding Unicode -NoTypeInformation
但是,当我使用以下行时,它不会:
Export-Csv -InputObject $csvBody -Path "$targetPath\$fileName" -Encoding Unicode -NoTypeInformation
在这种情况下,输出如下所示: 计数,"长度","LongLength","等级","SyncRoot","IsReadOnly","IsFixedSize","IsSynchronized" 263,"263","263","1","System.Object[]","False","True","False"
我从this other Stack post 了解到,输出成为 $csvBody 的属性,它是一个数组。我的问题是为什么当我没有将对象通过管道传输到 Export-CSV 时会发生这种情况,但是当我 am 使用管道时它不会发生 ?
【问题讨论】:
-
这是我尝试使用上述两种不同方法调用的同一个变量。输出要么成为变量的实际内容(使用管道时),要么成为数组的属性(不使用管道时)。我猜这与使用变量作为 -InputObject 或只是管道它之间的某种形式的差异有关,我的问题是这种差异是什么:)
标签: powershell csv