2016-03-02 88 views
0

我正在创建一个脚本来创建共享邮箱和安全组,然后将用户添加到安全组,但用户名被格式化为“firstname lastname”(john doe),脚本可以只有当我把名字改为“doe,john”时,才能找到用户。CSV文件的名称

我确实发现了一些从“last,first”切换到“first,last”的文章,但是当我尝试更改它时不起作用。

这是我迄今为止,它不工作:

Import-Csv "c:\import.csv" | foreach { 
    $_.user = "{1) {0}" -f ($_.user -split '(0), (1)') 
    $_ 
} | Export-Csv "c:\export.csv" 
+0

您的代码表示CSV中的名称的格式为“doe,john”,但您的文本表示它们的格式为“john doe”。这是什么? –

回答

0

你需要在空间拆分(或逗号后面的空间,这取决于你的实际数据是什么样子)。不要在拆分表达式中包含值的分组子匹配。使用-replace运营商,这就是我宁愿当你只包括分组子匹配:

Import-Csv 'c:\import.csv' | ForEach-Object { 
    $_.user = $_.user -replace '^(.*) (.*)$', '$2, $1' 
    $_ 
} | Export-Csv 'c:\export.csv' -NoType 

作为一种替代ForEach-Object你可以使用Select-Objectcalculated property

Import-Csv 'c:\import.csv' | 
    Select-Object -Property *,@{n='user';e={$_.user -replace '^(.*) (.*)$', '$2, $1'}} -Exclude user | 
    Export-Csv 'c:\export.csv' -NoType 
+0

这个工作,如果名称有逗号,但我的CSV文件没有逗号的例子约翰Doe想成为Doe,约翰 – Yallabina

+0

**这是最终的代码。谢谢Ansgar Wiechers ***'Import-Csv'c:\ import.csv'| Select-Object -Property *,@ {n ='user'; e = {$ _。user -replace'^(。*)(。*)$','$ 2,$ 1'}} - 排除用户| Export-Csv'c:\ export.csv'-NoType' – Yallabina

0

感谢安斯加尔但我的CVS文件不包含逗号,所以我调整了你的代码和最终版本,再次感谢

Import-Csv 'c:\import.csv' | 
Select-Object -Property *,@{n='user';e={$_.user -replace '^(.*) (.*)$', '$2, $1'}} -Exclude user | 
Export-Csv 'c:\export.csv' -NoType 
+0

这就是我要求澄清的原因。 –

+0

谢谢Ansgar :) – Yallabina

相关问题