2016-04-16 38 views
0

複数の基準を使用してデータをフィルタリングするための最良の方法(以下を参照)が少し失われています。複数の正規表現の一致

例として、MyServer2Sat 18:00は、2つのテキストファイルに出力できるMyServer204-23-16 1800となります。

"Server","MaintenanceWindow","Ping","LastReboot" 
"MyServer1","NoDeadline","Alive","4/8/2016 2:44:32 PM" 
"MyServer2","NA - DYNALG - SRV - Patching - Prod - Sat 18:00","Alive","4/16/2016 10:00:47 AM" 
"YourServer","NA - All DA Servers - Patching - Prod - Fri 22:00","Alive","Access Denied!" 
私の現在のアプローチは以下の通りです

、2つのWhere-Object行が、それは面倒と読みのは容易ではないなってきています。

また、静的な"$((get-date).AddDays(7).ToString('MM-dd-yy')) 17:58"を日付/時刻計算を行い、日付/時刻文字列を出力する動的なものに更新する方法もわかりません。私は[datetime]"04/23/2016 18:00" - (get-date)を使用することができましたが、私はその形式にデータをどのように取得できるか分かりません。

Where-Object {$_ -like '*sat?18:00*' -and $_.MaintenanceWindow -notmatch 'all.da.servers' -and $_.Server -match "^My"} | % {"{0}" -f $_.Server} 

Where-Object {$_ -like '*sat?18:00*' -and $_.MaintenanceWindow -notmatch 'all.da.servers' -and $_.Server -match "^My"} | % {"{0}" -f $_.MaintenanceWindow -replace "^NA.+", "$((get-date).AddDays(7).ToString('MM-dd-yy')) 17:58"} 
+1

おそらくデータをフィルタリングするための最良の方法です。スクリプトブロックを複数の行に分割したり、フィルタ関数に入れることで、可読性を向上させることができます。 –

+0

落札者様に異議申し立てを掲載し、改善のための提案をお願いいたしますか?このサイトで質問を投稿している人は誰もが、スクリプト/プログラミングに慣れているわけではありません。 – user4317867

答えて

1

私は、少なくとも一日のために、追加のフィールドを使って入力CSVのアップグレードをお勧めしますし、メンテナンスウィンドウの開始時間を、おそらく、サーバーグループの名前です。これにより、フィルタリング/処理が大幅に簡素化されます。

あなたが動的に次土曜日の日付を計算する必要がある場合は、このようにそれを行うことができます。

$today = [DateTime]::Today 
$nextSaturday = $today.AddDays((7 - $today.AddDays(1).DayOfWeek)) 

を使用すると、両方の機会に同じフィルタを使用しているあなたは、ループを組み合わせて、Add-Contentを介して出力を行うことができますので、 。それでも、条件を@RyanBemroseとすると、フィルタの全体的な可読性が向上します。また、フォーマット演算子を使用して文字列を空の文字列に変換するのは無意味ですので、それを削除してください。

... | Where-Object { 
    $_ -like '*sat?18:00*' -and 
    $_.MaintenanceWindow -notmatch 'all.da.servers' -and 
    $_.Server -match '^My' 
} | ForEach-Object { 
    $_.Server | Add-Content 'file1.txt' 
    $_.MaintenanceWindow -replace '^NA.+', ('{0:MM-dd-yyy} 17:58' -f $nextSaturday) | 
    Add-Content 'file2.txt' 
} 
+0

出力CSVにこれらの2つの追加の列が表示されるのを少しは止めています。質問が更新されました。 – user4317867

+0

私は[XY問題に再突きつき](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)にこだわっていると思いますが、今回はそれを認識しています。 – user4317867

+0

私はこの可読性の質問に答えようとしています。もう一度ありがとうAnsgar Wiechers!また、スクリプトをさらにクリーンアップするためのフィルタ関数の作成に少し時間を割く予定です。 – user4317867