63
63
如何以管理员身份运行 powershell 脚本
在我的 Windows 7 桌面上,我有一个脚本.ps1,它需要管理员权限(它启动了一个服务)。我想点击这个脚本,然后用管理员权限运行它。
有什么最简单的方法可以做到这一点?
在我的 Windows 7 桌面上,我有一个脚本.ps1,它需要管理员权限(它启动了一个服务)。我想点击这个脚本,然后用管理员权限运行它。
有什么最简单的方法可以做到这一点?
在支持UAC的系统中,为了确保脚本在运行时有完整的管理权限,请在脚本的开头添加以下代码:
param([switch]$Elevated)
function Test-Admin {
$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
$currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}
if ((Test-Admin) -eq $false) {
if ($elevated)
{
# tried to elevate, did not work, aborting
}
else {
Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
}
exit
}
'running with full privileges'
当使用-elevated开关运行脚本时,它将在运行前尝试提升权限。
如果你想要一个选项,直接从资源管理器的上下文菜单中启动Powershell脚本作为管理员,请看我在这里的第二部分的回答。https://stackoverflow.com/a/57033941/2441655
在脚本的开头加上这句话:
$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
$testadmin = $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
if ($testadmin -eq $false) {
Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
exit $LASTEXITCODE
}