【问题标题】:elevate without prompt - verb runas start-process在没有提示的情况下提升 - 动词 runas 启动过程
【发布时间】:2017-03-03 14:23:03
【问题描述】:

这可能是不可能的,但我希望从命令行运行 .ps1 powershell 脚本,它需要以提升的权限运行,没有或绕过任何 UAC 提示。

这是从脚本的角度来看,没有用户交互。因此,CMD 或 Powershell 的“以管理员身份运行”不是一个选项。无法点击任何 UAC 提示,因为这些提示很可能会被隐藏。

我的命令是这样开始的 -

powershell.exe -executionpolicy bypass -file .\remove-default-apps.ps1

这会很好地启动 .ps1,但脚本最终会失败,因为脚本中的命令需要提升 (Get-AppxPackage | Remove-AppxPackage)

我的下一次尝试是使用 Powershell 运行脚本,使用 -

Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File MyScript.ps1' -Verb RunAs

但这仍然提示提升。 我可以手动复制从非提升 cmd 窗口运行脚本的错误,但运行提升它工作正常。

有人知道这是否可能吗?或者有任何提示可以为我指明正确的方向,我尝试了很多其他方法(psexec、计划任务..)但无法实现。

【问题讨论】:

    标签: powershell batch-file


    【解决方案1】:

    这是设计使然。如果可以通过某种方法忽略 UAC,那将扼杀 UAC 的意义。每个恶意软件都会在没有提示的情况下自行升级,就像 UAC 之前的狂野西部一样。

    通过提升,您可以将其他事情设置为提升运行,无论是计划任务还是其他。在企业范围内运行这类事情最常见的方法是通过代理使用配置管理(SCCM、LANDesk、Puppet、Salt 等)或通过PSRemoting/PSexec 远程运行。 (请注意,代理必须首先以管理员权限安装)

    至于删除配置包,这似乎是在映像时完成的任务。要么在部署之前直接从 WIM 中删除它,要么在仍在 WinPE 中放置映像后在任务序列任务中将其删除,或者在 SysPrep 之前将其删除。我偏爱第二种方法,并在 MDT 中保持我的所有成像任务编程并尽可能接近默认的 Windows 图像。

    如果您不想要提示,您可以关闭 UAC(或设置为从不通知等 Win8+)。如果您希望在多台计算机上执行此操作,则可以通过组策略来完成。然而,这并不明智。

    【讨论】:

    • 我想我内心深处一直都知道这是答案,但感谢您的确认。我们确实使用了配置管理 (KACE),但我正在努力让这些脚本通过这种方法运行提升。我已成功删除了基础映像上的预配包,但我的经理还想使用 Windows 7 中的就地升级。所以这需要在操作系统安装后实现。我同意完全关闭 UAC。但即使在我关闭 UAC 的测试中,此脚本也无法通过 KACE 成功运行。
    【解决方案2】:

    禁用 UAC 不是一个明智的决定。但是,可能使用 Powershell 对bypass 它:

    if((([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")) {
        Remove-Item "HKCU:\software\classes\ms-settings" -Force -Recurse
        #Script that will run at high integrity
    } else {
        $reg_path = "HKCU:\software\classes\ms-settings\shell\open\command"
        New-Item $reg_path -Force
        New-ItemProperty $reg_path -Name "DelegateExecute" -Value $null -Force
        Set-ItemProperty $reg_path -Name "(default)" -Value "powershell.exe -NoProfile -ExecutionPolicy Bypass -File $PSCommandPath" -Force
        Start-Process "ComputerDefaults.exe"
    }
    

    *此脚本仅适用于已经是管理员的 Windows 10 用户。我的完整答案见here

    【讨论】:

      【解决方案3】:

      在撞了很多砖墙之后……我最终解决了我的问题。 找到了这个有用的工具 - https://technet.microsoft.com/en-gb/library/d08d6a02-4d5b-4929-87ad-98f03be11898?f=255&MSPPError=-2147217396

      将此功能与通过注册表临时禁用 UAC 提示一起使用,可以让 powershelll 命令按预期以高程运行。

      我的最终脚本是:

      REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f

      提升 %SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -file remove-default-apps.ps1

      REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 5 /f

      【讨论】:

      • 绝对建议禁用UAC。
      猜你喜欢
      • 2013-03-07
      • 2014-01-19
      • 2018-11-01
      • 2015-10-26
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多