2009-10-21 4 views
2

스크립트가 실행되는 컨텍스트에서 관리 작업을 수행 할 수 있는지 여부 (VBScript 기준)를 확인하고 싶습니다.VBScript : 스크립트에 관리 권한이 있는지 확인하십시오.

요구 사항 :

    솔루션은 서버 2003 ( 로 시작하는 모든 Windows 운영 체제에서 작동해야
  • 이 단지 관리자 그룹의 회원 확인 솔루션을 배제 - UAC가 있음을 기억 Vista 및 Windows 7!)
  • 해결책은 간단이어야합니다. Windows 그룹 구성원을 확인하는 50 가지 LOC 솔루션 (재귀 적으로, 물론 사용자가 Administrators 그룹의 구성원 인 그룹의 구성원이 될 수 있기 때문에). 그런 다음 Vista에 대한 추가 검사를 수행합니다 UAC는 단순하지 않습니다입니다.
  • 해결책이 약간 더러울 수 있으므로 this solution 행의 내용이 정상입니다.
  • 너무 지저분하지 않아야합니다. C : \ Windows에 파일을 쓰거나 레지스트리 키를 쓰는 것은 시스템을 수정하기 때문에 내 생각에 너무 지저분합니다. (편집 : 어쨌든 작동하지 않을 수 있습니다 : 예를 들어, HTA에서의 VBScript를 사용하여, UAC 리디렉션 차기.)

관련 질문 : https://stackoverflow.com/questions/301860 (내가 거기있는 모든 답변 (a)는 UAC 문제를 무시 그들이 관리자 그룹 직접 부재 인하지 않았지만 관리 권한을 갖는 사용자)의 가능성을 무시할 수 있기 때문에 (b))

답변

1

가능성이 (UAC Turned On으로)이 (WhoAmI from VBscript 결합 결함이다.

여기에 코드가 있습니다. XP에 대한 불행한 pre-req는 "whoami.exe"입니다.이 키트는 리소스 키트 또는 XP 용 도구 (Wikipedia)에서 찾을 수 있습니다. -이 도구 없이는 할 수있는 방법을 찾고 싶습니다. . 그 위의 코드는 "whoami를"필요

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 
+0

흥미로운 접근법; UserPerms ("Elevated") Then Message = Message & "를 추가하고"UAC Turned On "줄에 ​​상승 된"<< "를 추가해야합니다. whoami.exe는 진짜 단점이 있습니다. 특히 여러분이 파일을 재배 포할 수 있는지 확실하지 않으므로 (그리고 고객이 그러한 파일을 직접 다운로드한다고 기대할 수는 없습니다). – Heinzi

+0

네, 저도 그걸 좋아해요. WMI에서 이미 그룹 (및 중첩 된) 멤버십을 사용하여 탐색 한 경로 이외의 방법을 찾지 못하는 것 같습니다. vbscript가 관리자 상태를 빠르게 확인할 수있는 몇 가지 COM 구성 요소가있을 수 있습니다. –

1

는 CSI-Windows.com/toolkit/ifuserperms에서 우리 IfUserPerms 스크립트에서입니다.

여기에서 게시물을 읽은 후 VBS (9 줄)와 CMD/BAT (3 줄) 모두에서 빠르고 작은 작고 효율적인 수동 (변경 사항 없음) 코드로 관리자 권한을 검사하는 새 스크립트 코드를 만들었습니다. . 또한 사용자가 승격되지 않은 경우 false를보고하여 UAC와 함께 작동합니다.

당신은 여기에 코드를 찾을 수 있습니다

: 나는 그 ifuserperms.vbs에서 온 위에 극적으로 원래의 코드를 향상 두 개의 추가 스크립트 키트를 추가 한 http://csi-windows.com/toolkit/csi-isadmin

+1

감사합니다. 매우 유용합니다. 9 줄의 코드를 게시 하시겠습니까? – Heinzi

+1

'reg query HKEY_USERS \ S-1-5-20 \ Environment/v TEMP 2> NUL 1> & 2 && echo 예 || 에코 없음 – RolKau

1

합니다.

CSI_IsSession.vbs은 UAC 또는 스크립트가 실행중인 현재 세션에 대해 알고 싶은 거의 모든 정보를 제공합니다.

VBScriptUACKit.vbs (CSI_IsSession.vbs 사용)을 사용하면 스크립트를 다시 실행하여 스크립트에서 UAC를 선택적으로 프롬프트 할 수 있습니다. 많은 실행 시나리오에서 작동하도록 설계되고 디버깅되었습니다.여기

0

스크립트 파일 또는 관리자로 다른 파일 실행을 일으킬 수있는 가장 빠른 방법입니다 :

먼저 당신이해야 할 무엇이든 당신의 VBS 스크립트를 작성합니다. 필자의 경우 레지스트리 편집 vbs를 사용하여 autoadmin 로그온을 허용합니다 컴퓨터가 다시 시작될 때 autoadmin 로그온이 더 이상 활성화되지 않았 음을 보장하기 위해 다른 파일이 실행되었습니다.

파일을 만든 후에는 cmd 프롬프트 바로 가기를 만들어야합니다. 다음 바로 가기를 마우스 오른쪽 버튼으로 클릭하고 propeties를 변경하여 관리자로 실행하십시오.

붙여 넣기 같은 파일 경로 : D : \ WINDOWS \ system32를 \ cmd.exe를/C :

'C'이란 완료 후 종료됩니다 의미 "D \ StartUp.vbs \ \ 스크립트 덤프" 계속 사용하려면 'K'를 사용하십시오.

희망이 있으면 다른 사람에게 도움이됩니다.

1

이 스레드는 매우 오래된 것으로 알고 있지만 대답은 표시되어 있지만이 방법은 항상 저에게 효과적이었습니다. 사용자 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 
관련 문제