在[Selected.System.Management.Automation.PSCustomObject]中找不到方法“ split”

时间:2019-05-04 11:25:54

标签: powershell split

在我的脚本中,我想将一个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("(")
}

2 个答案:

答案 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