コマンドレットのパラメータを列挙してみる。|Tweetまた続くかどうか不明の新シリーズ。今日書いたワンライナーを記録していきます。今回は、配列に含まれる要素のうち、もっとも出現頻度の多いものを調べる方法です。2という配列がある場合、「0」は6個含まれており最も要素数が多いので、この場合「0」を出力します。ワンライナーは以下のようになります。Name今回のケースのように、「配列内に同一の要素が含まれており、要素ごとに纏める」という手順が必要なときはGroup-Objectコマンドレット(エイリアス:group)の出番です。2}のような出力が得られます。この出力だけでお題の解答である「0」が確認できます。あとはこの出力から求める値を抽出するだけです。Group-Objectコマンドレットの出力はGroupInfoというオブジェクトです。これもオブジェクトなので、他のオブジェクト同様、プロパティ情報を保ったまま後続パイプラインに渡すことができます。Sort-Objectコマンドレット(エイリアス:sort)を用いてGroupInfoのCountプロパティの値で降順ソート(-Descendingパラメータ使用)をかけます。するとCountプロパティが一番大きいGroupInfoオブジェクトが一番最初の要素となります。1と指定することで一番最初のGroupInfoオブジェクトのみ取得します。-ExpandPropertyパラメータを指定します。ところでGroupInfoオブジェクトのGroupプロパティ、どうせNameと同じものがCount分列挙されるだけじゃないか何の意味が?と思われるかも知れないので補足です。Group-Objectコマンドレットには-Propertyパラメータ(位置パラメータなのでパラメータ名は省略可能)が定義されており、指定すると任意のプロパティ値に基づいてグループ化してくれます。Extensionとすると、カレントディレクトリに含まれるファイルが拡張子別にグループ化され、以下のような出力が得られます。cmdlets.ps1...}このようにGroupプロパティの中身は、指定プロパティ値を持つ要素のグループとなっていることが分かると思います。8...}みたいなこともできたりします。-NoElementパラメータを付与すると出力を抑制できます。(この場合、出力はGroupInfoオブジェクトではなく、GroupInfoNoElementオブジェクトとなる)なんか後半はGroup-Objectコマンドレット特集みたくなってしまいました。|Tweet配列変数がnullかそうでないかを調べることはたまにあるかと思います。$null){'$arrayはnull!'}else{'$arrayはnullじゃない!'}とするのはダメです。$array=@($null,$null,121,123)というような配列を渡すと「$arrayはnull!」と表示されてしまいます。こんなことが起きてしまうかというと、-eq演算子は比較演算子であると同時に、配列をフィルタする演算子でもあるからです。1,2,2,3,3,3,4,5という要素を持つ配列のうち、2と一致する要素を持つ配列だけを抽出するのはこんな感じです。222-eq以外にも各種比較演算子が同様に使えます。最初に挙げた例の場合、左辺の$arrayが配列であれば、TrueかFalseを返すのではなく、右辺の値(ここでは$null)と一致するものを抽出して配列として返すのです。$null)はif(@($null,$null))と解釈され、2要素を持つ配列なのでこれは条件文中でTrueに評価されて結果、ifステートメントの中が実行されてしまうわけです。$nullが一要素しか含まれない配列、すなわち$array=@($null,121,123)のような配列ではまた挙動が変わり、「$arrayはnullじゃない!」と表示されます。$null)はif(@($null))と解釈されるためです。@($null)はFalseと解釈されるので、結果elseが実行されるわけです。$nullが長さ0の配列@()を返し、これはFalseと評価されるからです。$array){'$arrayはnull!'}else{'$arrayはnullじゃない!'}右辺と左辺を入れ替えただけですが、問題なく動きます。$null)のようにして変数が配列かどうかまず判断するのでもいいかもです。これ、案外ハマりどころだと思います。「配列要素に二つ以上nullが含まれるときだけ結果がおかしくなる」のも気づきにくい原因。'$arrayはnull!'}なんてのも駄目です。$array=@($false)や$array=@(0)など、要するに、要素数1でその要素がFalseと解釈される配列が来ると「$arrayはnull!」と表示されてしまいます。@mutaguchiBooks書籍版。