1

Powershell には別のトリッキーな問題があります。次の詳細がある〜4000エントリのリストがあります。

<Computername> | <Username> | <StartDate> | <LastDate> | <IDNum>
computer1      | jsmith     | 4/12/12     | 4/12/13    | 52648
computer1      | jsmith     | 4/12/12     | -          | 52649
computer1      | jsmith     | 4/12/12     | 8/7/13     | 52644
computer2      | hreid      | 2/5/12      | 8/5/13     | 52396
computer2      | hreid      | 4/10/12     | 5/18/13    | 52300
computer3      | mdrake     | 2/10/11     | 12/18/12   | 52590
computer3      | mdrake     | 5/10/11     | 3/20/12    | 52593

これは CSV です。Computername と LastDate フィールドを比較し、関連する computername 値を含む最新の行のリストを吐き出す方法を見つけようとしています。CSV を変数に読み込むことはできますが、get-member 値と for each ループにかなりの時間を費やしています。

理想的には、出力は次のようになります。

<Computername> | <Username> | <StartDate> | <LastDate> | <IDNum>
computer1      | jsmith     | 4/12/12     | 8/7/13     | 52644
computer2      | hreid      | 2/5/12      | 8/5/13     | 52396
computer3      | mdrake     | 5/10/11     | 3/20/12    | 52593

なんか複雑だなぁ… 頭の中で分解できなくて。何か助けはありますか?または、これをスクリプト化する方法についてのアイデアも... ここで壁にぶつかっています。

- アップデート -

ありがとうライナント。どうやら私のソースリストはもう少し複雑であることがわかりました。リストからいくつかのコンピューター名が欠落しています...さらに、いくつかのlastdateエントリも欠落しています。したがって、元のリストを次のように変更する必要があります。

<Computername> | <Username> | <StartDate> | <LastDate> | <IDNum>
computer1      | jsmith     | 4/12/12     | 4/12/13    | 52648
computer1      | jsmith     | 4/12/12     | -          | 52649
computer1      | jsmith     | 4/12/12     | 8/7/13     | 52644
computer2      | hreid      | 2/5/12      | 8/5/13     | 52396
computer2      | hreid      | 4/10/12     | 5/18/13    | 52300
computer3      | mdrake     | 2/10/11     | 12/18/12   | 52590
computer3      | mdrake     | 5/10/11     | 3/20/12    | 52593
               | fmann      | 4/11/12     | 3/20/13    | 52342

私はあなたのコード例を試してみて、私がどうするか見てみましょう. このソース リストには、一部のエントリであらゆる種類のものが欠落しているのを見つけて、本当に腹が立っています... うーん。

4

1 に答える 1

5

コンピューター名でグループ化し、グループごとに LastDate で並べ替えて、最後の項目を選択できます。

フォーマットのニーズに合わせて調整する必要がありますが、次のようになります。

Import-Csv -Path .\computers.csv|
    group -Property Computername|
    foreach {
        $_.group|
            sort { try { [datetime]$_.LastDate } catch {} }|
            select -last 1
    }|
    Export-Csv -Path .\computers_LastDate.csv -NoTypeInformation
于 2013-08-09T19:18:28.927 に答える