使用powershell -edited导出到csv

时间:2013-08-23 18:55:51

标签: powershell csv export-to-csv

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

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行写另一行数据)

2 个答案:

答案 0 :(得分:1)

我不能提供一个完整的答案(我没有csv数据用offhand进行测试,并且不知道PowerShell的相关位从内存中得到足够好的评论)但至少部分问题您可能正在使用select语句中的变量值,我无法想象您实际上是想这样做。

我想你打算用这些名称来抓取属性(select id,un,first,last,...而不是select $id,$un,$first,$last,...)。

答案 1 :(得分:0)

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

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

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

在本文中,您将创建一个自定义对象数组,然后在读取$ users中的对象时从计算出的变量值中加载每个对象的属性值

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