Ответ 1
Вот несколько разных подходов для этого:
-
захватить вывод .cmd script:
$output = & external.cmd # saves foo to $output so it isn't returned from the function
-
перенаправить вывод на нуль (выбросить его)
& external.cmd | Out-Null # throws stdout away
-
перенаправить его в файл
& external.cmd | Out-File filename.txt
-
игнорировать его в вызывающем, пропустив его в массиве объектов, которые возвращаются из функции
$val = a echo $val[1] #prints second object returned from function a (foo is object 1... $val[0])
В PowerShell возвращается любое значение, которое ваш код не записывает, возвращается вызывающий (включая stdout, stderr и т.д.). Таким образом, вы должны захватить или передать его на то, что не возвращает значение, или вы получите объект [] в качестве возвращаемого значения из функции.
Ключевое слово return
действительно просто для ясности и немедленного выхода из блока script в PowerShell. Что-то вроде этого будет работать (не дословно, а просто для того, чтобы дать вам идею):
function foo()
{
"a"
"b"
"c"
}
PS> $bar = foo
PS> $bar.gettype()
System.Object[]
PS> $bar
a
b
c
function foobar()
{
"a"
return "b"
"c"
}
PS> $myVar = foobar
PS> $myVar
a
b