Явно возвращаемое значение в многострочном вычисляемом свойстве в PowerShell - PullRequest
1 голос
/ 24 января 2020

В PS при использовании Select-Object параметр -Property "определяет свойства для выбора":

Значение параметра Property может быть новым Рассчитанное свойство . Для создания вычисляемого свойства используйте таблицу ha sh.

Допустимые ключи:

  • Имя : <string>
  • Выражение : <string> или <script block>

В качестве отправной точки приведем анонимный объект

$person = [pscustomobject]@{
    FirstName = "Kyle";
    LastName = "Mit"
}

Следующее вычисленное свойство работает просто отлично:

$person | Select-Object 'FirstName', 'LastName', 
            @{
                Name="FullName";
                Expression= { "$($_.FirstName) $($_.LastName)" }
            }

, которое правильно возвращает следующее:

FirstName LastName FullName
--------- -------- --------
Kyle      Mit      Kyle Mit

Однако , я пытаюсь построить вычисляемое свойство, которое требует сложной логики c и требует нескольких строк для реализации. Как только у меня есть другое возвращаемое значение внутри выражения, оба значения возвращаются.

Таким образом, следующий запрос вернет FullName как { false, "Kyle Mit" }

$person | Select-Object 'FirstName', 'LastName', 
            @{
                Name="FullName";
                Expression= { 
                    "test" -eq "example"
                    return "$($_.FirstName) $($_.LastName)" 
                }
            }

, который возвращает следующее:

FirstName LastName FullName         
--------- -------- --------         
Kyle      Mit      {False, Kyle Mit}

Но я пытаюсь явно вернуть только последнее утверждение. Определение с помощью ; или return, похоже, не помогает.

Есть идеи?

1 Ответ

1 голос
/ 24 января 2020

Просто выбросьте результат нежелательного выражения с помощью Out-Null.:

$person | Select-Object 'FirstName', 'LastName',
             @{
                 Name="FullName";
                 Expression= {
                     "test" -eq "example" | out-null
                    return "$($_.FirstName) $($_.LastName)"
                 }
             }
...