以批处理(自动提升)运行批处理,然后取消提升

时间:2013-07-16 14:44:01

标签: windows perl batch-file command-prompt

我有一个分为两部分的脚本。第一部分需要管理员访问权限(更新HOSTS文件并进行一些复制/覆盖)。该部分完成后,我需要使用主机名别名映射驱动器,更新脚本的第一部分。

我已经想出如何使用此SO Question来获取提升的权限。但映射驱动器(在管理员中)将驱动器映射到管理员的会话。我需要“撤消”回用户模式以运行我的第二个脚本。

这是我每天至少运行一次的脚本,可能每天多次运行。我试图创建一个只有1 .bat文件的解决方案,如果可能的话。出于原因,脚本是用perl编写的。

我尝试过的事情:

  1. 使用runas / user:regular_user命令(工作)
  2. 1个bat文件对2个批处理文件使用CALL(这个“有效”,但由于某种原因,它们同时运行)
  3. 分别运行2个bat文件,并手动运行。
  4. 正在搜索SO,但我找不到admin-> user而只是user-> admin
  5. TLDR: 如何在批处理文件中从管理员模式退出用户模式?

3 个答案:

答案 0 :(得分:2)

您最好的选择是使用最好的第三方远程/本地执行工具:Windows Sysinternals PSEXEC。您可以使用PSEXEC提供凭据并完成所需的操作!您可以将PSEXEC命令放入批处理文件或vbs中,让它们顺利运行。您还可以使用PSEXEC提升权限调用一个命令,而在没有任何提升的情况下调用下一个命令,同时在单个唯一批处理文件中混合凭据。

http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

答案 1 :(得分:2)

如果您使用的是2个批处理文件,请使用ElevatedBatch.cmd(继续执行无关紧要的操作)调用具有提升的批处理Main.cmd

@ECHO OFF
START /WAIT ElevatedBatch.cmd %1 %2 %3 %4 %5 %6 %7 %8 %9
REM here you can do unelevated stuff:
ECHO Running unelevated now

参数/WAIT可确保脚本等到ElevatedBatch.cmd结束。对于ElevatedBatch.cmd,您可以使用this之类的模板来提升它。

答案 2 :(得分:0)

先做非抬高的部分,然后抬起并继续。