Kann eine PowerShell-Funktion feststellen, ob sie als Teil einer Pipeline ausgeführt wird? Ich habe eine Funktion, die ein Array mit Instanzen von FileInfo
füllt, die ich der Pipeline "nachgeben" möchte, wenn die Funktion auf diese Weise ausgeführt wird oder eine hübsche Ausgabe erzeugt, wenn die Funktion von der Befehlszeile aus aufgerufen wird.Kann ich feststellen, ob eine PowerShell-Funktion als Teil einer Pipeline ausgeführt wird?
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
}
}
}
Grundsätzlich, ich versuche, herauszufinden, wie INVOKED_IN_PIPELINE
zu implementieren. Wenn es in einer Pipeline ausgeführt wird (z. B. Do-Something | format-table fullname
), würde ich einfach das Array liefern, aber wenn es direkt ausgeführt wird (z. B. Do-Something
), würde es den Inhalt des Arrays auf die Konsole drucken.
Gibt es eine Möglichkeit, dies zu tun? Wenn es einen "idiomatischen" Weg gibt, um so etwas zu erreichen, würde mich das auch interessieren.
Warum wurde dieser Downvoted? –