提升没有提示 - 动词runas start-process

时间:2017-03-03 14:23:04

标签: powershell batch-file

这可能是不可能的,但我希望从命令行运行.ps1 powershell脚本,它需要使用Elevated权限运行,不需要或绕过任何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,预定任务..)但我无法实现这一点。

3 个答案:

答案 0 :(得分:3)

这是设计的。如果在某种方法中可以忽略UAC,那将会破坏UAC的观点。每个恶意软件都会在没有提示的情况下升级,就像UAC之前的狂野西部一样。

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

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

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

答案 1 :(得分: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

答案 2 :(得分:0)

击中许多砖墙后......我最终解决了我的问题。 找到这个有用的工具 - 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