Пользовательская таблица PowerShell и преобразование строки в столбец

У меня есть файлы в массиве

$txt = @(P123456N123, P123456N122, P123456N223, P12asd6N122, P12asd6N124,
 P12asd6N201, P1235d6N124, P1235d6N123, P1235d6N122)

Мне нужно получить последние три цифры каждого файла, это уже сделано. Я борюсь с получением таблицы, которая выглядит следующим образом:

Имя файлаЧисла
P123456N122, 123, 223
P12asd6N122, 124, 201
P1235d6N122, 123, 124

Что у меня есть до сих пор:

$table = @()
foreach ($file in $txt){
    $subNo = $file.basename.substring(($file.basename.length - 4),3)
    $FileName = $file.name.substring(0, 8)
    $table += [PSCustomObject] @{
    FileName = $FileName
    SubNo = $subNo
    }
}

Затем я могу сделать $table | Group-Object FileName, но это дает мне ужасно отформатированный результат, и его нельзя перенести в CSV в формате, указанном ниже. Любая помощь будет оценена по достоинству.

🤔 А знаете ли вы, что...
С помощью PowerShell можно аудитить и мониторить действия пользователей в системе.


2
24
2

Ответы:

Вы можете сгруппировать значения, используя вычисляемое выражение с Group-Object, а затем перебрать сгруппированные объекты, чтобы получить желаемый результат:

$txt = @(
    'P123456N123', 'P123456N122', 'P123456N223', 'P12asd6N122', 'P12asd6N124',
    'P12asd6N201', 'P1235d6N124', 'P1235d6N123', 'P1235d6N122'
)

$txt | Group-Object { $_ -replace '\d{3}$' } | ForEach-Object {
    [pscustomobject]@{
        'File Name' = $_.Name
        'Numbers'   = $_.Group -replace '.+(?=\d{3}$)' -join ', '
    }
}

Регулярное выражение подразумевает, что все файлы заканчиваться 3 цифрами.


Решено

Попробуйте следующее, в котором Group-Object сочетается с Select-Object и рассчитанные свойства:

@(
 'P123456N123', 'P123456N122', 'P123456N223', 'P12asd6N122', 'P12asd6N124',
 'P12asd6N201', 'P1235d6N124', 'P1235d6N123', 'P1235d6N122'
) | 
  Group-Object { $_.Substring(0, 8) } | 
  Select-Object @{ Name='File Name'; Expression='Name'}, 
                @{ Name='Numbers'; Expression = { $_.Group.Substring(8) -join ', ' } }

Вывод на дисплей:

File Name Numbers
--------- -------
P123456N  123, 122, 223
P1235d6N  124, 123, 122
P12asd6N  122, 124, 201