5

我想检查我的 VBscript 运行的上下文是否允许我执行管理任务。

要求:

  • 该解决方案应该适用于从 Server 2003 开始​​的所有 Windows 操作系统。(这排除了仅检查管理员组成员身份的解决方案——记住在 Vista 和 Windows 7 中有 UAC!)
  • 解决方案应该很简单。一个 50 LOC 解决方案,用于检查 Windows 组成员身份(当然,递归,因为用户可能是某个组的成员,而该组的成员是某个组的成员……它是 Administrators 组的成员),然后对 Vista 进行一些额外的检查UAC并不简单
  • 解决方案可能有点脏,所以按照这个解决方案的思路就可以了。
  • 它不应该太脏。在我看来,将文件写入 C:\Windows 或写入注册表项太脏了,因为它会修改系统。(编辑:这可能无论如何都不起作用:例如,在 HTA 中使用 VBScript 时,UAC 重定向会启动。)

相关问题:https ://stackoverflow.com/questions/301860 (我在那里找到的所有答案(a)忽略了 UAC 问题和(b)是错误的,因为它们忽略了用户具有管理权限的可能性,尽管不是直接的管理员组中的成员)

4

5 回答 5

4

我知道这个线程很旧并且标记为已回答,但这是一种更简单的方法,一直对我有用。用户 S-1-5-19 是本地 NT 授权,因此访问密钥需要管理员权限。如果通过海拔运行,它可以工作。

Option Explicit 

msgbox isAdmin(), vbOkonly, "Am I an admin?"

Private Function IsAdmin()
    On Error Resume Next
    CreateObject("WScript.Shell").RegRead("HKEY_USERS\S-1-5-19\Environment\TEMP")
    if Err.number = 0 Then 
        IsAdmin = True
    else
        IsAdmin = False
    end if
    Err.Clear
    On Error goto 0
End Function
于 2017-07-13T00:14:15.870 回答
1

可能将这个(来自 VBscript 的 WhoAmI)与这个(UAC Turned On)结合起来。

这是代码,不幸的是,XP 的先决条件是“whoami.exe”,可以在 XP(维基百科)的资源工具包或支持工具中找到——我仍然想找到一种方法来避免它。

If UserPerms("Admin") Then
 Message = "Good to go"
Else
 Message = "Non-Admin"
End If

If UACTurnedOn = true Then
 Message = Message & ", UAC Turned On"
Else
 Message = Message & ", UAC Turned Off (Or OS < Vista)"
End If

Wscript.echo Message

Function UserPerms (PermissionQuery)          
 UserPerms = False  ' False unless proven otherwise           
 Dim CheckFor, CmdToRun         

 Select Case Ucase(PermissionQuery)           
 'Setup aliases here           
 Case "ELEVATED"           
   CheckFor =  "S-1-16-12288"           
 Case "ADMIN"           
   CheckFor =  "S-1-5-32-544"           
 Case "ADMINISTRATOR"           
   CheckFor =  "S-1-5-32-544"           
 Case Else                  
   CheckFor = PermissionQuery                  
 End Select           

 CmdToRun = "%comspec% /c whoami /all | findstr /I /C:""" & CheckFor & """"  

 Dim oShell, returnValue        
 Set oShell = CreateObject("WScript.Shell")  
 returnValue = oShell.Run(CmdToRun, 0, true)     
 If returnValue = 0 Then UserPerms = True                   
End Function

Function UACTurnedOn ()
 On Error Resume Next

 Set oShell = CreateObject("WScript.Shell")
 If oShell.RegRead("HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA") = 0 Then
      UACTurnedOn = false
 Else
      UACTurnedOn = true
 End If
End Function
于 2009-11-05T21:48:00.173 回答
1

上面需要“whoami”的代码来自我们位于 CSI-Windows.com/toolkit/ifuserperms 的 IfUserPerms 脚本。

在这里阅读您的帖子后,我创建了新的脚本代码,在 VBS(9 行)和 CMD/BAT(3 行)中使用快速、小型、高效、被动(不改变任何东西)代码检查管理员权限。如果用户没有被提升,它也可以通过报告 false 来与 UAC 一起使用。

你可以在这里找到代码:http: //csi-windows.com/toolkit/csi-isadmin

于 2010-01-26T18:55:21.777 回答
1

我添加了两个额外的脚本工具包,它们极大地增强了上面来自 ifuserperms.vbs 的原始代码。

CSI_IsSession.vbs可以告诉您几乎所有关于 UAC 或脚本正在运行的当前会话的信息。

VBScriptUACKit.vbs(使用 CSI_IsSession.vbs)允许您通过重新启动自身来选择性地在脚本中提示 UAC。经过设计和调试,可在许多执行场景下工作。

于 2010-05-25T14:13:38.397 回答
0

这是使脚本文件或任何其他文件以管理员身份运行的最快方法:

首先创建您需要做的任何事情的 VBS 脚本。在我的情况下,它是一个注册表编辑 vbs 以允许我自动管理登录,然后当机器重新启动时,另一个文件运行以确保不再启用自动管理登录。

创建文件后,您需要创建一个 cmd 提示快捷方式。接下来在快捷方式上“右键单击”并更改属性,使其以管理员身份运行。

像这样粘贴您的文件路径: D:\WINDOWS\system32\cmd.exe /c "D:\Dump\Scripts\StartUp.vbs"

“C”表示完成后将关闭如果您希望它保持打开状态,请使用“K”

希望这对其他人有帮助。

于 2011-04-20T19:46:45.750 回答