У меня есть файлы в массиве
$txt = @(P123456N123, P123456N122, P123456N223, P12asd6N122, P12asd6N124,
P12asd6N201, P1235d6N124, P1235d6N123, P1235d6N122)
Мне нужно получить последние три цифры каждого файла, это уже сделано. Я борюсь с получением таблицы, которая выглядит следующим образом:
Имя файла | Числа |
---|---|
P123456N | 122, 123, 223 |
P12asd6N | 122, 124, 201 |
P1235d6N | 122, 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 можно аудитить и мониторить действия пользователей в системе.
Вы можете сгруппировать значения, используя вычисляемое выражение с 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