2013-08-23 45 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)。