PowerShell имеет действительно дурацкую семантику возврата - по крайней мере, если смотреть с более традиционной точки зрения программирования. Есть две основные идеи, чтобы обернуть голову вокруг:
- Весь вывод захватывается и возвращается
- Ключевое слово return действительно просто указывает на логическую точку выхода
Таким образом, следующие два блока сценария будут эффективно выполнять одно и то же:
$a = "Hello, World"
return $a
$a = "Hello, World"
$a
return
Переменная $ a во втором примере остается как вывод для конвейера, и, как уже упоминалось, весь вывод возвращается. Фактически, во втором примере вы можете полностью опустить возврат и получить то же поведение (возврат будет подразумеваться, когда функция естественным образом завершает работу и завершается).
Без большего определения вашей функции я не могу сказать, почему вы получаете объект PSMethod. Я предполагаю, что у вас, вероятно, есть несколько строк, которые не фиксируются и помещаются в выходной конвейер.
Также стоит отметить, что вам, вероятно , не нужны эти точки с запятой - если вы не вкладываете несколько выражений в одну строку.
Вы можете прочитать больше о семантике возврата на странице about_Return в TechNet или вызвав help return
команду из самой PowerShell.