web-dev-qa-db-ja.com

バッチファイルとPowerShellスクリプトを使用したSet-ExecutionPolicy

私は自分のドットファイルに取り組んでいて、新しいコンピューターに切り替えるときに psget を使用してモジュールをインストールするなどの初期設定を行うバッチスクリプトを作成したい...また、先に進み、ExecutionPolicyを使用可能なものに変更します。

Bypass ExecutionPolicyの下でPowerShellスクリプトを起動するバッチファイルを作成しました。

powershell -ExecutionPolicy ByPass 
           -NoLogo -NoProfile -NoExit 
           -File .\set-policy.ps1

set-policy.ps1は、管理者としてPowerShellを実行して、ExecutionPolicyを変更しようとします。

Start-Process powershell -verb runas 
  -ArgumentList "-No Exit -Command { Set-ExecutionPolicy Restricted }"

残念ながら、それはそのトリックを実行していないようです(以下の出力)。何が問題かわからない。

Set-ExecutionPolicy Restricted
PS C:\windows\system32> Get-ExecutionPolicy
RemoteSigned

バッチファイル+ PowerShellスクリプトを使用して実行ポリシーを変更する方法に関するヒントはありますか?

8
Jeff B

問題は、新しいPowerShellプロセスを呼び出す方法です。 PowerShellプロンプトの準備が整う前にコマンドを実行しているように見えるため、コンソールに出力されるだけです。なぜだかわかりません。とにかく、ここに修正があります。

これは、set-policy.ps1ファイルがどのように見えるかです。

Start-Process PowerShell -ArgumentList "Set-ExecutionPolicy Restricted -Force" -Verb RunAs

または、次のように1行でバッチファイルからすべてを実行できます。

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy Restricted -Force' -Verb RunAs}"

バッチファイルからのPowerShellスクリプトの呼び出しと、なぜそれを実行する必要があるのか​​について、もう少し情報を提供します 私のブログ投稿はこちら

12
deadlydog

これを行う最も簡単な方法は、レジストリを編集することでした。だから今私のバッチファイルは単に以下を含みます:

regedit.exe /S EnableScripts.reg

これを実行すると、必要に応じてユーザーに許可/資格情報を自動的に要求します。ぼくの EnableScripts.regファイルには以下のみが含まれます。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell]
"Path"="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
"ExecutionPolicy"="RemoteSigned"

(私の64ビットマシンで)x86 PowerShellを実行する場合を除いて、上記のレジストリ設定で十分です。以下のレジストリキーを追加設定する必要があります。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell]
"Path"="C:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe"
"ExecutionPolicy"="RemoteSigned"
3
Jeff B