#powershell
Вопрос:
Я застрял на этом некоторое время, однако у меня есть множество людей, и я пытаюсь найти последнего человека и создать отдельную колонку только с этим человеком.
Я играл с @{NAME = 'NAME' Expression = {}}
Select-Object
ним, но на самом деле не знаю, как с этим справиться.
Текущий:
| Employee |
|---------------|
| John Doe |
| Jane West |
| Jordan Row |
| Paul Willson |
| Andrew Wright |
желаемый результат:
| Employee | Employee2 |
|--------------|---------------|
| John Doe | |
| Jane West | |
| Jordan Row | |
| Paul Willson | Andrew Wright |
ТИА!
Комментарии:
1. Это странное требование, но ладно 🙂 Когда вы говорите 2-й столбец, вы хотите, чтобы объект, последний объект, имел свойство сотрудника = «Пол Уилсон» и другое свойство под названием Employee2 = «Эндрю Райт», но все остальные значения должны иметь только свойство сотрудника? Или когда вы говорите «столбцы», вы в основном хотите получить этот вывод в формате csv?
2. @Даниэль, эта первая часть-именно то, что я хочу! 🙂
Ответ №1:
Поэтому я решил создать здесь 2 группы. Одна группа содержит все значения, кроме последних 2, а другая группа содержит эти последние 2 значения
# create the sample array
$employees = @(
'John Doe'
'Jane West'
'Jordan Row'
'Paul Willson'
'Andrew Wright'
)
$employees |
# Separate objects into 2 groups: those contained in the last 2 values and those not contained in the last 2 values
Group-Object {$_ -in ($employees | Select-Object -Last 2)} |
ForEach-Object {
switch ($_) {
{$_.name -eq 'False'} { # 'False' Name of group where values are not one of the last 2
# Iterate through all the values and assign them to Employee property. Leave Employee2 property blank
$_.group | ForEach-Object {
[PSCustomObject]@{
Employee = $_
Employee2 = ''
}
}
}
{$_.name -eq 'True'} { # 'True' Name of group where values are those of the last 2
# Create an object that assigns the values to Employee and Employee2
[PSCustomObject]@{
Employee = $_.group[0]
Employee2 = $_.group[1]
}
}
}
}
Выход
Employee Employee2
-------- ---------
John Doe
Jane West
Jordan Row
Paul Willson Andrew Wright
Редактировать
Вот еще один способ, которым вы можете это сделать
$employees[0..($employees.Count-3)] | ForEach-Object {
[PSCustomObject]@{
Employee = $_
Employee2 = ''
}
}
[PSCustomObject]@{
Employee = $employees[-2]
Employee2 = $employees[-1]
}