这可能更像是“ PowerShell如何处理变量和管道”而不是特定的编程问题,但是由于(对我来说)这似乎是奇怪的行为,我想我应该在这里发布。
我只是在使用PowerShell将变量导出到CSV时遇到了一些困难,发现这个Stack问题对我有很大帮助。但是,在摆弄输出时,根据我对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
在这种情况下,输出如下所示:Count,“ Length”,“ LongLength”,“ Rank”,“ SyncRoot”,“ IsReadOnly”,“ IsFixedSize”,“ IsSynchronized” 263,“ 263”,“ 263”,“ 1“,” System.Object []“,” False“,” True“,” False“
我从其他Stack帖子中了解到,输出成为$ csvBody的属性,该属性是一个数组。我的问题是,当我没有将对象管道输送到Export-CSV时为什么会发生这种情况,而在使用管道时却没有发生呢?
在这里,所有内容都可以用作设计,而且写得不错:
第二种方法是,#TYPE System.Object[]
如果您保留TypeInformation ,则inputobject是a 。
当您使用管道调用Export-Csv时,集合的每个对象都会发送到Cmdlet的进程部分。
取一个整数集合:
$a = 1..4
然后尝试:
$a | Get-Member
它给 : System.Int32
然后尝试:
Get-Member -InputObject $a
它给 : System.Object[]
因此,在您的情况下,导出的对象是数组,也可能很有用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句