2017-10-17 25 views
1

J'ai eu mon rapport avec les utilisateurs et les postes de travail. Maintenant, si un utilisateur a plusieurs postes de travail, je veux avoir une ligne distincte pour chacun de ses postes de travail. Toujours avec nom, prénom, poste de travail. À la fin, il devrait être exporté en tant que report-new.csv.trier csv avec de nouvelles lignes

CSV:

"Name","Surname","Workstation" 
"John","Doe","PC001,PC005,PC100" 
"Fonzarelli","Arthur","PC234,PC324" 
"Tribbiani","Joey","PC999" 

Script:

$report = Import-Csv "C:\Scripts\report.csv" 

Foreach ($wst in $report) { 

    If ($wst.Workstation -match ",") { 

     New Line foreach Workstation? Export-Csv "C:\Scripts\report-new.csv" -NoTypeInformation 
    } 
} 

Répondre

1
$Report | ForEach {ForEach ($ws in ($_.workstation -split ",")) { 
    $_ | Select Name, SurName, @{Name = "Workstation"; Expression = {$ws}}} 
} | Export-Csv "C:\Scripts\report-new.csv" -NoTypeInformation 

Résultat:

Name  Surname Workstation 
----  ------- ----------- 
John  Doe  PC001 
John  Doe  PC005 
John  Doe  PC100 
Fonzarelli Arthur PC234 
Fonzarelli Arthur PC324 
Tribbiani Joey PC999 
0

Vous pouvez diviser la propriété Workstation par une virgule et rejoindre ensemble en utilisant une nouvelle ligne. Exemple:

$report = Import-Csv "C:\Scripts\report.csv" 

Foreach ($wst in $report) { 

    ($wst.Workstation -split ',') -join [System.Environment]::NewLine 
} 
+0

Merci pour votre indice Martin. Je viens d'éditer ma question. Il devrait toujours avoir le même schéma: Nom, Surename, Workstation. Et une exportation à la fin. –

+0

Si vous souhaitez l'exporter vers CSV, vous ne pouvez pas placer chaque poste de travail sur une nouvelle ligne, car une nouvelle ligne représente un nouvel enregistrement dans csv. –