トップ回答者
エクスプローラからの ps1 ファイルの実行

質問
-
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 のロケーションが関係した問題ではないかと考えているのですが、
そのことも含めて、教えていただければと思っています。よろしくお願いします。
回答
すべての返信
-
Chuki さん、いつもコメントありがとうございます。
おかげさまで、ひとまず、問題は解決しました。動作しない原因は、全く別のところにありました。
私は普段から、Administrator でのログインは避け、Administrators グループに属して
いるユーザでログインしています。…なので、PowerShell を使うときは、必ず権限の昇格を行っています。
コマンドプロンプトから (Setup.bat を使って) PowetShell コマンドを起動し、Setup.ps1 を実行した
場合は、コマンドプロンプトが権限の昇格によって管理者権限で実行されているため Setup.ps1 の
起動に成功していました。
ところが、エクスプローラから Setup.bat 、もしくは Setup.ps1 を実行した際は、権限の昇格が行われず
実行に失敗していた…ということのようでした。
実際、Administrator でログインして実行すると、エクスプローラから起動することができました。
Setup.bat のプロパティを見ると、「管理者として実行」がグレーアウトしているので…これがチェックできれば
万事解決なんでしょうけどねぇ…謎です。ユーザアカウント制御の設定を「やや厳しく」していることが原因
なんでしょうか…まぁ、コマンドプロンプトで権限の昇格をすれば実行できることがわかっているため、
これで我慢しようかと思っています。
お騒がせして申し訳ありませんでした。
-
私は、以下の3通りの方法を使用しています。
- makeshell 等で、管理者権限へ昇格する PowerShell を作成
- elevate.exe を配布に含めて、elevate.exe 経由で実行
- 起動用スクリプトから実スクリプトを runas verb を使用して起動
最初の方法は、ps1 形式のスクリプトを exe 形式の実行ファイルにするもので、マニュフェストにて管理権限の有無を設定できるため、実行ファイルを起動するときに昇格ダイアログが表示されます。(Windows7 の新しい昇格にも対応できます)
2番目の方法は、elevate.exe を配布できる環境であれば手軽な選択肢です。
3番目の方法は、(自分で自分を起動する手もありますが) ps1 ファイルが複数になり、一般権限で起動した最初の ps1 から、invoke を使用して2番目の ps1 ファイルを -Verb "RunAs" として起動することで、昇格ダイアログを表示します。