2013-10-29 2 views
2

결과를 CSV 파일로 파이프하려고 할 때마다 rollowing 오류 메시지가 계속 나타납니다. "빈 파이프 요소가 허용되지 않습니다." 왜 이런 일이 일어날 지 모릅니다. foreach는 루프 내에서Powershell - 빈 파이프 요소가 허용되지 않습니다.

$results | Export-csv "results.csv" -NoTypeInformation 

하지만 그것은 단지 마지막 레코드를 반환

$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 

나는이 일을 시도했습니다.

+1

'Export-csv' 객체 하나를 한번에 수행하려면'-Append' 스위치를 추가해야합니다. 이렇게하면 어떤 데이터가 문제를 일으키는 지 확인할 수 있습니다. 추신. 왜 새로운'PSObject'에서'select'를 사용하고 있습니까? 그것은 순환을 낭비하는 것입니다. – Richard

+0

@ 리차드 답장을 보내 주셔서 감사합니다. 이 일을 어떻게 할 것인지 나에게 보여줄 수 있니? 또한 사이클을 낭비하는 이유는 무엇입니까? 환호 – theshizy

+0

다시. 내 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는 루프는 파이프 라인에 OUPUT하지 않습니다. 루프를 하위 표현식으로 만들면 다음과 같이 할 수 있습니다 :

$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 
관련 문제