以管理员身份运行批处理文件(自动提升权限),然后取消管理员身份

6
我有一个脚本,分为两部分运行。第一部分需要管理员权限(更新HOSTS文件并进行一些复制/覆盖操作)。在该部分完成后,我需要使用第一部分脚本更新的主机名别名映射驱动器。
我已经找到了如何通过使用SO Question获得提升的特权。但是在管理员模式下映射驱动器会将驱动器映射到管理员的会话中。我需要“降级”回到用户模式以运行我的第二个脚本。
这是我每天至少运行一次的脚本,可能会多次运行。如果可能的话,我正在尝试创建一个只有一个.bat文件的解决方案。由于某些原因,脚本是用perl编写的。
我尝试过的事情:
  1. 使用runas /user:regular_user命令(这个方法不行
  2. 使用CALL命令运行两个批处理文件的1个bat文件(这个方法“可以”,但由于某种原因两个文件同时运行)
  3. 分别手动运行2个批处理文件。
  4. 在SO上搜索,但我找不到从管理员模式切换到用户模式的方法,只有从用户模式切换到管理员模式的方法。

TLDR: 如何在批处理文件中从管理员模式降为用户模式?

3个回答

2
你最好使用最好的第三方远程/本地执行工具:Windows Sysinternals PSEXEC。你可以提供凭据,并使用PSEXEC实现你需要的功能!你可以将PSEXEC命令放入批处理文件或vbs中,让它们无缝运行。你还可以在单个唯一的批处理文件中混合凭据,用PSEXEC提升权限调用一个命令,而下一个则不需要任何提升。 http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

很酷,这听起来很有前途。谢谢。 - Ishikawa91

2

如果您正在使用2个批处理文件,请使用Main.cmd(继续执行非提升操作)以提升方式调用批处理ElevatedBatch.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,您可以使用类似这个模板来提升它。


0

先执行非管理员部分,然后提升权限并继续执行。


我不确定在OP的情况下是否可能。OP说他需要先更新HOSTS文件,然后使用新的别名来完成第二部分。 - user1071777

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接