在VbScript中绕过UAC

在VbScript中绕过UAC,vbscript,uac,Vbscript,Uac,我有一个Vbscript,在用户注销时运行,该脚本应该关闭服务,但是我无法关闭该服务,因为它被UAC阻止。我想知道是否有一种方法可以在我的vbscript中绕过UAC,而不必在我的域中的每台机器上关闭UAC。 谢谢 如果你可以绕过UAC说“它不应该适用于我”,UAC有什么意义?不能从vbscript中绕过它 不过,通过首先使用提升的凭据运行脚本,您可以管理性地执行此操作 例如,通过“登录时”计划任务,以管理员或系统管理员身份运行。我相信这在Windows7和vista中是有效的 要在远程计算机上

我有一个Vbscript,在用户注销时运行,该脚本应该关闭服务,但是我无法关闭该服务,因为它被UAC阻止。我想知道是否有一种方法可以在我的vbscript中绕过UAC,而不必在我的域中的每台机器上关闭UAC。
谢谢

如果你可以绕过UAC说“它不应该适用于我”,UAC有什么意义?不能从vbscript中绕过它

不过,通过首先使用提升的凭据运行脚本,您可以管理性地执行此操作

例如,通过“登录时”计划任务,以管理员或系统管理员身份运行。我相信这在Windows7和vista中是有效的

要在远程计算机上创建此类任务,请执行以下操作:

schtasks.exe /create /S COMPUTERNAME /RU "NT AUTHORITY\SYSTEM" /RL HIGHEST /SC ONLOGON /TN "Administrative OnLogon Script" /TR "cscript.exe \"Path\To\Script.vbs\""
也可以使用脚本创建任务


注意:如果这是脚本所做的唯一事情,您可以简单地使用类似于
SC
NET STOP
的命令直接停止服务。

的确,您不能从vbscript绕过它(我知道的任何方式)。但是vbscript是解决方案的一部分。

另一个稍微灵活的解决方案(丑陋但灵活)使用以下两行vbscript:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.LogEvent 4, "C536132C2CB6ABB85554670D2F97E23C"
<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">
  *[System[Provider[@Name='WSH'] and (Level=4 or Level=0) and (EventID=4)]] 
  and 
  *[EventData[Data='C536132C2CB6ABB85554670D2F97E23C']]
</Select>
</Query>
</QueryList>
C536132C2CB6ABB85554670D2F97E23C
该解决方案还需要为您的计划触发器提供以下自定义xml事件筛选器:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.LogEvent 4, "C536132C2CB6ABB85554670D2F97E23C"
<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">
  *[System[Provider[@Name='WSH'] and (Level=4 or Level=0) and (EventID=4)]] 
  and 
  *[EventData[Data='C536132C2CB6ABB85554670D2F97E23C']]
</Select>
</Query>
</QueryList>
C536132C2CB6ABB85554670D2F97E23C

是任意绑定到要以提升权限运行的应用程序的任何足够唯一的字符串。所以,你可以成为任何应用程序的管理员,而无需不断提醒Windows7它是正常的。这真的不应该这么难:-(

感谢您的回复,我使用了您的想法,即只使用批处理文件,然后我简单地创建了文件的快捷方式,并在“属性”下将快捷方式设置为以管理员身份运行,这是一个非常糟糕的黑客行为,但它可以正常工作。感谢您的帮助!如果用户是标准用户,则不允许他们关闭服务。禁用UAC不会影响您的工作将用户设置为管理员。在没有UAC的Windows XP下,您会怎么做?正确的解决方案是在安装过程中调整服务的ACL设置,以允许所有人停止您的服务。如果您确实希望“所有用户”能够停止您的服务。