Как вывести текст или вернуть объект из сценария?

#powershell

#powershell

Вопрос:

Как я могу заставить вывод сценария вести себя аналогично Get-Process командлету, где он либо вернет читаемый человеком форматированный вывод при непосредственном вызове, либо объект, т. е. PSCustomObject, который будет использоваться в другом сценарии / конвейере?

В принципе, скрипт понимает контекст своего вызова.

Очевидно, что я могу это сделать MyScript.ps1 (сбрасывает форматированный текст) или MyScript.ps1 -AsObject , но это не кажется обычным.

Кроме того, если для этого есть какой-то термин, пожалуйста, просветите меня.

Комментарии:

1. Сценарии или функции могут возвращать любой «объект». Как правило, если сценарий может возвращать или не возвращать что-либо, используемый параметр -Passthru указывает сценарию возвращать объекты. Для сценария, генерирующего некоторые выходные данные, обычно используется командлет Write-Output .

2. Да, это действительно кажется общепринятым способом сделать это. Спасибо. Если вы хотите указать это в ответе, я отмечу его как принятый. Кроме того, есть идеи, почему Get-процесс «умный» и не нуждается в этом флаге?

3. Get-процесс всегда возвращает массив объектов процесса. Это преобразуется в текст позже, когда он будет помещен на консоль.

Ответ №1:

Сценарии или функции могут возвращать любой «объект». Как правило, если сценарий может возвращать или не возвращать что-либо, используется параметр-Passthru для указания сценарию возвращать объекты. Для сценария, генерирующего некоторые выходные данные, обычно используется командлет для записи.

В общем Get-* случае командлет собирается вернуть что-то, что будет использоваться в последующих командлетах в конвейере. Это не относится к примеру, для Set-* которого могут быть возвращены или не возвращены объекты. Вот почему -Passtru параметр больше присутствует Set-* , чтобы вы могли продолжить конвейер по любой причине.