我正在读一个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行写另一行数据)
答案 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)。