2017-01-12 1 views
1

Ich habe eine CSV mit mehr als 100 Spalten. Manchmal, wenn ich das Skript ausführe, möchte ich ein paar Spalten auswählen, aber manchmal brauche ich alle Spalten. Es wird in ein | geschrieben werden Pipe-getrennte Datei.Erhalten Sie alle Spalten in einer Reihe von Import-CSV mit anderen Trennzeichen

Gibt es einen Befehl/Eigenschaften für Import-CSV, die es ermöglichen würden, eine vollständige Zeile ohne Angabe aller Header zu erhalten?

Ich habe den folgenden Code versucht, aber ich habe eine hängende | Pipe auf die Zeilen, wenn ich alle Spalten möchte.

# powershell -ExecutionPolicy ByPass -File .\test.ps1 -NoExit -AllColumns 
param(
    [switch]$AllColumns = $false 
) 
$writer = New-Object IO.StreamWriter('output.txt') 
Import-Csv 'test.csv' | ForEach-Object { 
    $writeLine = "" 

    if($_.("Name") -eq "John") { 
     if($AllColumns) { 

      #$writeLine = All Columns with '|' delimiter  
      foreach ($property in $_.PSObject.Properties) { 
       $writeLine = ($writeLine + $property.Value + '|') 
       # Or this - $writeLine = ($writeLine, $property.Value -join '|') 
      } 

     } else { 
      $writeLine = ($_.("Name"), $_.("Code") -join '|') 
     } 
    } 
    $writer.WriteLine($writeLine) 
} 

$writer.Close() 
+1

'Import-Csv' und' Export-CSV' haben die '-Delimiter' Parameter, die Sie das Pipe-Zeichen verwenden könnten eher als '-join' – BenH

Antwort

0

Ich glaube, Sie suchen nach dem Select-Object-Cmdlet. Beispiel Funktionalität

Import-Csv -Path 'C:\2Users50columns.csv' ` 
| Select-Object -Property 'Name','Classification','Age' 

Name   : Esuriency 
Classification : Member 
Age   : 35 minutes ago 

Name   : Shawn 
Classification : Member 
Age   : 27 

So würden Sie ein Select-Object einfügen:

Import-Csv -Path 'text.csv' | Select-Object ... | Foreach-Object { 
Verwandte Themen