web-dev-qa-db-ja.com

ファイルの種類をPowerShellスクリプトに関連付けるにはどうすればよいですか?

私は完全に機能し、実行する非常にpowershellスクリプトを持っています:

Param(
  [string]$fileName
) 

echo "Woo I opened $fileName"

コマンドラインで実行すると、機能します。

my-script.ps1 .\somefile

戻り値:

Woo I opened somefile

関連付けたいmy-script.ps1特定のファイルタイプ。 「アプリケーションから開く」でこれを実行しようとしていますが、

  • Windowsには、Powershellスクリプトが「プログラム」として含まれていません(CMDおよびバッチスクリプトは「プログラム」と見なされています)。

enter image description here

  • 代わりに「すべてのファイル」を選択し、PowerShellスクリプトを選択すると、Windowsにこのメッセージが表示されます

enter image description here

ファイルの種類をPowershellスクリプトに関連付けるにはどうすればよいですか?

6
mikemaccana

ジョブに適切なツールを使用します。

cmd /c assoc .fob=foobarfile
cmd /c ftype foobarfile=powershell.exe -File `"C:\path\to\your.ps1`" `"%1`"

assocftype はどちらもCMDビルドなので、PowerShellからcmd /cを介して実行する必要があることに注意してください。

拡張子のないファイルの場合、この関連付けを使用します。

cmd /c assoc .=foobarfile
8
Ansgar Wiechers

一般的なファイルタイプの関連付けを探してここに来た私のような人のために、私はこの関数を使用することになりました。

Function Create-Association($ext, $exe) {
    $name = cmd /c "assoc $ext 2>NUL"
    if ($name) { # Association already exists: override it
        $name = $name.Split('=')[1]
    } else { # Name doesn't exist: create it
        $name = "$($ext.Replace('.',''))file" # ".log.1" becomes "log1file"
        cmd /c 'assoc $ext=$name'
    }
    cmd /c "ftype $name=`"$exe`" `"%1`""
}

私は @ Ansgar Wiechersの答え からの適切な引用に苦労しましたが、最終的にそれを正しく理解しました:)

2
Matthieu

これが@Matthieuの@Ansgar Weicharの素晴らしいリミックスの私のリミックスです。

Matthieu'sは実行可能ファイル用に設定されており、OPで説明されているのと同じ理由で、PowerShellスクリプトでは機能しません。

Function Set-FileAssociationToPowerShellScript($extension, $pathToScript) {

    # first create a filetype
    $filetype = cmd /c "assoc $extension 2>NUL"
    if ($filetype) {
        # Association already exists: override it
        $filetype = $filetype.Split('=')[1]
        Write-Output "Using filetype $filetype"
    }
    else {
        # Name doesn't exist: create it
        # ".log.1" becomes "log1file"
        $filetype = "$($extension.Replace('.', ''))file"
        Write-Output "Creating filetype $filetype ($extension)"
        cmd /c "assoc $extension=$filetype"
    }
    Write-Output "Associating filetype $filetype ($extension) with $pathToScript.."
    cmd /c "ftype $filetype=powershell.exe -File `"$pathToScript`" `"%1`""
}
1
orion elenzil

私はあなたがWindows UIからそれを行うことができないと思います。

ここでの目標は、タイプをpowershell.exeに関連付けることです。

  1. PowerShellスクリプト
  2. ターゲットファイル名

これをする

  1. Regedit.exeを起動します。 //免責事項:Windowsレジストリを編集しています。 こちらは虎です
  2. HKEY_CLASSES_ROOT(すべてのユーザーの管理者アクセス)またはHKEY_CURRENT_USER\SOFTWARE\Classesに移動します
  3. .<extension>という名前のキーを作成します。 * .zbsを関連付ける場合-キーを作成します.zbs
  4. (デフォルトの)値をzbsfileのような値に設定します-これは、拡張子をファイルタイプにリンクする参照です。
  5. zbsfileというキーを作成します-これはあなたのファイルタイプです
  6. (デフォルト)値を読み取り可能なものに設定します。このファイルはZBSです。
  7. 下にキーのツリーを作成します(例はあちこちにあります):

zbsfile Shell open command

  1. commandの下で、(デフォルトの)値を次のように設定します。
    powershell.exe -File "C:\path\to your\file.ps1" "%1"
    ここで%1はユーザーがクリックしたファイルを意味します

うまくいくはずです。

編集:または(クレイジーなアイデア)、powershell.exe -File "C:\path\to your\file.ps1" "%%1"だけを実行してbatファイルを作成し、Windows UIで選択します...

1
Mike Makarov