Write-Output
редко требуется, потому что вы можете положиться на неявное поведение вывода PowerShell :
# By neither redirecting nor piping nor capturing the output from
# this call, what it returns is *implicitly* output.
# Note the absence of parentheses and the separation of arguments with whitespace.
Get-FilesByDate "txt" 1 1 "/home/thufir/"
Обратите внимание, как аргументы должны передаваться без скобок вокруг списка аргументов и , разделенных пробелами , а не с помощью псевдо-метода синтаксис вы пытались.
Другими словами: Команды PowerShell (командлеты, функции, сценарии, псевдонимы) вызываются как команды оболочки , а не как методы в C #.
Чтобы передать вывод команды в качестве аргумента другой команде:
- заключить команду в
(...)
или
- , чтобы вывод обрабатывался как массив , заключите его в
@(...)
или
- для передачи вывода из нескольких операторов, заключить их в
$(...)
(или @(...)
)
Таким образом, чтобы использовать Write-Output
явно (что, как указано, не обязательно), вам нужно написать:
Write-Output (Get-FilesByDate "txt" 1 1 "/home/thufir/")
К заполнить массив выводом из Get-FilesByDate
:
$files = @(Get-FilesByDate "txt" 1 1 "/home/thufir/")
@(...)
гарантирует, что $files
получает массив, даже если функция возвращает только единственный файл; в качестве альтернативы, вы можете тип-ограничение переменную и тем самым гарантировать, что это массив:
[array] $files = Get-FilesByDate "txt" 1 1 "/home/thufir/"
Обратите внимание, однако, что явное использование массивов часто не требуется в PowerShell (начиная с версии 3), потому что даже скаляры (одиночные значения) неявно действуют как массивы - см. этот ответ .
Дополнительная литература:
- Режимы разбора PowerShell: about_Parsing раздел справки.
- Как PowerShell анализирует аргументы команды: см. этот ответ .