2011-01-10 12 views
0

Ich verwende VbScript zum Abrufen des Sicherheitsdeskriptors eines Win32_Service. Ich bin mit dem folgenden Code:Abrufen der Win32_Service-Sicherheitsbeschreibung mit VBScript

SE_DACL_PRESENT = &h4 
ACCESS_ALLOWED_ACE_TYPE = &h0 
ACCESS_DENIED_ACE_TYPE = &h1 

strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate, (Security)}!\\" & strComputer & "\root\cimv2") 

Set colInstalledPrinters = objWMIService.ExecQuery _ 
    ("Select * from Win32_Service") 

For Each objPrinter in colInstalledPrinters 
    Wscript.Echo "Name: " & objPrinter.Name 
' Get security descriptor for printer 
    Return = objPrinter.GetSecurityDescriptor(objSD) 
    If (return <> 0) Then 
    WScript.Echo "Could not get security descriptor: " & Return 
    wscript.Quit Return 
    End If 
' Extract the security descriptor flags 
    intControlFlags = objSD.ControlFlags 
    If intControlFlags AND SE_DACL_PRESENT Then 
' Get the ACE entries from security descriptor 
    colACEs = objSD.DACL 
    For Each objACE in colACEs 
' Get all the trustees and determine which have access to printer 
    WScript.Echo objACE.Trustee.Domain & "\" & objACE.Trustee.Name 
    If objACE.AceType = ACCESS_ALLOWED_ACE_TYPE Then 
    WScript.Echo vbTab & "User has access to printer" 
    ElseIf objACE.AceType = ACCESS_DENIED_ACE_TYPE Then 
    WScript.Echo vbTab & "User does not have access to the printer" 
    End If 
    Next 
    Else 
    WScript.Echo "No DACL found in security descriptor" 
End If 
Next 

aber jedes Mal wenn ich es laufen erhalte ich die Nachricht, die den resultierenden Code sagte, ist -2147023582 etwas, anstatt die Fehlercodes definierten in the manual.

Wer hat irgendwelche Ideen? Ich benutze Windows 7 Professional 64-Bit.

Die Nummer ist -2147023582. Könnte es sich um ein 64-Bit-Problem handeln? sieht das nicht wie eine Ganzzahl ohne Vorzeichen aus, die als Ganzzahl mit Vorzeichen gespeichert ist?

(PS: nichts gegen die Variablennamen ... Ich habe ein Beispiel von msdn gerippt).

Antwort

3

Der Fehlercode -2147023582 (0x80070522) bedeutet "Eine erforderliche Berechtigung wird vom Client nicht gehalten." Höchstwahrscheinlich ist das Privileg Security im WMI-Moniker nicht genug, und Sie müssen Ihr Skript als Administrator ausführen. (Zumindest funktioniert Ihr Skript auf 64-Bit-Vista, wenn es als Administrator ausgeführt wird.)

+0

Vielen Dank. Aber sollte das nicht Returncode 2 oder 9 laut Handbuch sein? Der Wert -2147023582 ist in der Tabelle nicht definiert. – agnsaft

+0

@invictus: Anscheinend nicht unbedingt. Dies ist ein generischer Windows-Systemfehler. – Helen

+0

Sie hatten Recht. Weißt du, ob es möglich ist, das VBScript durchzusetzen, um Administratorrechte anzufordern und UAC auszulösen? – agnsaft