2013-08-23 43 views
1

我正在阅读csv文件(学生,学校,生日等列表),创建他们的登录名并将数据导出到另一个将导入另一个系统的csv。 除了我只能得到我的csv文件中的一行数据(最后一个用户名),一切都很好。我认为它每次都覆盖相同的行。在PowerShell中执行此操作。帮帮我。这里是我的代码:使用powershell -edited导出到csv

Add-PSSnapin Quest.ActiveRoles.ADManagement 

#import list of students from hourly IC extract 
$users = Import-Csv C:\Users\edge.brandon\Desktop\enrollment\mbcextract.csv | 
    where {$_.'grade' -ne 'PK' -and $_.'name' -ne 'Ombudsman' -and $_.'name' -ne 'Ombudsman MS' -and $_.'name' -ne 'z Transition Services' -and $_.'name' -ne 'z Home Services'} 

if ($users) { 
    foreach ($u in $users) { 

    # sets middle name and initial to null so that variable does not cary over to next student if they have no middle name 
    $middle= $null 
    $mi= $null 

    $first= ($u.'firstname') 
    $last= ($u.'lastname') 
    $middle= ($u.'middlename') 
    $birth= ($u.'birthdate') 
    $grade= ($u.'grade') 
    $id= ($u.'studentNumber') 
    $schoolid= ($u.'sch.number') 

    #Removes spaces, apostrophes, hyphens, periods, commas from name 
    $first=$first.Replace(" ", "") 
    $middle=$middle.Replace(" ", "") 
    $last=$last.Replace(" ", "") 
    $first=$first.Replace("'", "") 
    $middle=$middle.Replace("'", "") 
    $last=$last.Replace("'", "") 
    $first=$first.Replace("-", "") 
    $middle=$middle.Replace("-", "") 
    $last=$last.Replace("-", "") 
    $first=$first.Replace(".", "") 
    $middle=$middle.Replace(".", "") 
    $last=$last.Replace(".", "") 
    $first=$first.Replace(",", "") 
    $middle=$middle.Replace(",", "") 
    $last=$last.Replace(",", "") 

    # sets 1st and middle initial. also sets mmdd of birth 
    $fi= $first.substring(0,1) 
    $mi= $middle.substring(0,1) 
    $mmdd =$birth.substring(0,4) 

    #sets username and then makes sure it truncates anything after 20 characters 
    $un= ($last + $fi + $mi +$mmdd) 
    $un= $un.substring(0,20) 
    } 
} **$users | 
    select $id,$un,$first,$last,$schoolid,$grade,$upn,"1"," ","0" | export-csv MBC.csv** 

Remove-PSSnapin Quest.ActiveRoles.ADManagement 

我发现了一个错误,我改变了$users$u ($u | select $id,$un,$first,$last,$schoolid,$grade,$upn,"1"," ","0" | export-csv mbc.csv -NoTypeInformation)

,并增加了一个破发点步直通的代码,如果我打开CSV文件的代码运行的第一线每次传递都会正确填充csv文件。它继续写在第一行......我尝试了append语句,但它并没有帮助...你如何使它进入csv文件的下一行(即在第1行写入一行数据,去第2行写另一行数据)

+0

你能否提供一些示例数据行? –

+0

我认为@EtanReisner是正确的:-) –

回答

1

我不能提供一个完整的答案(我没有csv数据测试与副手,并不知道相关的powershell足够好的内存来评论特别是),但至少有一部分问题很可能是你在你的select语句中使用了变量的值,我无法想象你真的打算这么做。

我想你的意思是抓住这些名字的属性,而不是(select id,un,first,last,...而不是select $id,$un,$first,$last,...)。

+0

更改属性为ID,联合国..(删除$),当我运行它,而不是数据我得到属性名称,ID,联合国,第一... – branedge

+0

谢谢我查看代码,看起来像我应该使用$ u而不是$ users,做了这个改变,如果我通过代码我可以检查csv文件,它可以工作,但数据不断写入电子表格的第1行,并且覆盖数据...在写入数据后需要强制它到下一行...我尝试追加但id没有工作......谢谢 – branedge

0

我知道这已经快两年了,但其他人可能会发现这个话题。

这里的问题是export-csv会在每次调用文件时重新创建文件。将这一点与您将export-csv发送给$ users用户的最后一条记录的变量值相结合,这将解释您的结果。

我发现了一篇文章,概述了如何做你打算做的事情(我有一个类似的项目,我开始)。与自定义对象工作:https://technet.microsoft.com/en-us/library/ff730946.aspx

正如本文中,您将创建自定义对象的数组,然后加载与属性值的每个对象从计算的变量值,当你通过对象$用户阅读

最后,您可以使用export-csv命令导出对象数组(不是$ users或$ un)。