$inputの謎(2)

パイプでオブジェクトが渡されたかどうか判断するには?

$inputのCloneメソッド、MoveNextメソッドを組み合わせることで、オブジェクトが渡されたかどうか判断できます。

パイプでオブジェクトが渡されたかどうか判断する
function existPipedObject
{
    $test = $input.clone()
    $test.MoveNext()
}
  • MoveNextメソッドは、オブジェクト配列のポインタを次の要素に移します。
    • 戻り値
      • 次の要素があればTrue
      • 次の要素がなければFalse
  • $inputにMoveNextするとポインタが移動してしまうため、cloneメソッドでコピーしたオブジェクト配列をMoveNextしています。
利用例
MSH C:\> ls | existPipedObject
True
MSH C:\> existPipedObject
False
MSH C:\>

「more」の改良

$inputの要素数が0個かどうかで分岐するようにしました。

function more
{
    $test = $input.Clone()
    if($test.MoveNext())
    {
        $input | out-host -paging
    }
    
    if($args[0] -ne $null)
    {
        get-content $args[0] | out-host -paging
    }
}