🦖
PowerShellでもheadやtailコマンドを実現する方法
概要
こちらで紹介した「ファイルやフォルダーの一覧を更新日付順(降順)に並べ替えて表示する方法」を調べていた際、UNIXのheadやtailコマンドと同じように前方や後方から指定行数分を表示する方法も見つけたので別記事として投稿します。
ちなみにUNIX系だと一覧表示コマンド(ls
)やテキストファイルの確認コマンド(cat
)でも、
パイプライン(|
)とheadやtailを組み合わせる事で実現できますが、
Windows(PowerShell)では一覧表示コマンド(Get-ChildItem
)とテキストファイルの確認コマンド(Get-Content
)、
それぞれで違う方法で対応する必要がありました。
それでは詳しく紹介します。
環境
PowerShellのバージョン
PS C:\Users\XXXX> $PSVersionTable
Name Value
---- -----
PSVersion 7.3.8
PSEdition Core
GitCommitId 7.3.8
OS Microsoft Windows 10.0.19045
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
PS C:\Users\XXXX>
ファイルやフォルダーの参照で対応する方法
前方よりカウントした指定行数分を表示する方法(ファイルやフォルダーの参照)
コピー用
Get-ChildItem | Select-Object -First "表示する行数を指定"
“Select-Object -First XXX”で可能
PS C:\Windows\Logs> Get-ChildItem | Select-Object -First 5
Directory: C:\Windows\Logs
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2023/10/24 11:52 CBS
d---- 2022/11/17 10:09 DISM
d---- 2023/10/20 10:09 DPX
d---s 2023/10/18 15:35 MeasuredBoot
d---- 2023/10/12 8:31 MoSetup
PS C:\Windows\Logs>
後方よりカウントした指定行数分を表示する方法(ファイルやフォルダーの参照)
コピー用
Get-ChildItem | Select-Object -Last "表示する行数を指定"
“Select-Object -Last XXX”で可能
PS C:\Windows\Logs> Get-ChildItem | Select-Object -Last 5
Directory: C:\Windows\Logs
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2023/10/23 8:24 waasmediccapsule
d---- 2022/09/21 13:30 WindowsBackup
d---- 2023/10/24 11:41 WindowsUpdate
d---- 2021/10/13 5:44 WinREAgent
-a--- 2023/10/18 15:54 100389 StorGroupPolicy.log
PS C:\Windows\Logs>
テキスト形式のファイルで対応する方法
前方よりカウントした指定行数分を表示する方法(テキスト形式のファイル)
先頭行からカウントし指定された行数分が表示される。
コピー用
Get-Content "カレントの対象ファイル名(もしくはファイルのフルパス)" -TotalCount "表示する行数を指定"
オプション「Get-Content XXX -TotalCount XXX」
PS C:\Windows\Logs> Get-Content StorGroupPolicy.log -TotalCount 20
07/13/2022 0: 8:19.00000860:RegEnumKeyExW failed with (259)
07/13/2022 0: 8:19.00000860:GP object initialized successfully
07/13/2022 0: 8:19.00000891:Deny_All not set for all. Will query other 6 GUIDs
07/13/2022 0: 8:19.00000906:Policy for other GUID is not enabled, status: 1008
07/13/2022 0: 8:19.00000922:Policy for other GUID is not enabled, status: 1008
07/13/2022 0: 8:19.00000938:Policy for other GUID is not enabled, status: 1008
07/13/2022 0: 8:19.00000938:Policy for other GUID is not enabled, status: 1008
07/13/2022 0: 8:19.00000938:Policy for other GUID is not enabled, status: 1008
07/13/2022 0: 9:27.00000577:Deny_All not set for all. Will query other 6 GUIDs
PS C:\Windows\Logs>
後方よりカウントした指定行数分を表示する方法(テキスト形式のファイル)
最終行からカウントし指定された行数分が表示される。
パターン1:1回きりの確認方法
実行後にプロンプトが返ってくる。
コピー用
Get-Content "カレントの対象ファイル名(もしくはファイルのフルパス)" -Tail "表示する行数を指定"
オプション「Get-Content XXX -Tail XXX」
PS C:\Windows\Logs> Get-Content StorGroupPolicy.log -Tail 20
08/16/2023 23:28:26.00000966:RegEnumKeyExW failed with (259)
08/16/2023 23:28:26.00000966:GP object initialized successfully
08/16/2023 23:28:26.00000982:Deny_All not set for all. Will query other 6 GUIDs
08/16/2023 23:28:26.00000982:Policy for other GUID is not enabled, status: 2
08/16/2023 23:28:26.00000982:Policy for other GUID is not enabled, status: 2
08/16/2023 23:28:26.00000982:Policy for other GUID is not enabled, status: 2
08/16/2023 23:28:26.00000982:Policy for other GUID is not enabled, status: 2
08/16/2023 23:28:26.00000982:Policy for other GUID is not enabled, status: 2
08/16/2023 23:28:26.00000982:Policy for other GUID is not enabled, status: 2
08/16/2023 23:30:26.00000996:Deleted GP object
PS C:\Windows\Logs>
(👆 プロンプトが返ってくる)
パターン2:リアルタイム表示
実行後にプロンプトが返らずに常時監視した状態。(UNIXの“tail -f”とほぼ同じ動き)
コピー用
Get-Content "カレントの対象ファイル名(もしくはファイルのフルパス)" -Tail "表示する行数を指定" -Wait
オプション「Get-Content XXX -Tail XXX -Wait」
PS C:\Windows\Logs> Get-Content .\StorGroupPolicy.log -Tail 20 -Wait
10/18/2023 6:52: 3.00000048:RegEnumKeyExW failed with (259)
10/18/2023 6:52: 3.00000048:GP object initialized successfully
10/18/2023 6:52: 3.00000063:Deny_All not set for all. Will query other 6 GUIDs
10/18/2023 6:52: 3.00000063:Policy for other GUID is not enabled, status: 2
10/18/2023 6:52: 3.00000063:Policy for other GUID is not enabled, status: 2
10/18/2023 6:52: 3.00000063:Policy for other GUID is not enabled, status: 2
10/18/2023 6:52: 3.00000063:Policy for other GUID is not enabled, status: 2
10/18/2023 6:52: 3.00000063:Policy for other GUID is not enabled, status: 2
10/18/2023 6:52: 3.00000063:Policy for other GUID is not enabled, status: 2
10/18/2023 6:54: 3.00000068:Deleted GP object
(👆 プロンプトが返らずリアルタイム監視。"Ctrl + C"でプロンプトに戻る)
パターン3:リアルタイム&Grep検索の表示
実行後にプロンプトが返らず文字列でフィルターし常時監視した状態に。(UNIXの“tail -f XXX | grep XXX”とほぼ同じ動き)
コピー用
Get-Content "カレントの対象ファイル名(もしくはファイルのフルパス)" -Tail "表示する行数を指定" -Wait | Select-String -Pattern "検索文字列(正規表現も可能)"
オプション「Get-Content XXX -Tail XXX -Wait | Select-String -Pattern XXX」
PS C:\Windows\Logs> Get-Content .\StorGroupPolicy.log -Tail 20 -Wait | Select-String -Pattern ".*is not enabled.*"
10/18/2023 6:52: 3.00000063:Policy for other GUID is not enabled, status: 2
10/18/2023 6:52: 3.00000063:Policy for other GUID is not enabled, status: 2
10/18/2023 6:52: 3.00000063:Policy for other GUID is not enabled, status: 2
10/18/2023 6:52: 3.00000063:Policy for other GUID is not enabled, status: 2
10/18/2023 6:52: 3.00000063:Policy for other GUID is not enabled, status: 2
10/18/2023 6:52: 3.00000063:Policy for other GUID is not enabled, status: 2
(👆 プロンプトが返らず文字列フィルタ + リアルタイム監視。"Ctrl + C"でプロンプトに戻る)
参考情報
- ファイル・フォルダーの参照
<https://www.gamingdeputy.com/jp/windows/powershell-リスト-ファイルの日付順の並べ替え/> - テキストの中身を参照
<https://tex2e.github.io/blog/powershell/Get-Content-TotalCount-Tail> - PowerShellでも“tail -f”や“grep”する方法
<https://qiita.com/yokra9/items/d95abda8a795d4e19e0e> - 公式リファレンス「Get-Content」コマンド
<https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/get-content>
まとめ
- ファイルやフォルダーの参照で対応する方法
- 前方よりカウントした指定行数分を表示する方法
Get-ChildItem | Select-Object -First "表示する行数を指定"
- 後方よりカウントした指定行数分を表示する方法
Get-ChildItem | Select-Object -Last "表示する行数を指定"
- 前方よりカウントした指定行数分を表示する方法
- テキスト形式のファイルで対応する方法
- 前方よりカウントした指定行数分を表示する方法
Get-Content "カレントの対象ファイル名(もしくはファイルのフルパス)" -TotalCount "表示する行数を指定"
- 後方よりカウントした指定行数分を表示する方法
- パターン1:1回きりの確認方法
Get-Content "カレントの対象ファイル名(もしくはファイルのフルパス)" -Tail "表示する行数を指定"
- パターン2:リアルタイム表示
Get-Content "カレントの対象ファイル名(もしくはファイルのフルパス)" -Tail "表示する行数を指定" -Wait
- パターン3:リアルタイム&Grep検索の表示
Get-Content "カレントの対象ファイル名(もしくはファイルのフルパス)" -Tail "表示する行数を指定" -Wait | Select-String -Pattern "検索文字列(正規表現も可能)"
- パターン1:1回きりの確認方法
- 前方よりカウントした指定行数分を表示する方法
関連記事
Discussion