1. Get-ChildItemコマンドレットのカスタマイズ版

標準の Get-ChildItem コマンドレットの名前を維持し、新たに FilterExtension 引数を追加して特定の拡張子に対するフィルタリングを行う機能を追加します。このカスタマイズ版では、基本的な機能をそのまま保持しつつ、新たな機能を組み込みます。

https://github.com/PowerShell/PowerShell/blob/master/src/Microsoft.PowerShell.Commands.Management/commands/management/GetChildrenCommand.cs

2. プロジェクトフォルダの構成

# プロジェクトフォルダの構成
📂CustomizedGetChildItemApp
┣ 📂Classes
┃ ┣ 📜CustomizedGetChildItemCmdlet.psm1 # Get-ChildItemのカスタマイズ版モジュール
┣ 📂Tests
┃ ┣ 📜CustomizedGetChildItemTests.ps1 # カスタマイズ版のテストスクリプト
┗ 📜App.ps1 # アプリケーションのメインスクリプト

3. CustomizedGetChildItemCmdlet.psm1 のアウトライン

# CustomizedGetChildItemCmdlet.psm1
using namespace System.Management.Automation
using namespace System.IO

# Cmdletのカスタマイズ定義
[Cmdlet(VerbsCommon.Get, "ChildItem", DefaultParameterSetName = "Items")]
Class CustomizedGetChildItem : Microsoft.PowerShell.Commands.GetChildItemCommand
{
    [Parameter(Mandatory = $false, ParameterSetName = "Items")]
    [ValidateNotNullOrEmpty()]
    [string] $FilterExtension

    # Cmdletの処理をオーバーライド
    protected override void ProcessRecord()
    {
        # 基本機能の呼び出し
        base.ProcessRecord();

        # オリジナル引数に基づく追加処理
        if ($this.FilterExtension) {
            $filteredItems = @($this.InputObject) | Where-Object { $_.Extension -eq ".$this.FilterExtension" }
            foreach ($item in $filteredItems) {
                Write-Output $item
            }
        }
    }
}

Export-ModuleMember -Cmdlet CustomizedGetChildItem

このクラスはPowerShellの標準コマンド Get-ChildItem をカスタマイズしたものです。以下、各部分の説明を行います:

名前空間の使用

クラス定義

パラメータの定義

メソッドのオーバーライド