因此,显然没有简单的方法可以通过双击来直接以管理员身份运行.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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句