문제

할 수 있는 방법 vbscript 검출 여부 그것은에서 실행되는 UAC 높은가?

내가 문제를 검출하는 사용자가 사용자에는 관리자 그룹에 속해 있습니다.그러나 이것은 여전히지 않는지의 질문에 대답하는 과정은 높은 privs 나지 않은,실행하는 경우 아래에서 Vista 또는 Windows2008.참고해야만 검색 이 상태;하려고 시도하지 상승 또는(err..)de-을 상승.

도움이 되었습니까?

해결책

이 방법을 내가 마지막으로 정착에 따라 달라는 사실에 Vista 및 Windows2008 가 whoami.exe 유틸리티,그리고 감지합 수준의 무결성을 소유하는 사용자의 프로세스.몇 가지의 스크린 샷을 돕기:

WHOAMI,정상적이고 상승에 Vista http://lh3.ggpht.com/_Svunm47buj0/SQ6ql4iNjPI/AAAAAAAAAeA/iwbcSrAZqRg/whoami%20-%20adminuser%20-%20groups%20-%20cropped.png?imgmax=512

당신이 볼 수 있는 경우 cmd 를 실행하 고,whoami/그룹 보고서"높음"필수 수준의 무결성과 다른 SID 보다 실행하는 경우 비 높습니다.그림에서,상위 세션이 정상적인,하나는 실행하는 높은 후 UAC 프롬프트가 표시됩니다.

는 것을 알고,여기에는 코드가 사용됩니다.그것은 본질적으로 검사합 OS 버전인 경우,Vista 또는 서버 2008 년,전화 CheckforElevation 실행 whoami.exe /그룹,그리고 보이는 문자열 S-1-16-12288 출력됩니다.이 예에서 나는 그냥 echo status;에서 실시한 스크립트가지 다른 작업에 기반한 결과입니다.

sub GetOSVersion
Dim strComputer, oWMIService, colOSInfo, oOSProperty, strCaption, strOSFamily
strComputer = "."
Set oWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colOSInfo = oWMIService.ExecQuery("Select * from Win32_OperatingSystem")
'I hate looping through just to get one property. But dunno another way!
For Each oOSProperty in colOSInfo 
  strCaption = oOSProperty.Caption 
Next
If InStr(1,strCaption, "Vista", vbTextCompare) Then strOSFamily = "Vista"
If InStr(1,strCaption, "2008", vbTextCompare) Then strOSFamily = "2008"
If InStr(1,strCaption, "XP", vbTextCompare) Then strOSFamily = "XP"
If InStr(1,strCaption, "2003", vbTextCompare) Then strOSFamily = "2003"
If InStr(1,strCaption, "2000", vbTextCompare) Then strOSFamily = "2000"
If strOSFamily = "" Then 
    Wscript.Echo "No known OS found. (Script can detect Windows 2000, 2003, XP, Vista, 2008.)" 
Else 
    Wscript.Echo "OS Family = " & strOSFamily
End If
Select Case strOSFamily 'if Vista/2008 then call CheckforElevation
Case "Vista"
    CheckforElevation
Case "2008"
    CheckforElevation
Case Else
    Exit Sub
End Select
end sub

sub CheckforElevation 'test whether user has elevated token 
Dim oShell, oExecWhoami, oWhoamiOutput, strWhoamiOutput, boolHasElevatedToken
Set oShell = CreateObject("WScript.Shell")
Set oExecWhoami = oShell.Exec("whoami /groups")
Set oWhoamiOutput = oExecWhoami.StdOut
strWhoamiOutput = oWhoamiOutput.ReadAll
If InStr(1, strWhoamiOutput, "S-1-16-12288", vbTextCompare) Then boolHasElevatedToken = True
If boolHasElevatedToken Then
    Wscript.Echo "Current script is running with elevated privs."
Else
    Wscript.Echo "Current script is NOT running with elevated privs."
End If
end sub

다른 팁

여기 나의 짧은 솔루션:

Function IsElevated
    IsElevated = CreateObject("WScript.Shell").Run("cmd.exe /c ""whoami /groups|findstr S-1-16-12288""", 0, true) = 0
End function 

이 기능은 독립,그리고 표시하지 않습니다 깜박임 콘솔창을 때 실행됩니다.

는 솔루션이 나는 게시하는 몇 가지 생산을 준비 VBScripts 활용하는 whoami 을 찾을 수 있습니다.하나 멋진 일에 대한 그들은 그들과 함께 작업 XP(에 대한 사용할 수 있는 정보에 XP)는 경우에 당신이의 복사본을 리소스 키트 버전의 whoami.exe 다음을 스크립트의(또는 system32 폴더에 있는 각 시스템의).

CSI_IsSession.vbs 포함하는 당신을 말할 수 있는 거의 아무것도 당신에 대해 알고 싶 UAC 또는 현재 세션 스크립트를 실행하는 아래에 있습니다.

VBScriptUACKit.vbs (을 사용하는 CSI_IsSession.vbs)용할 수 있습니다 UAC 프롬프트에서 스크립트를 다시 실행하여 자체입니다.설계 디버깅 작업에서 많은 실행시오.

모두 스크립트를 포함한 샘플 코드를 사용하는 방법을 보여 주는 핵심 코드 스크립트.

조금 더 짧에 WSH Jscript

function isElevated(){
    var strCaption  = "";
    for (var enumItems=new Enumerator(GetObject("winmgmts:\\\\.\\root\\CIMV2").ExecQuery("Select * from Win32_OperatingSystem")); !enumItems.atEnd(); enumItems.moveNext()) {
        strCaption  +=  enumItems.item().Caption;
    }
    if(/Vista|2008|Windows\s7|Windows\s8/.test(strCaption)){
        return (new ActiveXObject("WScript.Shell").run('cmd.exe /c "whoami /groups|findstr S-1-16-12288"', 0, true)) == 0;
    }else{return true}
}    

WScript.Echo(isElevated());
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top