从CSV文件中拆分名称

从CSV文件中拆分名称,csv,powershell-3.0,Csv,Powershell 3.0,我正在编写一个脚本来创建共享邮箱和安全组,然后将用户添加到安全组中,但用户名的格式为“firstname lastname”(john doe),脚本无法找到用户,只有当我将名称切换为“doe,john”时,它才能工作 我确实找到了一些文章可以从“最后,第一个”切换到“第一,最后一个”,但当我试图改变它时,它不起作用 到目前为止,这就是我所拥有的,但它不起作用: Import Csv“c:\Import.Csv”| foreach{ $\.user=“{1){0}”-f($\.user-spli

我正在编写一个脚本来创建共享邮箱和安全组,然后将用户添加到安全组中,但用户名的格式为“firstname lastname”(john doe),脚本无法找到用户,只有当我将名称切换为“doe,john”时,它才能工作

我确实找到了一些文章可以从“最后,第一个”切换到“第一,最后一个”,但当我试图改变它时,它不起作用

到目前为止,这就是我所拥有的,但它不起作用:

Import Csv“c:\Import.Csv”| foreach{
$\.user=“{1){0}”-f($\.user-split'(0),(1))
$_ 
}|导出Csv“c:\Export.Csv”

您需要在空格处拆分(或逗号后跟空格,具体取决于实际数据的外观)。不要在拆分表达式中包含值的分组子匹配。在使用
-replace
运算符时,只包含分组子匹配,这是我更喜欢的:

Import Csv'c:\Import.Csv'| ForEach对象{
$\.user=$\.user-替换“^(.*)(.*)$”、“$2,$1”
$_ 
}|导出Csv'c:\Export.Csv'-NoType
作为每个对象的
ForEach
的替代方法,您可以使用
Select Object

Import Csv'c:\Import.Csv'|
选择Object-Property*,@{n='user';e={$\u.user-replace'^(.*)(.*)','$2,$1'}}}-排除用户|
导出Csv'c:\Export.Csv'-NoType

谢谢Ansgar,但我的CVS文件不包含逗号,所以我在下面调整了您的代码和最终版本,再次感谢

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

你的代码说CSV中的名字有“doe,john”的格式,但你的文本说他们有“john doe”的格式。是哪一个?如果名字有逗号,但我的CSV文件没有逗号,这很有效示例john doe想成为doe,john**这是最后的代码。感谢Ansgar Wiechers***“导入CSV”c:\Import.CSV'|选择对象-属性*@{n='user';e={$\.user-replace'^(.*)(.*),'$2,$1'}}-排除用户|导出Csv'c:\Export.Csv'-NoType'这就是我要求澄清的原因。