Powershell-不允许使用空管道元素
每当我尝试将结果导出到csv文件时,我总是收到滚动错误消息-“不允许使用空管道元素”。知道为什么会这样吗Powershell-不允许使用空管道元素,powershell,csv,Powershell,Csv,每当我尝试将结果导出到csv文件时,我总是收到滚动错误消息-“不允许使用空管道元素”。知道为什么会这样吗 $apps = Import-CSV apps.csv $computers = Import-CSV compobj.csv foreach($computer in $computers) { $computerLob = $computer.lob $lobApps = $apps | ? {$_.lob -eq $computerLob} foreac
$apps = Import-CSV apps.csv
$computers = Import-CSV compobj.csv
foreach($computer in $computers) {
$computerLob = $computer.lob
$lobApps = $apps | ? {$_.lob -eq $computerLob}
foreach($app in $lobApps){
$appLocation = $app.location
$installed=Test-Path "\\$computerHostname\$appLocation"
$computerHostname = $computer.hostname
$results = new-object psobject -property @{Computer=$computer.hostname;App=$app.appname;Installed=$installed} | select Computer,App,Installed
$results
}
} | Export-csv "results.csv" -NoTypeInformation
我试过这样做:
$results | Export-csv "results.csv" -NoTypeInformation
在foreach循环中,但它只返回最后一条记录。我相信您遇到的问题是关于foreach和管道的使用,您正在处理foreach语句中的项,但仍然希望它们在管道中 这是一个常见错误,本文和将对此进行更详细的解释 你应该能够像这样实现你想要的:
$apps = Import-CSV apps.csv
$computers = Import-CSV compobj.csv
$computers | foreach {
$computer = $_
$computerLob = $computer.lob
$lobApps = $apps | ? {$_.lob -eq $computerLob}
$lobApps | foreach {
$app = $_
$appLocation = $app.location
$installed=Test-Path "\\$computerHostname\$appLocation"
$computerHostname = $computer.hostname
new-object psobject -property @{Computer=$computer.hostname;App=$app.appname;Installed=$installed}
}
} | Export-csv "results.csv" -NoTypeInformation
foreach循环不会输出到管道。您可以通过使循环成为子表达式来实现这一点:
$apps = Import-CSV apps.csv
$computers = Import-CSV compobj.csv
$(foreach($computer in $computers) {
$computerLob = $computer.lob
$lobApps = $apps | ? {$_.lob -eq $computerLob}
foreach($app in $lobApps){
$appLocation = $app.location
$installed=Test-Path "\\$computerHostname\$appLocation"
$computerHostname = $computer.hostname
$results = new-object psobject -property @{Computer=$computer.hostname;App=$app.appname;Installed=$installed} | select Computer,App,Installed
$results
}
}) | Export-csv "results.csv" -NoTypeInformation
您不能从任何powershell语句进行管道传输。我不知道为什么 如果。。否则
开关
做而
ForEach
对于
当 编辑:另一种方式。您可以从调用运算符和脚本块(或函数)进行流式传输。将foreach或任何其他语句放入其中。你不必等到它结束
& { foreach ($i in 1..3) { $i } } | measure
Count : 3
Average :
Sum :
Maximum :
Minimum :
StandardDeviation :
Property :
某些流控制表达式不会对其输出进行流式处理。 但它们可以分配给变量,但不能输出流
您可以将表达式输出流放入子表达式
$()
,然后使用另一个命令执行管道。要执行导出csv
一次一个对象,请记住添加-Append
开关。这将允许您识别导致问题的数据。附注:为什么在新的PSObject
上使用select
:那只是浪费周期。@Richard谢谢你的回复。你能告诉我你会怎么做吗?还有,我为什么要浪费周期?有没有更好的方法。干杯。我的PS:只需使用新对象PSObject…
的结果,就不需要执行选择
(它只创建一个具有命名属性的新PSObject…它重复了新对象
刚刚做的事情)。