web-dev-qa-db-ja.com

終了せずに管理者としてスクリプトを実行するためのPowerShellスクリプトコンテキストメニューエントリ

私はこれに本当に近いです。基本的に、実行後にコンソールウィンドウを終了せずに、管理者としてスクリプトを実行する.ps1ファイルのコンテキストメニューエントリを作成したいと思います。だから私は鍵を作成することができます:

Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.ps1\Shell\RunasAdministratorNoExit

値を使用して:

enter image description here

エントリをcreateするのは、すべて問題なく、ダンディです。ただし、実際にdoにするためには、別のキーであるコマンドキーを追加する必要があります。

Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.ps1\Shell\RunasAdministratorNoExit\command

そして、このキーには、ほぼが機能するものがありますが、完全ではありません。したがって、上記のコマンドキーのデフォルト値は次のとおりです。

Powershell.exe -WindowStyle Hidden -Command "& {Start-Process PowerShell.exe -Verb RunAs -ArgumentList '-NoLogo -NoExit -File """%1"""'}"

しかし、この方法には1つの大きな問題があります。スクリプトが終了すると、スクリプト自体のディレクトリではなく、「C:\ Windows\system32」ディレクトリに戻ります。明確にするために以下の私の画像を参照してください:

enter image description here さらに、作成したコンテキストメニューエントリを使用して、次のような行を含むスクリプトを実行します。

$settingsfiles = Get-ChildItem -Recurse $scanPath

実行したスクリプトのローカルのすべてのフォルダーを再帰的に処理する代わりに、「C:\ Windows\system32!」にあるすべてのフォルダーを再帰的に処理しようとします。明らかにこれは望ましくありません。だからここに私の質問があります:

PowerShellスクリプトをスクリプトと同じディレクトリから実行されたかのように動作させるには、コマンドキーのデフォルト値を何に変更する必要がありますか?

2
jippyjoe4

... Set-LocationまたはPush-Locationコマンドレット、またはscritpblockを活用してみてください…

分割パス$ script:MyInvocation.MyCommand.Path

...最後のコマンドで。

または、新しいショートカットを作成し、希望どおりに構成して、右クリックの[送信]メニューを使用します。登録ハッキングは必要ありません。

PowerShellのSendToアプローチを示すこのスレッドを参照してください。

一時停止スクリプトで受け入れられるPowerShell制限キー

1
postanote