PowerShellで特定のファイル形式に関連付けられたアプリケーションを確認・管理する方法

file association管理では、表示名ではなくextension・ProgId・user scope・organization defaultを最初の対象キーにします。変更や集計へ進む前にUserChoiceとexport済みDefaultAppAssociations XMLを保存し、別対象を同じ結果へ混ぜないことが出発点です。

この手順の合格条件は「個人設定または承認XMLの一方でassociationが反映された状態」です。Microsoft Learn:Default App Associations XMLのdeployment範囲とSettings URIのuser choiceが定義するDefault App Associations XMLのdeployment範囲とSettings URIのuser choiceを根拠にし、画面へ値が出たことだけを成功とは判定しません。

停止条件:既存default XMLや配布policyを保存していない。該当するときは操作を進めず、保存XMLまたはSettings画面で旧applicationへ戻すを実行可能な形で確認してから再計画します。

目次

file association管理|結論を検証可能な形にする:個人設定または承認XMLの一方でassociationが反映された状態

ファイル関連付けの確認と管理の成果物は変更済み設定ではなく、再現可能な確認結果です。Get-ItemPropertyの実行条件、時刻、件数とGet-ItemPropertyの照合結果を残します。

Get-ItemPropertyの出力では、LiteralPath、ファイル種別、長さ、更新時刻、SHA-256が同じ対象を指しているかを見ます。値が変わっていても別対象なら失敗であり、個人設定は設定アプリで元へ戻す。組織XMLは変更前ファイルを保存し、新規プロファイルで差分を検証してから配布を戻す。

判断要素ファイル関連付けの確認と管理で記録する内容
対象の識別LiteralPath、ファイル種別、長さ、更新時刻、SHA-256
最初の確認Get-ItemProperty
変更または操作Start-Process
再確認Get-ItemProperty
中止条件対象のフルパスを一意にできず、既存データを上書きする可能性がある

file association管理|変更前snapshotを残す:UserChoiceとexport済みDefaultAppAssociations XML

ファイル関連付けの確認と管理の基準値を得るコマンドが次の例です。端末名、パス、ポート、ユーザーは説明用なので、実環境の固有IDを確認してから置き換えます。

Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice' -ErrorAction SilentlyContinue
dism.exe /Online /Export-DefaultAppAssociations:"$env:TEMP\DefaultApps.xml"

Get-ItemPropertyが返す表示名は人向けで、復旧対象の識別には不足することがあります。LiteralPath、ファイル種別、長さ、更新時刻、SHA-256をCSVやJSONへ残します。

Windowsの既定アプリは現在ユーザーのUserChoiceと保護されたHashを含むため、PowerShellで直接書き換える対象ではありません。拡張子、ProgId、設定元を読み取り、変更は設定画面または管理用DefaultAppAssociations XMLの正規手順へ分けます。OS更新でHash方式が変わる可能性もあるため、未公開生成手順へ依存しません。

PowerShellは拡張子ごとの現状を棚卸しし、UserChoiceの有無とProgIdを記録する用途に向きます。実行ファイル名やファイルのSHA-256だけで関連付けを決めず、ユーザー単位の選択と端末既定の候補を別欄に保存します。

基本確認では対象拡張子を完全一致で指定し、HKCUのUserChoiceを読み取ってから設定画面の表示と照合します。キーがない場合は上位の既定へフォールバックしている可能性を残し、空結果を「関連付けなし」と断定しません。

Get-ItemPropertyの結果ではPSPath、ProgId、Hashを区別し、Hashを生成・削除するコードへ転用しません。変更前後の比較は同じユーザーSIDで行い、別ユーザーのHKCUを現在値として扱わないようにします。

ファイル関連付けでは拡張子、ProgId、実行ファイル、現在ユーザーのUserChoiceを取得時刻付きで保存します。UserChoiceのHashを独自生成して書き換えず、新しいアプリの登録後は既定のアプリ画面または承認済みポリシーで関連付けます。

関連付け解除が必要でもUserChoiceキーを強制削除せず、設定画面で別の既定アプリを選ぶか承認済みXMLを配布します。事前に既定関連付けをエクスポートし、代表ファイルが期待するアプリで開くことを利用者確認まで含めて検証します。

Get-ItemPropertyはファイル関連付けの確認と管理の1番目の確認手段です。Get-Help Get-ItemProperty -Fullで利用できるパラメーターを調べ、出力型と対象件数を記録します(ファイル関連付けの確認と管理では現在のユーザーの範囲でGet-ItemPropertyが返す固有値を基準にします)。

ファイル関連付けの確認と管理の検証ではExport-DefaultAppAssociationsが返すオブジェクトを文字列だけに変換せず、固有IDと状態列を残します。後段の比較に使えるためです。

Start-Processはファイル関連付けの確認と管理の3番目の確認手段です。Get-Help Start-Process -Fullで利用できるパラメーターを調べ、出力型と対象件数を記録します(ファイル関連付けの確認と管理の判断では「UserChoiceハッシュを直接書き換える方法は採用しない」を優先し、Get-ItemPropertyが空なら成功扱いしません)。

file association管理|対象を一件へ固定する:extension・ProgId・user scope・organization default

ファイル関連付けの確認と管理で使うPowerShellの版は $PSVersionTable で、コマンドの提供元は Get-Command Get-ItemProperty で確認します。現在のユーザー。組織配布は管理者。対象候補が複数ならLiteralPath、ファイル種別、長さ、更新時刻、SHA-256を使い、表示名の部分一致だけで選びません(ファイル関連付けの確認と管理の判断では「UserChoiceハッシュを直接書き換える方法は採用しない」を優先し、Get-ItemPropertyが空なら成功扱いしません)。

  • ファイル関連付けの確認と管理: 実行端末と現在ユーザーを記録する
  • Get-ItemProperty: Source、Version、利用可能なパラメーターを確認する
  • LiteralPath、ファイル種別、長さ、更新時刻、SHA-256: 変更前の値を日時付きで保存する
  • 元ファイルの別名コピー、ハッシュ、ACL、宛先の既存有無: 復旧に使えることを読み取り確認する
  • 対象のフルパスを一意にできず、既存データを上書きする可能性がある: 該当すれば本番実行を見送る

file association管理|入力値を固定して試す:extension・ProgId・user scope・organization default

ファイル関連付けの確認と管理の追加確認例です。システムを変更する命令ではなく、Get-ItemPropertyの結果を別の列や範囲で確かめる目的で使います(ファイル関連付けの確認と管理では現在のユーザーの範囲でGet-ItemPropertyが返す固有値を基準にします)。

# 個人の既定アプリは設定アプリで選ぶ。
Start-Process 'ms-settings:defaultapps'
# 組織の初期既定値は承認済みXMLを検証端末へ配布する。

ファイル関連付けの確認と管理の操作後は次の変更へ進まず、Get-ItemPropertyで同じLiteralPath、ファイル種別、長さ、更新時刻、SHA-256を再取得します。

file association管理|原状回復の参照値を保存する:保存XMLまたはSettings画面で旧applicationへ戻す

ファイル関連付けの確認と管理は読み取り中心ですが、出力には端末名、SID、IP、メールアドレスなどが含まれる場合があります。保存先のACLと保管期限を決め、共有時は必要列だけに限定します。

file association管理|利用側の結果まで確かめる:個人設定または承認XMLの一方でassociationが反映された状態

Get-ItemPropertyでは、変更前に保存したLiteralPath、ファイル種別、長さ、更新時刻、SHA-256と同じ対象を選びます。対象パスの存在、件数、ハッシュ、コピー先を実行前後で比較することで、別スコープの値を成功結果として採用しません(ファイル関連付けの確認と管理の判断では「UserChoiceハッシュを直接書き換える方法は採用しない」を優先し、Get-ItemPropertyが空なら成功扱いしません)。

Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice' -ErrorAction SilentlyContinue
  • Get-ItemProperty: 同じ対象IDを再取得できた
  • ファイル関連付けの確認と管理: 意図した値または件数だけが変化した
  • 対象パスの存在、件数、ハッシュ、コピー先を実行前後で比較する: 関連機能も異常がない
  • パスの誤記、アクセス拒否、ジャンクション、オンライン専用ファイル: 取得失敗をゼロ件として扱っていない(ファイル関連付けの確認と管理では現在のユーザーの範囲でGet-ItemPropertyが返す固有値を基準にします)。
  • UserChoiceハッシュを直接書き換える方法は採用しない。既存ユーザーと新規ユーザーでポリシーの挙動が異なる。: 環境固有の制約に反していない

file association管理|続行しない境界を明示する:既存default XMLや配布policyを保存していない

Get-ItemPropertyの結果が空なら、パスの誤記、アクセス拒否、ジャンクション、オンライン専用ファイルを一つずつ確認します。ErrorActionで隠した例外をゼロ件として集計しません。

Get-ItemPropertyで別の対象が返った場合、表示名の一致ではなくLiteralPath、ファイル種別、長さ、更新時刻、SHA-256で取り直します。誤対象への変更があれば追加操作を止めます。

ファイル関連付けの確認と管理で予想外の警告が一件でも出たら、対象数と時刻を記録して停止します。別の設定変更で警告を相殺しようとしません。

断定できません。ファイル関連付けの確認と管理ではパスの誤記、アクセス拒否、ジャンクション、オンライン専用ファイルでも空になります。エラーを表示し、権限とスコープを確認してからGet-ItemPropertyまたは別の公式な取得方法で照合します(ファイル関連付けの確認と管理では現在のユーザーの範囲でGet-ItemPropertyが返す固有値を基準にします)。

file association管理|rollback後も同じ検証を行う:保存XMLまたはSettings画面で旧applicationへ戻す

個人設定は設定アプリで元へ戻す。組織XMLは変更前ファイルを保存し、新規プロファイルで差分を検証してから配布を戻す。

ファイル関連付けの確認と管理を戻した後はGet-ItemPropertyとGet-ItemPropertyを再実行し、LiteralPath、ファイル種別、長さ、更新時刻、SHA-256が変更前記録と一致することを確認します。復旧処理にも失敗したら連続操作を止め、保存した元ファイルの別名コピー、ハッシュ、ACL、宛先の既存有無とログを担当者へ渡します(ファイル関連付けの確認と管理の判断では「UserChoiceハッシュを直接書き換える方法は採用しない」を優先し、Get-ItemPropertyが空なら成功扱いしません)。

  • Get-ItemPropertyの実行時刻、対象件数、エラー件数を残した
  • LiteralPath、ファイル種別、長さ、更新時刻、SHA-256で対象を一意に特定した
  • 元ファイルの別名コピー、ハッシュ、ACL、宛先の既存有無を変更前に保存して読めることを確認した
  • Start-Processの対象を一端末・一ユーザー・一設定に限定した
  • Get-ItemPropertyと実利用テストの両方を確認した
  • 対象のフルパスを一意にできず、既存データを上書きする可能性がある場合は実行を中止した

file association管理|似た機能との違いを確認する:per-user choiceとnew-user defaultの違い

権限だけが原因とは限りません。UserChoiceハッシュを直接書き換える方法は採用しない。既存ユーザーと新規ユーザーでポリシーの挙動が異なる。 対象のフルパスを一意にできず、既存データを上書きする可能性があるなら昇格して続行せず、対応Edition、対象ID、ポリシー、復旧経路を確認します(ファイル関連付けの確認と管理の判断では「UserChoiceハッシュを直接書き換える方法は採用しない」を優先し、Get-ItemPropertyが空なら成功扱いしません)。

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次