在与原始脚本相同的目录中以管理员身份运行 PowerShell 脚本

在与原始脚本相同的目录中以管理员身份运行 PowerShell 脚本

因此,显然没有简单的方法可以通过双击直接以管理员身份运行 .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 窗口自动更改回原始脚本的目录。

做到这一点的最好方法是什么?

答案1

您可以使用设置位置更改-Path $PSScriptRoot为包含这些命令的脚本所在的目录,然后您可以在该命令之后运行其余逻辑,以确保在运行任何命令之前将其设置回所需的目录。

Set-Location -Path $PSScriptRoot

更多资源

  • 设置位置
  • 自动变量

    • $PSScriptRoot

      包含正在执行脚本模块的目录。此变量允许脚本使用模块路径访问其他资源。在 PowerShell 3.0+ 中,此功能在任何地方都可用,而不仅仅是在模块中。

相关内容