通过命令提示符调用具有提升权限的 PowerShell 脚本

问题描述 投票:0回答:1

问题:

我想在非管理员命令提示符下以提升的权限调用我的 PowerShell 脚本。 当我使用“以管理员身份运行”手动打开命令提示符并输入以下行时:

powershell -ExecutionPolicy Unrestricted -Command "Start-Process Powershell -Verb RunAs -Wait -ArgumentList '-NoProfile -ExecutionPolicy Unrestricted -File example.ps1 param1'"

我的脚本 PowerShell 脚本运行得很好。

但是,当我在非管理员命令提示符下运行它时,我看到一个 PowerShell 窗口出现一瞬间然后退出。

关于如何解决这个问题有什么想法吗?

尝试

  • 同样的事情发生,窗口打开一瞬间然后退出

通过具有提升权限的批处理文件运行 Powershell 脚本

runas.exe /netonly /noprofile /user:domainadm@domain "powershell.exe -
noprofile -File "C:\Users\...\Desktop\Powershell_scripts\New-
ADuser\.ps1" -verb RunAs"
  • 同样的事情发生在这里,窗口打开一瞬间然后退出

从具有提升权限的批处理文件运行 Powershell 脚本?

powershell -Command "&{ Start-Process powershell -ArgumentList '-File example.ps1 param1' -Verb RunAs}"
  • 同样的问题,窗口打开一瞬间然后退出

使用提升的权限和传递参数从 cmd 运行 powershell 脚本

PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "Start-Process -FilePath PowerShell.exe -Verb RunAs -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File "example.ps1 param1"'"

上下文:我的 PowerShell 脚本用于下载 param1 指定的 NSIS 安装程序

powershell batch-file jenkins jenkins-pipeline
1个回答
0
投票
  • 在 Windows 上,从非提升控制台启动的提升进程总是新窗口中运行,在提升进程退出时自动关闭

    • 对于 故障排除,您可以将
      -NoExit
      放在
      -Command
      参数之前,这会使提升的 PowerShell 会话保持打开状态,直到您手动退出它,从而允许您检查可能发生的任何错误。
  • Windows PowerShell(其 CLI

    powershell.exe
    )中,一个提升的进程以
    $env:Windir\System32
    作为其工作目录启动(幸运的是,PowerShell (Core) 7+ 现在 preserves 调用者的工作目录) .

    • 因此,使用 relative 路径如
      example.ps1
      确实 not 工作,你应该传递一个 full path 来代替。
      • 如果您的脚本依赖于与调用者相同的工作目录,则需要做更多的工作。
# Note the `"$PWD\example.ps1`" part
powershell -ExecutionPolicy Bypass -Command "Start-Process Powershell -Verb RunAs -Wait -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File `"$PWD\example.ps1`" param1'"
© www.soinside.com 2019 - 2024. All rights reserved.