Answers:
这是一种实现方法,借助桌面上的其他图标。我想如果您只想在桌面上只有一个图标,可以将脚本移动到其他人。
现在,您可以通过双击桌面上的新快捷方式来运行提升的脚本。
script.ps1
的快捷方式一样powershell.exe -f script.ps1
,但可以将后者设置为以管理员身份运行(请参阅或powershell.exe /?
的说明)-f
-File
在启用了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开关运行脚本时,它将在运行之前尝试提升特权。
param(...)
顶部,然后将其转发到前面-elevated
,您需要对如何构建表单ArgumentList
很聪明,可能会想要使用该String[]
表单。
如果您使用的是同一Powershell,则可以执行以下操作:
Start-Process powershell -verb runas -ArgumentList "-file fullpathofthescript"
C:\Windows\System32
。另一种保留当前目录的替代方法:stackoverflow.com/a/57033941/2441655
如果您希望直接从资源管理器上下文菜单中以管理员身份启动Powershell脚本,请在此处查看我的答案的第2部分: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
}
powershell -f