VBScript:检查脚本是否具有管理权限

时间:2009-10-21 08:59:55

标签: vbscript

我想检查(通过VBScript)脚本运行的上下文是否允许我执行管理任务。

的要求:

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

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

5 个答案:

答案 0 :(得分:2)

我知道这个帖子已经很老了并且标记了答案,但这是一个简单的方法,一直对我有用。用户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

答案 1 :(得分:1)

可能将此(WhoAmI from VBscript)与此(UAC Turned On)合并。

以下是代码,XP的不幸预先请求是“whoami.exe”,可以在资源工具包或XP支持工具中找到(Wikipedia) - 我仍然想找到一种方法没有它。

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

答案 2 :(得分:1)

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

在这里阅读你的帖子之后,我创建了新的脚本代码,用于检查VBS(9行)和CMD / BAT(3行)中的快速,小型,高效,被动(无变化)代码的管理权限。如果用户未提升,它也可以通过报告false来与UAC一起使用。

您可以在此处找到代码:http://csi-windows.com/toolkit/csi-isadmin

答案 3 :(得分:1)

我添加了两个额外的脚本工具包,可以显着增强上面来自ifuserperms.vbs的原始代码。

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

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

答案 4 :(得分:0)

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

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

创建文件后,您需要创建cmd提示符快捷方式。 接下来“右键单击”快捷方式并更改提示,以便它以管理员身份运行。

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

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

希望这有助于其他人。