有没有办法在 Windows10 上不弹出 UAC 的情况下在一堆远程计算机上运行 regedit?命令/s
行在我的 Windows 10 测试计算机上不起作用(我确信它可以在我的 Win7 系统上运行,但我的大多数客户端计算机都是 Win10)。
最终目标是
- 将 reg 文件导入 HKLM,以将 PowerShell 执行策略提升为不受限制,
- 使用 Powershell 启用系统保护/恢复,
- 使用 PowerShell 创建还原点,最后
- 导入一个 reg 文件以将执行策略设置回 Restricted 或 RemoteSigned。(顺便说一下,这一切都是作为预修补任务完成的)。
在我的测试计算机上,所有这些都运行良好,但 regedit 除外...即使带有参数/s
...在 Windows 10 上如果没有 UAC 弹出窗口也无法运行。我在我的 Win10 测试计算机上看到了这种情况。
我尝试通过 bat 文件运行提升权限的 PowerShell:
powershell.exe -ExecutionPolicy Bypass -File .\MyScript.ps1
和
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy unrestricted -Force' -Verb RunAs}"
但这两者都失败了(即访问被拒绝,powershell 执行策略未被提升)。
导入 reg 文件然后运行我的 Powershell 脚本是我所取得的最接近成功的。
我也尝试过通过 Sysinternals psexec 来实现这一点,基于搜索到的其他解决方案 [即 psexec 调用 reg.exe 进行导入],但是这有它自己的一系列问题(psexec 需要为 EULA 导入一个 reg,所以是同样的问题,而不是解决方案)。
借此,我还尝试运行以下命令:
C:\Windows\System32\REG.exe ADD HKLM\\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell /v ExecutionPolicy /t REG_SZ /d Unrestricted /f
...但总是出现“错误:密钥名称无效”。我可能已经花了太长时间(现在已经 3 天了),只是需要另一双眼睛。有人可以帮忙吗?
答案1
由于您尝试了几种不同的尝试,因此您在帖子中指出的几个问题实际上可能需要回答。您没有明确说明如何远程运行这些命令。您展示的所有命令实际上都没有在远程计算机上执行任何操作。它们都在本地计算机上执行。但是,您确实提到尝试 PSExec。
我也不知道 UAC 会干扰远程命令执行的情况。因此,我只能假设您正在本地计算机上运行命令并遇到 UAC 提示。但是,您这样做是为了实际远程运行命令。
因此,我将尝试为您提供一些基本的远程执行支持,让您走上正轨。所有命令的远程执行都需要打开某些防火墙端口。因此,在继续之前请记住这一点。
Powershell 已经具有远程命令/脚本执行机制。
- 您可以使用
-ComputerName
某些命令的开关在远程系统上执行它们。 Enter-PSSession <ComputerName>
您可以使用和启动交互式远程会话Exit-PSSession
。- 您可以使用该
Invoke-Command -ComputerName <ComputerName>
命令远程运行任何脚本或命令。
除非您启动交互式 Powershell 会话,然后继续尝试执行脚本,否则这些方法均不受执行策略限制。
这些命令将使用您当前登录的用户帐户在远程计算机上运行。如果您不是远程计算机上的管理员,则需要使用开关另外提供一个PSCredential
管理员对象-Credential
。
或者,您也可以使用 PSExec 运行远程命令或可执行文件。最好在 SYSTEM 上下文中运行这些命令或可执行文件,以避免任何权限问题,但如果您只是在远程计算机上的管理员上下文中运行它们,它们通常会成功。
-accepteula
使用开关绕过 EULA 提示-s
使用开关在 SYSTEM 上下文中运行- 有时,
-i
需要利用(交互式)开关来正确运行某些第三方可执行文件。
通过 PSExec 执行的命令不受 UAC 限制。但是,如果您尝试通过 PSExec 远程运行 Powershell,而后者又尝试运行脚本,那么执行策略就会受到阻碍,除非您也使用开关-ExecutionPolicy Bypass
。但是,使用 PSExec 远程运行 Powershell,进而运行脚本,这确实是一种完成所需任务的漫长方法。
再次,PSExec 将使用您当前登录的用户上下文建立与远程计算机的连接。如果您不是远程计算机的管理员,则需要使用-u
和-p
开关指定用户名/密码。
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec
最后一件事,您必须始终记住命令在哪里执行(本地或远程),并意识到您尝试访问的任何资源都是从命令执行的位置的角度进行的。例如,如果我C:\MyBatch.bat
在远程计算机上运行命令,那么C:\MyBatch.bat
必须存在于远程计算机上。