$inputの謎(1)

「more」の挙動

「more」コマンドを作成する - PowerShell Memo
「パイプと引数を同時に渡すと、両方処理してしまう点が課題です」と書きましたが、Cygwin

ls | more test.txt

と打つと、パイプと引数の両方ともページング表示されました。
ということは、「more」コマンドを作成する - PowerShell Memoで書いたMSH「more」は、UNIXの「more」と同等処理ということになりますね。

「System.Array+SZArrayEnumerator」

System.Array+SZArrayEnumeratorはSystem.Arrayの内部クラスです。
System.ArrayのソースはDotNet247: #1 Guide To The Best Web Hosting Companiesで確認できます。

$inputがnullにならないのはなぜ?

パイプで渡されるのはObjectの配列です。
例えば、

get-process | more

を実行すると、存在するプロセスの数を要素数とするObjectがパイプに渡されます。
実際には「System.Diagnostics.Process」の配列ですね。


以下のようにパイプを利用していない場合は、

more xxx.txt

おそらく、要素数0個のObject配列が渡されているのだと思います。
そのため$inputはnullにならないのではないでしょうか。