web-dev-qa-db-ja.com

レジストリからPowerShellスクリプトを起動する

ログオンするたびにPCで実行したいPowerShellスクリプトがあります。現在のユーザーの「実行」キーにREG_SZとして追加しましたが、実行されません。

実行ポリシーを「無制限」に変更しましたが、それでもうまくいきません。

レジストリ値の内容は次のとおりです。

powershell.exe c:\path\myscript.ps1

これは、コマンドプロンプトから機能します。レジストリから実行されない理由はありますか?

ありがとう。

4
Kieran Walsh

私は通常、PowerShellスクリプトを次のように実行します。

powershell.exe -file c:\path\myscript.ps1

詳細については、コマンドラインからこれを実行します。

powershell.exe -help
3
William Jackson

今日は、コンピューターを再起動した後も続くPowerShellスクリプトについて読みました。これを行うために、スクリプターは自動的に実行キーに書き込みます。 this blogpostを見ると、彼がスクリプト名とそのパラメータをレジストリキーに書き込んでいることがわかります。

私はまだそれをテストすることができませんでしたが、それが彼のために働いた場合、それはあなたがスクリプト名の前に「powershell.exe」を追加しないことを意味します。

1
wullxz

わかりました、私はこれを解決しました。 Microsoftが私に言ったように、実行ポリシーを「バイパス」ではなく、remotesignedに設定する必要があります。これを行うには、PowerShellで次のコマンドを実行します。

set-executionpolicy remotesigned

次に、これは私のレジストリ実行キーのREG_SZです

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -file c:\path\myscript.ps1

これで、通常のすべてのプログラムをそれらの間にギャップを置いて開始するPowerShellスクリプトができました。これにより、すべてのアプリケーションを同時に開こうとする速度が遅くなることなく、すぐにマシンで作業を開始できます。

他の人が役に立つと思うかもしれないので、これは私の* .PS1ファイルのちょっとした抜粋です:

# Chrome Browser
Start-Sleep -s 20
& "C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe"

# Outlook
Start-Sleep -s 10
& "c:\Program Files (x86)\Microsoft Office\Office14\Outlook.EXE"

# Messenger
Start-Sleep -s 10
& "c:\Program Files (x86)\Windows Live\Messenger\msnmsgr.exe" /background

# Snagit
Start-Sleep -s 30
& "C:\Program Files (x86)\TechSmith\Snagit 10\Snagit32.exe" /i /h

# Evernote
Start-Sleep -s 60
& "C:\Program Files (x86)\Evernote\Evernote\EvernoteTray.exe"
1
Kieran Walsh

私が正しく覚えているなら、PowerShellスクリプトを直接実行することはできません(ダブルクリックする場合のように)、コマンドラインから実行する必要があります。たぶん、Windowsはレジストリからの実行を直接実行していると見なします。あなたが試すことができるのは(そして私はここにいるのですが)、バッチファイルからスクリプトを呼び出してから、レジストリからバッチファイルを呼び出すことです。

0
CGA