双击 ps1 文件时以管理员身份启动 powershell

双击 ps1 文件时以管理员身份启动 powershell

我读过了如何以管理员模式打开文件进行编辑?

我有一个 .ps1 文件需要以管理员身份运行。我很高兴当我双击任何 .ps1 文件时,powershell 都会以管理员身份运行。

我已经将C:\Users\me\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell两个 PowerShell 快捷方式都设置为以管理员身份运行

如果我从开始菜单打开 Powershell,系统会询问我是否允许该应用程序进行更改...这表明它以管理员身份运行,并且当 Powershell 运行时,它会在“标题”栏中显示管理员

但是,当我双击 .ps1 文件时,它会以普通用户(非管理员)身份打开。

我还需要做什么?

答案1

双击它时不会执行脚本,但它会自行执行,如下所示升高当你运行它时。你可以尝试这个:

$principal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if($principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    # code here...
}
else {
    Start-Process -FilePath "powershell" -ArgumentList "$('-File ""')$(Get-Location)$('\')$($MyInvocation.MyCommand.Name)$('""')" -Verb runAs
}

这样,非升高控制台将退出。

答案2

将您的 powershell 快捷方式复制/粘贴到您想要启动脚本的位置。右键单击新快捷方式,单击属性,然后单击高级,并确保将其设置为以管理员身份运行。然后,在目标框中,在 powershell.exe 后输入脚本的路径和名称

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe c:\myscripts\my-awesome-script.ps1

如果路径或文件名中有空格,请确保使用“引号”括住您添加的内容,例如:

"c:\my scripts\some script with spaces.ps1"

这将以管理员身份启动新的 powershell 并在新 shell 中自动启动脚本。

您可能还想重命名快捷方式以表明它是用于特定脚本,而不是常规 powershell 会话。右键单击,重命名。

答案3

由于微软给那些希望他们的 PowerShell 脚本像批处理文件一样运行(双击即可运行)的人带来了困难,我最终不得不求助于商业软件包。

我的脚本:

  • 需要以管理员身份运行
  • …双击后,UAC 提示正常
  • 无论目前执行的政策如何

上面给出的答案确实可以让脚本以管理员身份运行,但这样做所需的代码既丑陋,又没有解决执行策略问题(脚本会立即失败)。它也无法使脚本可双击。

另一个答案给出了将使脚本可双击并以管理员身份运行,但除了在系统上或多或少“安装”以供常规使用的脚本之外,它不适用于任何其他情况,并且需要大量手动步骤。它也没有解决执行策略问题,尽管它可以,因为正在调用 PowerShell,我们可以将其-executionpolicy bypass作为选项传递

还有其他(免费)工具可以将 PowerShell 脚本“打包”成 EXE 文件,例如执行程序这巧妙地解决了双击问题,但我发现这与此处答案中给出的“以管理员身份运行”代码不能很好地兼容,也不能解决执行策略。

我最终选择了PowerShell 工作室由于它提供了与 PS2EXE 相同的“打包”功能,您可以设置一个标志来强制 EXE 以管理员身份运行(因此无需在脚本中乱放升级代码),它会使用绕过标志执行脚本,这样您就不会在轨道上停下来,也不必关心本地策略设置为什么,也许最有帮助的是,它有工具来“签署”生成的包,这样您的用户就不会收到可怕的警告。

到目前为止,这是我发现的可靠分发需要管理员权限的 PowerShell 脚本的唯一方法。

答案4

解释

Windows 不允许 PowerShell 脚本本地运行,您需要更新您的用户或选定用户的执行策略才能使用它们。

回答

  1. 打开 PowerShell(如果需要,以管理员模式打开)
  2. 更改执行策略Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
  3. 键入Get-Execution -List以查看所有执行策略

            Scope    ExecutionPolicy
            -----    ---------------
    MachinePolicy    Unrestricted
    UserPolicy          Undefined
    Process             Undefined
    CurrentUser      RemoteSigned
    LocalMachine     Unrestricted
    

如果这仍然不起作用,你可以使用 Windows PowerShell ISE,即 PowerShell IDE

  1. 右键单击 *.ps1文件
  2. 打开方式 → Windows PowerShell ISE

或者直接先打开 ISE。

安全

Microsoft 默认不允许您运行 PowerShell 脚本出于严重的安全原因,有人可以很容易地在你的电脑上运行脚本,并完全访问!为了避免这种情况,请将执行策略恢复到原来的状态。

Microsoft 文档

相关内容