したがって、.ps1スクリプトをダブルクリックして管理者として直接実行する簡単な方法はないようです。レジストリを編集して実行できますが、管理者として実行するには、実行中のPowerShell内から新しい管理者PowerShellを開くように指示する必要があります。残念ながら、私が確認できる限り、これが行われるたびに、昇格されたプロンプトが元のスクリプトとは異なるディレクトリで開きます。たとえば、次のスクリプトがあるとします。
$principal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if($principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
.\mylocalscript.ps1
Write-Host "Just an example!"
}
else
{
Start-Process -FilePath "powershell" -ArgumentList "-NoExit $('-File ""')$(Get-Location)$('\')$($MyInvocation.MyCommand.Path)$('""')" -Verb runAs
}
管理者として開かれると、元のスクリプトに対してローカルだったローカルスクリプトはローカルではなくなり、見つからないため、失敗します。基本的に、新しい昇格したPowerShellウィンドウを開いて、元のスクリプトのディレクトリに自動的に戻るように指示する方法が必要です。
これを行うための最良の方法は何ですか?
set-location を-Path $PSScriptRoot
とともに使用して、それらのコマンドを含むスクリプトが存在するディレクトリに移動し、そのコマンドの後に残りのロジックを実行して、コマンドを実行する前に、必要なディレクトリに戻します。
Set-Location -Path $PSScriptRoot
$PSScriptRoot
スクリプトモジュールが実行されているディレクトリが含まれます。この変数により、スクリプトはモジュールパスを使用して他のリソースにアクセスできます。 PowerShell 3.0以降では、これはモジュールだけでなく、どこでも利用できます。