Инициировать массив из Select-Object - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь сгенерировать строку вывода типа Item1, Item2, которая соединяется с разделителем запятых.Мы делаем это, инициируя пустой массив в Select-Object -Property.

Проверьте этот код:

$Test =  @(
    [PSCustomObject]@{
        Name = 'Test'
    }
    [PSCustomObject]@{
        Name = 'Test2'
    }
) | Select-Object -Property @{N = 'Problem'; E = { @() } },
@{N = 'EmployeeType'; E = { $null } }, *

foreach ($R in $Test) {
    $R.Problem += 'Item1'
    $R.Problem += 'Item2'
}


$Test | Select-Object -Property @{Name = 'Problem'; Expression = { $_.Problem -join "; " } }, * -ExcludeProperty Problem | fl

Результат:

Problem      : Item1Item2
Name         : Test

Problem      : Item1Item2
Name         : Test2

Почему это свойство Problem объединены как String, а не как Array?Как это может быть преобразовано в Array?

Ответы [ 2 ]

5 голосов
/ 20 июня 2019

Чтобы создать пустой массив в выражении вычисляемого свойства, @() недостаточно, потому что PowerShell сгладит это, и он станет $ null.

Используйте ,@() вместо

$Test =  @(
    [PSCustomObject]@{
        Name = 'Test'
    }
    [PSCustomObject]@{
        Name = 'Test2'
    }
) | Select-Object -Property @{N = 'Problem'; E = { ,@() } },
                            @{N = 'EmployeeType'; E = { $null } }, *

foreach ($R in $Test) {
    $R.Problem += 'Item1'
    $R.Problem += 'Item2'
}

$Test | Select-Object -Property @{Name = 'Problem'; Expression = { $_.Problem -join "; " } }, * -ExcludeProperty Problem | fl

Возвращает:

Problem      : Item1; Item2
EmployeeType : 
Name         : Test

Problem      : Item1; Item2
EmployeeType : 
Name         : Test2
0 голосов
/ 20 июня 2019

К сожалению, такой способ создания пустого массива не сработал.

PS C:\users\js> $test[0].problem.gettype()
You cannot call a method on a null-valued expression.
At line:1 char:1
+ $test[0].problem.gettype()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

PS C:\users\js> $test[0].problem -eq $null
True

Кстати, использование "+ =" убивает щенков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...