如何以管理员身份运行Powershell脚本


55

在Windows 7桌面上,我具有script.ps1,该脚本需要管理员权限(启动服务)。我想单击此脚本并以管理员权限运行它。

最简单的方法是什么?

Answers:


47

这是一种实现方法,借助桌面上的其他图标。我想如果您只想在桌面上只有一个图标,可以将脚本移动到其他人。

  1. 在桌面上创建Powershell脚本的快捷方式
  2. 用鼠标右键单击快捷方式,然后单击属性
  3. 单击快捷方式选项卡
  4. 点击高级
  5. 选择以管理员身份运行

现在,您可以通过双击桌面上的新快捷方式来运行提升的脚本。


35
这对我powershell -f
有用

2
@mousio-我也需要这个,谢谢您的评论
m.edmondson

@mousio您能告诉我该命令为什么起作用吗?
SShaheen 2014年

7
@SShaheen-为了以管理员身份运行,该快捷方式需要指向某种可执行文件(例如powershell.exe),而不仅仅是指向该快捷方式最初指向的文档或脚本。工作的快捷方式和script.ps1的快捷方式一样powershell.exe -f script.ps1,但可以将后者设置为以管理员身份运行(请参阅或powershell.exe /?的说明)-f-File
mousio 2014年

16

在启用了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开关运行脚本时,它将在运行之前尝试提升特权。


如果脚本需要arguments-parameters?
Kiquenet

如果这告诉我它以完全特权运行,但我的代码仍然显示管理特权不足怎么办?
mike.b93

@Kiquenet将其添加到param(...)顶部,然后将其转发到前面-elevated,您需要对如何构建表单ArgumentList很聪明,可能会想要使用该String[]表单。
TWiStErRob

非常漂亮-比创建快捷方式更好
Mikey

13

如果您使用的是同一Powershell,则可以执行以下操作:

Start-Process powershell -verb runas -ArgumentList "-file fullpathofthescript"

这样做的问题是它将被调用脚本的工作目录更改为C:\Windows\System32。另一种保留当前目录的替代方法:stackoverflow.com/a/57033941/2441655
Venryx

4

由于它位于您的桌面上,因此我要说的最轻松的方法是将其拖动到海拔小工具上

否则,您可以使用ps1脚本上elevate命令创建单独的脚本。

或者,您可以elevate仅将其应用于服务启动位。


1

PowerShell ISE位于%windir%\ system32 \ WindowsPowerShell \ v1.0 \ PowerShell_ISE.exe中。您可以右键单击它,然后选择“以管理员身份运行”,然后从那里运行脚本。

您也可以在Windows徽标>所有程序>附件> Windows PowerShell下找到它,并使用这些快捷方式执行相同的操作。



-1

将此添加到脚本的开头:

$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
}

这似乎是四年前MDMoore313回答的一个子集。
斯科特(Scott)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.