$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 } }