none
エクスプローラからの ps1 ファイルの実行 RRS feed

  • 質問

  • Windows7 + PowerShell 2.0 を使っています。

    お伺いしたいことは、エクスプローラから ps1 ファイルを実行する方法です。

     

    C:\Work\ に、

    Setup.ps1

    MyFunction1.ps1

    MyFunction2.ps1

     

    があり、Setup.ps1 ファイルの中で、

    Invoke-Expression ./MyFunction1.ps1

    Invoke-Expression ./MyFunction2.ps1

    をしています。

     

    私の環境では、エクスプローラから、Setup.ps1 をダブルクリックすると

    メモ帳が起動してしまいます。これは、アプリケーションの関連付けに関係する話

    ですが、ps1 拡張子に対して powershell を関連付けても、「管理者として実行する」

    ことができないため、別の方法を検討する必要があるのでは…と考えています。

     

    試しに、同フォルダに 以下のような Setup.bat を作成して、エクスプローラから実行してみましたが

    ps1 ファイル読み込みのエラーハンドリングのためか、一瞬で動作が完了してしまいます。

     

    PowerShell -version 2.0 -ExecutionPolicy RemoteSigned -NoLogo -NoExit

      -File .\Setup.ps1

     

    ただし、コマンドプロンプトを使い、C:\Work\  から Setup.bat を実行すると、正常に起動する

    ことができます。

     

    このことから、PowerShell のロケーションが関係した問題ではないかと考えているのですが、

    そのことも含めて、教えていただければと思っています。よろしくお願いします。

    2010年8月21日 5:57

回答

すべての返信

  • セキュリティを高めるために、既定では関連付けされていません。

    設定方法などを含め、以下をご覧ください。

    「PowerShell Scripting - インストールから実行まで」
    http://www.roy.hi-ho.ne.jp/mutaguchi/powershell/how_to_install.html
    (PowerShell関連の活動でMVPを受賞されている牟田口さんが記述されたまとめ記事です。)

    2010年8月21日 6:42
  • すいません、追伸です。

    上記記事は、どちらかというと開発者向けに書かれているため、Set-ExecutionPolicyの設定がUnrestrictedとなっていますが、一般的な端末にはSet-ExecutionPolicyにはRemoteSignedを指定するのがよいといわれています。
    #ご存じとは思いますが、後から見る人のために念のため記述させていただきました。

    2010年8月21日 6:55
  •  

    Chuki さん、いつもコメントありがとうございます。

    おかげさまで、ひとまず、問題は解決しました。動作しない原因は、全く別のところにありました。

    私は普段から、Administrator でのログインは避け、Administrators グループに属して

    いるユーザでログインしています。…なので、PowerShell を使うときは、必ず権限の昇格を行っています。

     

    コマンドプロンプトから (Setup.bat を使って) PowetShell コマンドを起動し、Setup.ps1 を実行した

    場合は、コマンドプロンプトが権限の昇格によって管理者権限で実行されているため Setup.ps1 の

    起動に成功していました。

     

    ところが、エクスプローラから Setup.bat 、もしくは Setup.ps1 を実行した際は、権限の昇格が行われず

    実行に失敗していた…ということのようでした。

    実際、Administrator でログインして実行すると、エクスプローラから起動することができました。

     

    Setup.bat のプロパティを見ると、「管理者として実行」がグレーアウトしているので…これがチェックできれば

    万事解決なんでしょうけどねぇ…謎です。ユーザアカウント制御の設定を「やや厳しく」していることが原因

    なんでしょうか…まぁ、コマンドプロンプトで権限の昇格をすれば実行できることがわかっているため、

    これで我慢しようかと思っています。


    お騒がせして申し訳ありませんでした。


    2010年8月21日 12:13
  • 私は、以下の3通りの方法を使用しています。

    • makeshell 等で、管理者権限へ昇格する PowerShell を作成
    • elevate.exe を配布に含めて、elevate.exe 経由で実行
    • 起動用スクリプトから実スクリプトを runas verb を使用して起動

    最初の方法は、ps1 形式のスクリプトを exe 形式の実行ファイルにするもので、マニュフェストにて管理権限の有無を設定できるため、実行ファイルを起動するときに昇格ダイアログが表示されます。(Windows7 の新しい昇格にも対応できます)

    2番目の方法は、elevate.exe を配布できる環境であれば手軽な選択肢です。

    3番目の方法は、(自分で自分を起動する手もありますが) ps1 ファイルが複数になり、一般権限で起動した最初の ps1 から、invoke を使用して2番目の ps1 ファイルを -Verb "RunAs" として起動することで、昇格ダイアログを表示します。

     

    2010年8月23日 0:18