potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

PowerShell7 登録された拡張子のProgIDとProgIDの概要を取得する

PowerShell 7で登録された拡張子のProgIDとProgIDの概要を取得するサンプルコードです。-Path-LiteralPathの挙動の違い、Get-ItemPropertyによる高速化(Get-ChildItem比)等を確認するためのコードです。

# 呼び出し側のスコープにHKCRを登録します。
function Register-HKCR
{
  [OutputType([void])]
  param()
  Remove-PSDrive -Name HKCR -ErrorAction SilentlyContinue
  [void](New-PSDrive -PSProvider Registry -Root HKEY_CLASSES_ROOT -Name HKCR -Scope 1)
}

#拡張子とProgIDの関連付け情報を返します。
function Get-ExtensionProgID()
{
  [OutputType([PSCustomObject[]])]
  param()
  Get-ItemProperty -Path HKCR:.* -Name '(default)' -ErrorAction SilentlyContinue
    | ForEach-Object {[PSCustomObject]@{Extension=$_.PSChildName; ProgID=$_.'(default)'}}
}

#ProgIDの概要を取得します。
function Get-ProgIDDescription()
{
  [OutputType([PSCustomObject[]])]
  param(
    [Parameter(Mandatory)][string[]]$ProgID
  )
  $ProgID | ForEach-Object {
    $defaultProp = Get-ItemProperty -LiteralPath "HKCR:$_" -Name '(default)' -ErrorAction SilentlyContinue
    [PSCustomObject]@{ProgID=$_; Description=$defaultProp.'(default)'}
  }
}

#拡張子のProgIDとProgIDの概要を取得します。
function Get-ExtensionProgIDDescription()
{
  [OutputType([PSCustomObject[]])]
  param()
  Get-ExtensionProgID
    | Select-Object *, @{n="Description"; e={(Get-ProgIDDescription $_.ProgID).Description}}
}

Register-HKCR
Get-ExtensionProgIDDescription | Select-Object -First 20