msTsAllowLogin auslesen

  • Moin,


    ich möchte gerne auslesen, ob sich ein Bestimmter User am Teriminalserver anmelden kann (siehe Bild)

    [Blockierte Grafik: http://i.imgur.com/EL24vSI.png]

    Habe es schon mit der AD UDF von water versucht:

    [autoit]

    #include "AD.au3"

    [/autoit][autoit][/autoit][autoit]

    ; Open Connection to the Active Directory
    _AD_Open()
    If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"",_AD_GetObjectAttribute(@UserName, "msTsAllowLogin"))

    [/autoit]

    Der scheint aber leider das TsAllowLogin nicht lesen zu können (CN z.B. geht aber)
    http://msdn.microsoft.com/en-us/library/cc220551.aspx

    Bei der WMI bin ich leider noch nicht fündig geworden. Regestry ebenso nicht


    Wichitg zu wissen: es geht hier um die einzelnen User nicht um die generelle Anmeldung per WTS.
    Jemand ne idee?

    Bin dankbar für jeden Tipp ^^

    21 is only half the truth.

    Einmal editiert, zuletzt von Mahagon (10. März 2014 um 13:53)

  • Wurde hier mal diskutiert.

  • Spoiler anzeigen
    [autoit]

    #include "AD.au3"
    Local Const $wbemFlagReturnImmediately = 0x10
    Local Const $wbemFlagForwardOnly = 0x20

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $oMyError = ObjEvent("AutoIt.Error", "ComError")

    [/autoit] [autoit][/autoit] [autoit]

    _WinWMI_UserAccount_Name()

    [/autoit] [autoit][/autoit] [autoit]

    $oMyError = ObjEvent("AutoIt.Error", "")
    ;COM Error function
    Func ComError()
    If IsObj($oMyError) Then
    $HexNumber = Hex($oMyError.number, 8)
    SetError($HexNumber)
    Else
    SetError(1)
    EndIf
    Return 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _WinWMI_UserAccount_Name($Computer = '127.0.0.1')

    [/autoit] [autoit][/autoit] [autoit]

    _AD_Open()
    $WMIConnect = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\' & $Computer & '\root\CIMV2')
    If Not IsObj($WMIConnect) Then Return SetError(-1, @error, 0)
    $ObjList = $WMIConnect.ExecQuery('select Name,FullName,Disabled,Lockout from win32_useraccount', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If Not IsObj($ObjList) Then Return SetError(-2, @error, 0)
    $sReturn = "INSERT INTO tbl_name (name,fullname,disabled,locked) Values"
    For $ObjItem In $ObjList
    $AD_DistinguishedName=_AD_GetObjectAttribute($ObjItem.Name, "DistinguishedName")
    $objRootDSE = ObjGet("LDAP://RootDSE")
    $strUserDN = $AD_DistinguishedName
    $UserObj = ObjGet("LDAP://" & $strUserDN)
    $sReturn &= "('"&$ObjItem.Name & "', '" & $ObjItem.FullName & "', '" & $ObjItem.Disabled & "', '" & $ObjItem.Lockout&"', '"&$UserObj.AllowLogon&"'),"
    Next
    If StringRight($sReturn,1) == "," Then $sReturn = StringTrimRight($sReturn,1)

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite($sReturn & @LF)
    _AD_Close()
    $UserObj = ""

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_WinWMI_UserAccount_Name

    [/autoit]

    Mit Ldap scheint es zu klappen

    Aber Danke :)

    21 is only half the truth.