从 CSV 文件中拆分名称
split Name from CSV file
我正在编写一个脚本来创建共享邮箱和安全组,然后将用户添加到安全组,但用户名的格式为 "firstname lastname" (john doe),脚本无法找到用户,只有当我将名称切换为 "doe, john" 时它才有效。
我确实找到了一些可以从 "last, first" 切换到 "first, last" 的文章,但是当我尝试更改时它不起作用。
这是我目前所拥有的,但没有用:
Import-Csv "c:\import.csv" | foreach {
$_.user = "{1) {0}" -f ($_.user -split '(0), (1)' )
$_
} | Export-Csv "c:\export.csv"
您需要以空格分隔(或逗号后跟空格,具体取决于您的实际数据)。不要在拆分表达式中包含值的分组子匹配项。使用 -replace
运算符时,您只包含分组的子匹配项,这是我更喜欢的:
Import-Csv 'c:\import.csv' | ForEach-Object {
$_.user = $_.user -replace '^(.*) (.*)$', ', '
$_
} | Export-Csv 'c:\export.csv' -NoType
作为 ForEach-Object
的替代方案,您可以使用 Select-Object
和 calculated property:
Import-Csv 'c:\import.csv' |
Select-Object -Property *,@{n='user';e={$_.user -replace '^(.*) (.*)$', ', '}} -Exclude user |
Export-Csv 'c:\export.csv' -NoType
谢谢 Ansgar,但我的 CVS 文件不包含逗号,所以我在下面调整了你的代码和最终版本,再次感谢
Import-Csv 'c:\import.csv' |
Select-Object -Property *,@{n='user';e={$_.user -replace '^(.*) (.*)$', ', '}} -Exclude user |
Export-Csv 'c:\export.csv' -NoType
我正在编写一个脚本来创建共享邮箱和安全组,然后将用户添加到安全组,但用户名的格式为 "firstname lastname" (john doe),脚本无法找到用户,只有当我将名称切换为 "doe, john" 时它才有效。
我确实找到了一些可以从 "last, first" 切换到 "first, last" 的文章,但是当我尝试更改时它不起作用。
这是我目前所拥有的,但没有用:
Import-Csv "c:\import.csv" | foreach {
$_.user = "{1) {0}" -f ($_.user -split '(0), (1)' )
$_
} | Export-Csv "c:\export.csv"
您需要以空格分隔(或逗号后跟空格,具体取决于您的实际数据)。不要在拆分表达式中包含值的分组子匹配项。使用 -replace
运算符时,您只包含分组的子匹配项,这是我更喜欢的:
Import-Csv 'c:\import.csv' | ForEach-Object {
$_.user = $_.user -replace '^(.*) (.*)$', ', '
$_
} | Export-Csv 'c:\export.csv' -NoType
作为 ForEach-Object
的替代方案,您可以使用 Select-Object
和 calculated property:
Import-Csv 'c:\import.csv' |
Select-Object -Property *,@{n='user';e={$_.user -replace '^(.*) (.*)$', ', '}} -Exclude user |
Export-Csv 'c:\export.csv' -NoType
谢谢 Ansgar,但我的 CVS 文件不包含逗号,所以我在下面调整了你的代码和最终版本,再次感谢
Import-Csv 'c:\import.csv' |
Select-Object -Property *,@{n='user';e={$_.user -replace '^(.*) (.*)$', ', '}} -Exclude user |
Export-Csv 'c:\export.csv' -NoType