Дистрибутив ваш код до минимального воспроизведения, мы получим следующее:
function Invoke-MyFunction
{
write-host "here 1"
@("aaa", "bbb") | format-table -Verbose
write-host "here 2"
return "ccc"
}
$x = Invoke-MyFunction
"---"
$x
, которое выдает:
here 1
here 2
---
aaa
bbb
ccc
Причина, по которой вы не видите вывод из @("aaa", "bbb") | format-table -Verbose
между here 1
и here 2
на консоли указывается, что она возвращается из функции как часть выходного конвейера и присваивается $x
, а не записывается на консоль внутри функции Invoke-MyFunction
.
Как и большинство языков программирования, return
PowerShell вернет значение и выйдет из функции, , но вы также можете передавать значения в «выходной конвейер», просто не записывая выражения в переменная. Например:
function Invoke-MultipleOutputs
{
1
"aaa"
return "ccc"
}
$x = Invoke-MultipleOutputs
$x
$x
будет содержать массив значений - в этом случае @( 1, "aaa", "ccc" )
.
Это эквивалентно
function Invoke-MultipleOutputs
{
Write-Output 1
Write-Output "aaa"
return "ccc"
}
$x = Invoke-MultipleOutputs
$x
В вашем код, вы делаете это: $RepoArray | Select-Object IndexNumber , Name | Format-Table -verbose
, который преобразует $RepoArray
в набор отформатированных табличных объектов, но затем, поскольку результатом является неназначенное выражение, оно записывается в выходной конвейер, а не выводится на консоль.
Чтобы это исправить, вам нужно отобразить вывод Format-Table
в виде строки, а затем записать его в консоль, что вы можете сделать с помощью out-host
...
$RepoArray | Select-Object IndexNumber , Name | Format-Table -verbose | out-host
или out-string
...
$text = $RepoArray | Select-Object IndexNumber , Name | Format-Table -verbose | out-string
write-host $text
Возвращаясь к моему первому примеру, мы получим:
function Invoke-MyFunction
{
write-host "here 1"
@("aaa", "bbb") | format-table -Verbose | out-host
write-host "here 2"
return "ccc"
}
$x = Invoke-MyFunction
"---"
$x
, который теперь выдает:
here 1
aaa
bbb
here 2
---
ccc
Если вы обновите строку $RepoArray | ...
таким же образом, как вы должны видеть, чтобы она отображалась на консоли там, где вы ожидаете.
Надеюсь, это поможет ...