none
名前に'を含むディレクトリでShift+右クリックで表示されるメニューからPowerShellが正常に起動できない

    質問

  • 以下のエラーが表示されカレントディレクトリがC:\Windows\system32に設定される
    文字列に終端記号 ' がありません。
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString


    Windows10 Pro 1803 build 17134.191
    PSVersion 5.1.17134.165
    PSEdition Desktop
    PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
    BuildVersion 10.0.17134.165 CLRVersion
    2018年8月2日 4:16

回答

  • 原因はエクスプローラーのShift+右クリックメニューから呼び出されるのがHKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\0\Commandに登録されていて、それが以下のようになっています。

    "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"

    最後の'%1'の部分にファイルパスが展開されるのですが、アポストロフィーがパスに含まれていると文字囲みとして見なされてしまうためにおかしくなるのでしょう。

    暫定的の対処なら、'%1'を""%1""すると実行できるようになります。

    そこを変更したくないならメニューに専用の項目を追加してやるのも手かもしれません。

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\OpenApostrophes]
    
    [HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\OpenApostrophes\Command]
    @="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" \"-Command\" \"if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & \"\"%1\"\"\""


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2018年8月2日 9:26