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