Метод "split" не найден в [Selected.System.Management.Automation.PSCustomObject] - PullRequest
0 голосов
/ 04 мая 2019

в моем скрипте я хочу прочитать csv-файл в массив и разделить текст в первом столбце.

Файл состоит из таблицы с 2 столбцами. В первом столбце указаны личные имена с короткими именами пользователей в скобках. Во втором столбце указаны позиции пользователя.

User:
Hoch,Susane (HOCH05)
Albrecht, Melanie (ALBRE05)

Department:
Managment
Salesoffice

Я прочитал первый столбец в массиве и хочу разделить каждый символ после первого "(". Таким образом, у меня вместо "Hoch, Susane (HOCH05)" вместо "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 ]

1 голос
/ 04 мая 2019

Вы можете изменить цикл foreach для достижения результатов:

foreach ($value in $AD_User_table)
{
    ($value.user -split "\(")[0]
}

Я делю на .user свойство $value, чтобы получить значение, которое вы ищете в строковом формате. По умолчанию $ value будет [PSCustomObject] со свойством под названием User. Я получаю индекс 0 ([0]), потому что ваше совпадение -split будет занимать строку вывода независимо от того, хотите ли вы сохранить вывод.

Если вы только получаете цикл для получения этого конкретного результата, вы можете выполнить это без цикла, используя подстановку регулярных выражений и именованные захваты:

$ad_user_table.user -replace "(?<Name>.*?)\(.*",'${Name}'
0 голосов
/ 04 мая 2019

, поскольку вы не предоставили надлежащий CSV для тестирования, я предположил, как это будет выглядеть. [ ухмылка ]

что он делает ...

  • использует метод .Split() для разделения на (
  • получает 1-й результат этого разделения
  • удаляет любые пробелы в начале / конце
  • отправляет результат в $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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...