Windows Server TechCenter >
Windows Server Forums
>
Windows PowerShell
>
help needed converting a csv
help needed converting a csv
- Hi,
I have a csv containing 3 fields. The field "sPermissions" contains one or more values.
This csv acts as input to a script. But the script can handle only one value per field.
So I need some suggestions to convert this csv :
displayName,samAccountName,sPermissions
"John Doe",JD00,domain\helpdesk1%domain\helpdesk2%domain\helpdesk3
"Brigitta Buh",BB00,domain\helpdesk1%domain\helpdesk3
into this :
displayName,samAccountName,sPermissions
"John Doe",JD00,domain\helpdesk1
"John Doe",JD00,domain\helpdesk2
"John Doe",JD00,domain\helpdesk3
"Brigitta Buh",BB00,domain\helpdesk1
"Brigitta Buh",BB00,domain\helpdesk3
thank you very much for help- Moved byMichael MainerMSFTWednesday, November 04, 2009 6:33 PMMove reason: moved to appropriate forum (Windows Powershell). (From:Development)
Answers
- Powershell:
$new_csv = @()
$old_recs = import-csv "c:\somefolder\perms.csv"
foreach ($old_rec in $old_recs){
foreach ($perm in $old_rec.sPermissions.split("%"){
$new_rec = "" | select displayName,samAccountName,sPermissions
$new_rec.displayName = $old_rec.displayName
$new_rec.samAccountname = $old_rec.samAccountName
$new_rec.sPermissions = $perm
$new_csv += $new_rec
}
}
$new_csv | export-csv "C:\somefolder\newperms.csv"- Proposed As Answer byVadims PodansMVPWednesday, November 04, 2009 8:45 PM
- Marked As Answer byMarco ShawMVP, ModeratorThursday, November 05, 2009 1:57 AM
- > $new_csv | export-csv "C:\somefolder\newperms.csv"
it is a good practice to add -NoTypeInformation switch:
$new_csv | export-csv "C:\somefolder\newperms.csv" -NoTypeInformation
http://www.sysadmins.lv- Marked As Answer byMervyn ZhangMSFT, ModeratorThursday, November 05, 2009 9:30 AM
All Replies
- Powershell:
$new_csv = @()
$old_recs = import-csv "c:\somefolder\perms.csv"
foreach ($old_rec in $old_recs){
foreach ($perm in $old_rec.sPermissions.split("%"){
$new_rec = "" | select displayName,samAccountName,sPermissions
$new_rec.displayName = $old_rec.displayName
$new_rec.samAccountname = $old_rec.samAccountName
$new_rec.sPermissions = $perm
$new_csv += $new_rec
}
}
$new_csv | export-csv "C:\somefolder\newperms.csv"- Proposed As Answer byVadims PodansMVPWednesday, November 04, 2009 8:45 PM
- Marked As Answer byMarco ShawMVP, ModeratorThursday, November 05, 2009 1:57 AM
- > $new_csv | export-csv "C:\somefolder\newperms.csv"
it is a good practice to add -NoTypeInformation switch:
$new_csv | export-csv "C:\somefolder\newperms.csv" -NoTypeInformation
http://www.sysadmins.lv- Marked As Answer byMervyn ZhangMSFT, ModeratorThursday, November 05, 2009 9:30 AM
facepalm
- there is a missing closing ')' after expression part of foreach loop.
foreach ($perm in $old_rec.sPermissions.split("%") ) << {
But for now it works great !!!!
Thank you very much
Erwin - Sorry about that. Actually think I made that harder than it needs to be:
$new_csv = @()
$old_recs = import-csv "c:\somefolder\perms.csv"
foreach ($old_rec in $old_recs){
foreach ($perm in $old_rec.sPermissions.split("%")){
$new_rec = $oldrec
$new_rec.sPermissions = $perm
$new_csv += $new_rec
}
}
$new_csv | export-csv "C:\somefolder\newperms.csv" -notype

