Powershell CSV создает новую колонку с 2 другими - PullRequest
1 голос
/ 04 февраля 2020

Вот мой сценарий. Я хочу создать новый столбец с именем password, но использовать только первую букву столбца Associate_First_Name, первую букву Associate_Last_Name и последние 4 из Associate_SIN_SSN. Как извлечь только определенные значения из столбца?

$CSV = import-csv "C:\csv" | select Associate_First_Name,Associate_Last_Name,Associate_Email,Associate_SIN_SSN,@{n=’password’;e={$_.Associate_First_Name+ $_.Associate_Last_Name+ $_.Associate_SIN_SSN}}

$CSV | export-CSV "C:\csv"-NoTypeInformation 

1 Ответ

1 голос
/ 04 февраля 2020

Вы можете использовать следующее:

$CSV = Import-Csv "C:\csv" |
    Select-Object Associate_First_Name,Associate_Last_Name,Associate_Email,Associate_SIN_SSN,@{n='Password';e={$_.Associate_First_Name.Substring(0,1).ToLower()+ $_.Associate_Last_Name.Substring(0,1).ToLower() + $_.Associate_SIN_SSN.Substring(($_.Associate_SIN_SSN.Length-4))}}

Для извлечения частей строки вы можете использовать. NET метод Substring () из класса String.


Вы можете немного улучшить читабельность, определив вычисляемое свойство перед командой Select-Object. Также индексируется строковое значение, и отдельные символы могут быть извлечены с использованием индекса ([0] - первый символ).

$Password = @{n='Password'
              e={ $_.Associate_First_Name[0] + $_.Associate_Last_Name[0] + $_.Associate_SIN_SSN.Substring(($_.Associate_SIN_SSN.Length-4)) }
}

$CSV = Import-Csv "C:\csv" |
        Select-Object Associate_First_Name,Associate_Last_Name,Associate_Email,Associate_SIN_SSN,$Password

Другой альтернативой читабельности является не использовать вычисляемые свойства с Select-Object и вместо этого создайте пользовательские объекты. Это также добавляет гибкости для манипулирования каждым значением перед его выводом.

$CSV = Import-Csv 'C:\csv' | ForEach-Object {

    $First = $_.Associate_First_Name.ToLower()
    $Last = $_.Associate_Last_Name.ToLower()
    $Email = $_.Associate_Email.ToLower()
    $SSN = $_.Associate_SIN_SSN
    $Password = $First[0]+$Last[0]+$SSN.Substring(($SSN.Length-4))

    [pscustomobject]@{ 'Associate_First_Name' = $First
                       'Associate_Last_Name' = $Last
                       'Associate_Email' = $Email
                       'Associate_SIN_SSN' = $SSN
                       'Password' = $Password
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...