【Power Shell】ファイル名のマッチ/特定更新日のファイルをローテーションするスクリプトを作成

PowerShellでログローテーションのスクリプトを作成致しました。
指定の文字列にマッチするファイルかつ特定更新日のファイルが対象となります。

Get-Childitemコマンドで取得した情報で、ローテーションを行います。
例として、ファイル名の先頭がGetで始まるファイルを対象とします。
フォルダ内の状況は、下記となります。

```:sample1
PS C:\> Get-ChildItem c:\test

    ディレクトリ: C:\test

Mode                 LastWriteTime         Length Name                                                                                         
----                 -------------         ------ ----                                                                                         
d-----        2022/06/21     21:27                LOG                                                                                          
-a----        2022/06/20      0:00              0 Get1                                                                                         
-a----        2022/06/20      0:00              0 Get2                                                                                         
-a----        2022/06/20      0:00              0 Get3                                                                                         
-a----        2022/06/20      0:00              0 Get4                                                                                         
-a----        2022/06/20      0:00              0 Get5                                                                                         
-a----        2022/06/20     23:59              0 Not1                                                                                         
-a----        2022/06/20     23:59              0 Not2                                                                                         
-a----        2022/06/20     23:59              0 Not3                                                                                         
-a----        2022/06/20     23:59              0 Not4                                                                                         
-a----        2022/06/20     23:59              0 Not5                                                                                         
-a----        2022/06/21      0:00              0 text11                                                                                       
-a----        2022/06/21      0:00              0 text12                                                                                       
-a----        2022/06/19     23:59              0 text13                                                                                       
-a----        2022/06/19     23:59              0 text14                                                                                       
-a----        2022/06/19     23:59              0 text15    

```

Where-Objectコマンドで2022/6/20のみの情報を取り出します。
|(パイプ)　を使用して、コマンドの出力結果を次のコマンドに送ります。
下記のコマンドを叩くと、今日日付より古いファイル等のみが出力されると思います。
Get-Dateコマンドで今日日付の取得を行っております。
Get-Childitem c:\test | Where-Object {$_.LastWriteTime.Date -lt (Get-Date).Date}

※(Get-Date).AddDays(-1).Dateで前日日付の取得を行う事が出来ます。

実行結果を変数に格納します。


```:Sample2
PS C:\> $Source = Get-Childitem c:\test | Where-Object {$_.LastWriteTime.Date -lt (Get-Date).Date -and $_.LastWriteTime.Date -ge (Get-Date).AddDays(-1).Date}
```

取得した情報から、ファイル名の先頭がGetで始まるファイルの取得をします。
現状は変数の中は、下記のような状態です。

```:Sample3
PS C:\> echo $Source

    ディレクトリ: C:\test

Mode                 LastWriteTime         Length Name                                                                                         
----                 -------------         ------ ----                                                                                         
-a----        2022/06/20      0:00              0 Get1                                                                                         
-a----        2022/06/20      0:00              0 Get2                                                                                         
-a----        2022/06/20      0:00              0 Get3                                                                                         
-a----        2022/06/20      0:00              0 Get4                                                                                         
-a----        2022/06/20      0:00              0 Get5                                                                                         
-a----        2022/06/20     23:59              0 Not1                                                                                         
-a----        2022/06/20     23:59              0 Not2                                                                                         
-a----        2022/06/20     23:59              0 Not3                                                                                         
-a----        2022/06/20     23:59              0 Not4                                                                                         
-a----        2022/06/20     23:59              0 Not5                                                                                        
```

またまた、Where-Objectコマンドを使用します。下記コマンドを実行すると、ファイル名の先頭がGetで始まるファイルのみが出力されます。
\\$Source | Where-Object {$_.Name -match "^Get"}

後は簡単で、Move-Itemコマンドを実行するだけです。
私は最終的には下記スクリプトを作成致しました。

```:Sample.ps1
#ファイルの収集先
$Target_Folder = "C:\test"
#ログの保管先
$LOG_Folder = "C:\test\LOG"
#スクリプト実行日の日付
$Now_Time = (Get-Date).Date
#スクリプト実行の1日前
$Before_Time =(Get-Date).AddDays(-1).Date

#スクリプト実行時点から前日までのファイル一覧を取得
$Source = Get-ChildItem $Target_Folder | Where-Object {$_.LastWriteTime.Date -lt $Now_Time -and $_.LastWriteTime.Date -ge $Before_Time}
#特定の文字列を含むファイルの移動
$Source | Where-Object {$_.Name -match "^Get"} | Move-Item -Destination $LOG_Folder
```

応用が利くと思いますので、参考にして頂ければ幸いでございます。