スキップしてメイン コンテンツへ

 none
Windows上のファイルタイプの関連付けをWSHまたはPowerShellから行いたいです。 RRS feed

  • 質問

  • 通常、Windows上のファイルタイプの関連付けを行う際には、コントロールパネルの "既定のプログラム" で、"既定のプログラムを設定する" からアプリごとに設定するか、"関連付けを設定する" で拡張子やプロトコルごとに設定する必要がありますが、いずれもGUIによる手動作業を必要とします。当然、アプリやファイルタイプが多数あると手間がかかってしまいます。

    そこで、この作業をスクリプトで自動化したいと思っていますが、関連付けを管理しているユーザーのレジストリの

    • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\Roaming\OpenWith

    には、セキュリティのために整合性をチェックするための「ハッシュ値」が書き込まれており、その計算方法は非公開であるため直接ここを編集することはできません。

    そのため、WSHやPowerShellのレジストリ書き込み機能だけで関連付け作業を自動化できず困っており、コントロールパネル等からのGUI操作と同等の方法を探しています。

    なお、コマンドプロンプトの "ASSOC" コマンドは、全ユーザーのレジストリの

    • HKEY_CLASSES_ROOT\.<拡張子>

    を書き込むためのものであり、この設定よりも上記ユーザーごとの設定が優先されてしまうため使えません。

    • 編集済み fzok4234 2017年8月29日 3:17 ASSOCコマンドに関する補足
    2017年8月29日 3:07

回答

  • 元々、こういう仕組みが導入されているのは、アプリケーション側のエゴで関連付けを変更されるのをやめさせ、ユーザーが選ぶ自由を確保するためのものだと考えられます。
    よって、お求めの方法が存在すると、アプリケーション提供側に利用できてしまい、ユーザーの自由が再び奪われるので、「方法はない」と考えた方が良いかと、私は思います。

    どうしても、組織内の都合で必要なのであれば、プレミアサポートに問い合わせてみてください。

    • 回答としてマーク fzok4234 2017年8月29日 22:45
    2017年8月29日 12:58
    モデレータ

すべての返信

  • 元々、こういう仕組みが導入されているのは、アプリケーション側のエゴで関連付けを変更されるのをやめさせ、ユーザーが選ぶ自由を確保するためのものだと考えられます。
    よって、お求めの方法が存在すると、アプリケーション提供側に利用できてしまい、ユーザーの自由が再び奪われるので、「方法はない」と考えた方が良いかと、私は思います。

    どうしても、組織内の都合で必要なのであれば、プレミアサポートに問い合わせてみてください。

    • 回答としてマーク fzok4234 2017年8月29日 22:45
    2017年8月29日 12:58
    モデレータ
  • 回答ありがとうございます。

    やはりスクリプトによる自動化は無理なのですね。実は今まで、拡張子の場合は

    • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.<拡張子>
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\Roaming\OpenWith\FileExts\.<拡張子>

    を、プロトコルの場合は

    • HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\<プロトコル>
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\Roaming\OpenWith\UrlAssociations\<プロトコル>

    を削除した上で、それぞれの動作定義を

    • HKEY_CLASSES_ROOT\<ProgID>\Shell\<Verb>\Command
    • HKEY_CLASSES_ROOT\.<拡張子>

    を編集するという作業をスクリプトで自動化していました。

    しかし、いわゆる "Windows XP方式" といわれるこの方法は現在のWindows 7、8.1、10では推奨されていないために、新しい方式での関連付けのスクリプトでの自動化の方法を模索していた次第であります。

    2017年8月30日 4:52