#powershell
#powershell
Вопрос:
Как я могу заставить вывод сценария вести себя аналогично Get-Process
командлету, где он либо вернет читаемый человеком форматированный вывод при непосредственном вызове, либо объект, т. е. PSCustomObject, который будет использоваться в другом сценарии / конвейере?
В принципе, скрипт понимает контекст своего вызова.
Очевидно, что я могу это сделать MyScript.ps1
(сбрасывает форматированный текст) или MyScript.ps1 -AsObject
, но это не кажется обычным.
Кроме того, если для этого есть какой-то термин, пожалуйста, просветите меня.
Комментарии:
1. Сценарии или функции могут возвращать любой «объект». Как правило, если сценарий может возвращать или не возвращать что-либо, используемый параметр
-Passthru
указывает сценарию возвращать объекты. Для сценария, генерирующего некоторые выходные данные, обычно используется командлетWrite-Output
.2. Да, это действительно кажется общепринятым способом сделать это. Спасибо. Если вы хотите указать это в ответе, я отмечу его как принятый. Кроме того, есть идеи, почему Get-процесс «умный» и не нуждается в этом флаге?
3. Get-процесс всегда возвращает массив объектов процесса. Это преобразуется в текст позже, когда он будет помещен на консоль.
Ответ №1:
Сценарии или функции могут возвращать любой «объект». Как правило, если сценарий может возвращать или не возвращать что-либо, используется параметр-Passthru для указания сценарию возвращать объекты. Для сценария, генерирующего некоторые выходные данные, обычно используется командлет для записи.
В общем Get-*
случае командлет собирается вернуть что-то, что будет использоваться в последующих командлетах в конвейере. Это не относится к примеру, для Set-*
которого могут быть возвращены или не возвращены объекты. Вот почему -Passtru
параметр больше присутствует Set-*
, чтобы вы могли продолжить конвейер по любой причине.