私は自分のドットファイルに取り組んでいて、新しいコンピューターに切り替えるときに 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スクリプトを使用して実行ポリシーを変更する方法に関するヒントはありますか?
問題は、新しい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スクリプトの呼び出しと、なぜそれを実行する必要があるのかについて、もう少し情報を提供します 私のブログ投稿はこちら 。
これを行う最も簡単な方法は、レジストリを編集することでした。だから今私のバッチファイルは単に以下を含みます:
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"