Могу ли я определить, работает ли функция PowerShell как часть конвейера?

Может ли функция PowerShell определить, выполняется ли она как часть конвейера? У меня есть функция, которая заполняет массив экземплярами FileInfo , которые я хотел бы «передать» конвейеру, если функция выполняется таким образом, или произвести какой-то красивый вывод, если функция вызывается сама по себе из командной строки.

function Do-Something {
    $file_infos = @()
    # Populate $file_infos with FileInfo instances...

    if (INVOKED_IN_PIPELINE) {
        return $file_infos
    }
    else {
        foreach ($file_info in $file_infos) {
            write-host -foregroundcolor yellow $file_info.fullname
        }
    }
}

По сути, я пытаюсь понять, как реализовать INVOKED_IN_PIPELINE . Если он выполняется в конвейере (например, Do-Something | полное имя-таблицы-формата ), Я бы просто выдал массив, но если запустить его напрямую (например, Do-Something ), он будет красиво выводить содержимое массива на консоль.

Есть ли способ сделать это? Если есть более «идиоматический» способ достичь такого рода вещей, мне также было бы интересно узнать.

14
задан Richard Cook 28 December 2010 в 21:59
поделиться