2013-10-29 75 views
2

我一直receivingthe rollowing錯誤信息 - 「空管件是不允許的」每當我試圖管我的結果到CSV文件。任何想法爲什麼這可能會發生?PowerShell的 - 空管元素是不允許

$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循環內,但它只返回的最後一個記錄。

+1

要一次執行'Export-csv'一個對象,請記住添加'-Append'開關。這應該允許您識別哪些數據導致了問題。 PS。你爲什麼要在新的'PSObject'上使用'select':這只是浪費週期。 – Richard

+0

@Richard感謝您的回覆。你能告訴我你將如何去做這件事嗎?此外,爲什麼我浪費週期 - 是否有更好的方式來做到這一點。歡呼 – theshizy

+0

Re。我的PS:只是使用'New-Object PSObject ...'的結果,不需要執行'Select'(它只是創建一個具有指定屬性的新PSObject ...,它正在重複「New-Object」剛剛)。 – Richard

回答

5

我相信你所遇到的問題是各地使用的foreach和管道,你正在處理您的項目在foreach語句,但仍希望他們是對的管道。

這是一個常見錯誤,在文章Essential PowerShell: Understanding foreachEssential PowerShell: Understanding foreach (Addendum)中有更詳細的解釋。

你應該能夠實現你想要的是這樣的:

$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 
8

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