在我的脚本中,我想将一个csv文件读入一个数组并将第一列中的文本拆分。
该文件包含一个具有2列的表。在第一列中,有个人名称,方括号中有简短的用户名。第二列是用户的位置。
User:
Hoch,Susane (HOCH05)
Albrecht, Melanie (ALBRE05)
Department:
Managment
Salesoffice
我读取了数组中的第一列,并希望将第一个“(”之后的每个字符都拆分。因此,我得到了“ Hoch,Susanne”而不是“ Hoch,Susane(HOCH05)”。
我收到以下错误消息: [Selected.System.Management.Automation.PSCustomObject]不包含名称为“ Split”的方法。
变量“ $ value的类型为:
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False PSCustomObject System.Object
我找不到我的错误。
这是我的代码:
$Arrayusername_ads_unique = New-Object System.Collections.ArrayList
$AD_User = New-Object System.Collections.ArrayList
$AD_User_table = New-Object System.Collections.ArrayList
$username_AD = New-Object System.Collections.ArrayList
$Arrayusername_ads_unique = Get-Content -Path "C:\temp\Userabgleich\Liste-original\User_ADS-utf8.csv"
$Arrayusername_ads_unique | Out-File C:\temp\Userabgleich\output-temp\User_ADS-utf8.csv -Append -Encoding utf8
$AD_User = Import-CSV 'C:\temp\Userabgleich\output-temp\User_ADS-utf8.csv' -Delimiter ";" | sort User
$AD_User_table = $AD_User | Select-Object User
foreach ($value in $AD_User_table)
{
$value.GetType()
$username_AD = $value.Split("(")
}
答案 0 :(得分:1)
您可以修改foreach
循环以获得结果:
foreach ($value in $AD_User_table)
{
($value.user -split "\(")[0]
}
我在.user
的{{1}}属性上进行拆分,以字符串格式检索您想要的值。默认情况下,$ value将是一个$value
,其属性为[PSCustomObject]
。我正在检索索引0(User
),因为无论您是否选择保留输出,您的[0]
匹配项都会占用一行输出。
如果仅循环检索该特定结果,则可以使用正则表达式替换和命名捕获而无需循环即可完成此操作:
-split
答案 1 :(得分:0)
由于您没有提供适当的CSV来进行测试,因此我猜测了它的外观。 [咧嘴]
它做什么...
.Split()
方法在(
上进行拆分$Names
集合这是代码...
# fake reading in a CSV file
# in real life, use Import-CSV
$InStuff = @'
User,Department
"Hoch,Susane (HOCH05)","Managment"
"Albrecht, Melanie (ALBRE05)","Salesoffice"
'@ | ConvertFrom-Csv
$Names = foreach ($IS_Item in $InStuff)
{
$IS_Item.User.Split('(')[0].Trim()
}
$Names
输出...
Hoch,Susane
Albrecht, Melanie