Эй парни, я - новичок Powershell и, кажется, продолжаю завоевываться популярность мало странных поведений как это. Вот некоторый тестовый код:
function EchoReturnTest(){
echo "afdsfadsf"
return "blah"
}
$variable = EchoReturnTest
echo ("var: " + $variable)
Выполнение этого сценария генерирует это, как произведено: "var: вздор afdsfadsf"
Почему функция только не возвращает строку "вздор"?
Во-первых, функции PowerShell возвращают все бездействующие «вывод». Вы можете захватить вывод, назначив переменную, и вы можете игнорировать вывод, перенаправляя на $ NULL
, например:
$arrayList.Add("hi") > $null
это обычно выводило бы что-то вроде 0 (индекс, где был добавлен), а потому мы Перенаправлена до $ NULL, вывод не учитывается.
Во-вторых, ECHO
- это просто псевдоним для «вывода записи», который записывает соответствующий объект к выходному потоку. Возвращение «бла»
- это просто удобство, которое эквивалентно:
Write-Output "blah"
return
, поэтому ваша реализация вашей функции эквивалентна этому:
function EchoReturnTest(){
Write-Output "afdsfadsf"
Write-Output "blah"
return
}
, если вы хотите «увидеть» некоторую информацию на хост-консоли без него Рассматривается часть «вывода» функции, затем используйте запись записи, например:
function EchoReturnTest(){
Write-Host "afdsfadsf"
return "blah"
}
также, если у вас нет параметров, то вам не нужны Parens в конце имени функции, например, Функция ECHORETURKESTEST {возвращает «бла»}
.