1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. veronesi

Beiträge von veronesi

  • Domänenabfrage

    • veronesi
    • 24. Mai 2011 um 13:05

    Striponly! Na klar!
    Das ist doch mal eine gute Erfindung!

    Ich glaube, ich werde es so machen.

    Vielen Dank an alle!
    Gruss Veronesi

  • Domänenabfrage

    • veronesi
    • 24. Mai 2011 um 10:16

    Hallo Water,

    ganz ehrlich: Deine AD UDF ist genial! Auch die Beispiele. Da werde ich sicher einiges daraus gebrauchen können!

    Trotzdem wäre es mir manchmal lieber, eine Funktion selber zu schreiben, um sie auch zu verstehen!
    Den Obfuscator setze ich eher weniger ein, da er mir auch schon ein Script zerschossen hat. (Gut er macht ja vorher ein Backup.... - trotzdem)

    Lange rede, kurzer Sinn: Deine UDF werde ich sicher verwenden. Aber einiges möchte ich auch selber machen.
    Gruss Veronesi

  • Domänenabfrage

    • veronesi
    • 24. Mai 2011 um 10:05

    Nun besteht noch folgendes Problem:
    Wenn eine Eigenschaft bei dem bestimmten Benutzer nicht ausgefüllt ist, dann bricht AutoIt ab. Ich möchte dies aber abfangen und einfach einen leeren String haben!
    Wie geht das?

    Hier das Script:

    Script
    [autoit]

    #include "S:\UE_Std\TestPC\Source\Functions\Func_GetFQDN.au3"
    Dim $FQDN = _GetFQDN(InputBox("Benutzernamen eingeben", "Bitte geben Sie den Benutzernamen ein, über welchen Sie etwas wissen möchten", @UserName))
    Dim $sInfo = ""

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

    $oIADsUser = ObjGet("LDAP://" & $FQDN) ;http://msdn.microsoft.com/en-us/library/…0(v=VS.85).aspx / http://msdn.microsoft.com/en-us/library/…0(v=VS.85).aspx
    If Not @error And IsObj($oIADsUser) Then
    $sInfo &= "Name: " & @TAB & @TAB & $oIADsUser.Get("displayName") & @LF
    $sInfo &= "Abteilung: " & @TAB & $oIADsUser.Get("description") & @LF
    $sInfo &= "Geschäftsnummer: " & @TAB & $oIADsUser.Get("telephoneNumber") & @LF
    $sInfo &= "Natelnummer: " & @TAB & $oIADsUser.Get("mobile") & @LF
    $sInfo &= "Fax: " & @TAB & @TAB & $oIADsUser.Get("facsimileTelephoneNumber") & @LF
    EndIf
    MsgBox(64, "Info", $sInfo)
    $oIADsUser = 0

    [/autoit]

    Und hier die benötigte _GetFQDN UDF:

    _GetFQDN
    [autoit]

    #cs
    ==================================================================================
    Function: _GetFQDN($User)
    Description: Returns the FQDN (Fully Qualified Domain Name) of the given user
    Parameter(s): $User = @Username

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

    Return Value(s): On Success - Return FQDN String (@Error = 0)
    On Failure: - Return 0, @ERROR <> 0
    Author(s): Veronesi
    http://www.cb-net.co.uk/index.php?opti…script&Itemid=8
    ==================================================================================
    #ce

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

    #include-once

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

    Func _GetFQDN($User = @UserName)
    Local $oRoot, $oDomain, $fqDomain, $oConnection, $oCommand, $oRecordSet, $FQDN
    $oRoot = ObjGet("LDAP://rootDSE")
    If @error Or Not IsObj($oRoot) Then
    $oRoot = 0
    Return SetError(1, 1, 0)
    EndIf

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

    $oDomain = ObjGet("LDAP://" & $oRoot.Get("defaultNamingContext"))
    If @error Or Not IsObj($oDomain) Then
    $oRoot = 0
    $oDomain = 0
    Return SetError(2, 2, 0)
    EndIf

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

    $fqDomain = $oRoot.Get("defaultNamingContext")

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

    $oConnection = ObjCreate("ADODB.Connection")
    If @error Or Not IsObj($oConnection) Then
    $oConnection.Close
    $oRoot = 0
    $oDomain = 0
    $oConnection = 0
    Return SetError(3, 3, 0)
    EndIf

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

    $oConnection.Open("Provider=ADsDSOObject")
    $oCommand = ObjCreate("ADODB.Command")
    If @error Or Not IsObj($oCommand) Then
    $oConnection.Close
    $oRoot = 0
    $oDomain = 0
    $oConnection = 0
    $oCommand = 0
    Return SetError(4, 4, 0)
    EndIf

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

    $oCommand.ActiveConnection = $oConnection

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

    $oCommand.CommandText = "<LDAP://" & $fqDomain & ">;(&(objectCategory=" & "User" & ")" & "(samAccountName=" & $User & "));samAccountName,distinguishedName;subtree"
    $oRecordSet = $oCommand.Execute
    If $oRecordSet.RecordCount = 0 Then
    $oConnection.Close
    $oRoot = 0
    $oDomain = 0
    $oConnection = 0
    $oCommand = 0
    $oRecordSet = 0
    Return SetError(5, 5, 0)
    EndIf

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

    $FQDN = $oRecordSet.Fields("distinguishedName").Value
    $oConnection.Close

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

    $oRoot = 0
    $oDomain = 0
    $oConnection = 0
    $oCommand = 0
    $oRecordSet = 0

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

    Return $FQDN
    EndFunc ;==>_GetFQDN

    [/autoit]

    Gruss Veronesi

  • Domänenabfrage

    • veronesi
    • 24. Mai 2011 um 09:41

    Ich habe nun herausgefunden, dass wenn ich den String "FullName" durch "displayName" ersetze, es funktioniert!
    Aber woher kenne / finde ich diese Schlüsselwörter?

    In http://msdn.microsoft.com/en-us/library/…0(v=VS.85).aspx heisst es eben "FullName"....

  • Domänenabfrage

    • veronesi
    • 24. Mai 2011 um 07:34

    Hallo zusammen,

    eines vorweg: ich weiss, dass es irgendwo eine AD.au3 gibt. Diese möchte ich jedoch nicht nutzen, da ich nur sehr wenig an der AD auslesen möchte, und das sonst Overkill wäre.
    Zudem möchte ich auch selber etwas lernen ;)

    Also hier mein Problem: Ich möchte von einem gegebenen Benutzer gewisse Informationen (Voller Name, Telefonnummern etc.) aus dem Active Directory auslesen. Dazu gibt es diesen MSDN Artikel.
    Die Groups kann ich auch in einer Schleife erfolgreich abfragen. Aber mit dem Rest funktioniert nichts....

    Hier mein Script:

    Spoiler anzeigen
    [autoit]

    $FQDN = "CN=User,OU=General,OU=Departement,DC=company,DC=com"

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

    $oIADsUser = ObjGet("LDAP://" & $FQDN) ;http://msdn.microsoft.com/en-us/library/…0(v=VS.85).aspx
    If @error Or Not IsObj($oIADsUser) Then MsgBox(0,"","Fehler1")

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

    ;*******************************Funktioniert!!!
    For $Group In $oIADsUser.Groups
    MsgBox(0,"",$Group.Name)
    MsgBox(0,"",$Group.Description)
    Next

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

    ;*******************************Funktioniert NICHT!!!
    MsgBox(0,"",$oIADsUser.Get("FullName"))
    $oIADsUser = 0

    [/autoit]

    Vielleicht findet jemand einen Fehler!

  • Script unter anderem Benutzer ausführen

    • veronesi
    • 20. Mai 2011 um 08:00

    Mit dem Programm kannst Du das auslesen.
    Aber damit Du auf fremden PCs überhaupt die Registry auslesen kannst muss die Remoteregistry aktiviert sein!

    [autoit]


    Local $Username = @UserName
    Local $Domain = @LogonDomain
    Local $PW = "XYZ"
    Local $RemotePC = "XYZ"
    Local $RegistryPath = "HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate"
    Local $RegistryKey = "WUServer"
    Local $Program = '"' & @ComSpec & '" /c Reg Query \\' & $RemotePC & "\" & $RegistryPath & " /v " & $RegistryKey

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

    Local $PID = RunAs($Username, $Domain, $PW, 0, $Program, @TempDir, @SW_HIDE, 0x2)
    Local $Return = ""
    While 1
    $Return &= StdoutRead($PID)
    If @error Then ExitLoop
    WEnd

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

    MsgBox(64, "Value", $Return)

    [/autoit]

    Gruss Veronesi

  • Script unter anderem Benutzer ausführen

    • veronesi
    • 18. Mai 2011 um 11:04

    Naja, Du kannst mit dem RunAs natürlich auch ein Dos Kommando abschicken.
    Also z.B. den Befehl Reg Query \\HKLM\Software\Microsoft.......

    Das Problem wird dann aber sein, dass Du ja den Wert von dem Schlüssel lesen möchtest..... Aber du bekommst nur die PID zurück...

  • Script unter anderem Benutzer ausführen

    • veronesi
    • 18. Mai 2011 um 10:53

    Verwende RunAs in dem Du mit diesem Befehl ein zweites Script aufrufst. Dieses läuft dann unter dem anderen Benutzerkontext.
    Die beiden Programme können Daten mithilfe des $STDIN_CHILD und $STDOUT_CHILD austauschen!

  • EDID / DDC Daten direkt vom Monitor lesen

    • veronesi
    • 17. Mai 2011 um 14:00

    Manchmal ist die Lösung so nah.....
    Hier ein zweites Script, welches ohne die externe devcon.exe auskommt und auch keine Admin-Rechte benötigt und erst noch schneller ist :)
    Ansonsten die gleichen Einschränkungen / Features, wie die letzte UDF!

    Spoiler anzeigen
    [autoit]

    #cs
    ==================================================================================
    Function: _GetPnPScreens()
    Description: Rescan PnP Hardware and get all Registry Keys from PnP Screens
    Parameter(s): -

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

    Return Value(s): On Success - Return Array with registry keys, @ERROR = 0
    On Failure: - Return 0, @ERROR <> 0
    Author(s): Veronesi
    ==================================================================================
    #ce

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

    #include-once
    #include <WinAPI.au3>

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

    Func _GetPnPScreens()
    Local $aGPU[1] = [0]
    Local $aScreens[1] = [0]
    Local $aEnumDisplayDevices
    Local $iDevNum = 0
    Local $iGPU
    ShellExecuteWait(@WindowsDir & "\System32\DisplaySwitch.exe", "/extend") ;Force Windows 7 to read all screens!

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

    While 1
    $aEnumDisplayDevices = _WinAPI_EnumDisplayDevices("", $iDevNum) ;Find all GPU controllers
    If $aEnumDisplayDevices[3] = 0 Then ExitLoop ;When Flag = 0 the end of all GPUs found
    If Not BitAND($aEnumDisplayDevices[3], 4) Then ;Only if this device is no pseudo device (virtual screen)
    If BitAND($aEnumDisplayDevices[3], 1) Then ;Only if this device is part of the desktop
    $aGPU[0] += 1 ;Increment number of GPUs found
    ReDim $aGPU[$aGPU[0] + 1]
    $aGPU[$aGPU[0]] = $aEnumDisplayDevices[1]
    EndIf
    EndIf
    $iDevNum += 1
    WEnd
    If Not IsArray($aGPU) Then Return SetError(1, 1, 0)

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

    $iDevNum = 0
    For $iGPU = 1 To $aGPU[0] ;For each GPU... find all screens
    While 1
    $aEnumDisplayDevices = _WinAPI_EnumDisplayDevices($aGPU[$iGPU], $iDevNum)
    If $aEnumDisplayDevices[3] = 0 Then ExitLoop ;When Flag = 0 the end of all screens of this GPU found
    If Not BitAND($aEnumDisplayDevices[3], 4) Then ;Only if this device is no pseude device (virtual screen)
    If BitAND($aEnumDisplayDevices[3], 1) Then ;Only if this device is part of the desktop
    $aScreens[0] += 1 ;Increment number of screens found
    ReDim $aScreens[$aScreens[0] + 1]
    $aScreens[$aScreens[0]] = $aEnumDisplayDevices[4]
    EndIf
    EndIf
    $iDevNum += 1
    WEnd
    $iDevNum = 0
    Next
    If Not IsArray($aScreens) Then Return SetError(2, 2, 0)

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

    For $iDevNum = 1 To $aScreens[0]
    $aScreens[$iDevNum] = StringReplace(StringTrimLeft($aScreens[$iDevNum], 4), "#", "\")
    Next
    Return $aScreens
    EndFunc ;==>_GetPnPScreens

    [/autoit]

    Gruss Veronesi

  • EDID / DDC Daten direkt vom Monitor lesen

    • veronesi
    • 17. Mai 2011 um 11:30

    Hallo zusammen!

    So, ich habe nun eine Lösung, welche für mich funktioniert, und mit welcher ich die 8'000 Monitore testen kann.
    Leider werden die EDID Daten nicht direkt vom Monitor gelesen. Das wäre das schönste!

    Aber mit dem devcon.exe Tool von Microsoft kann ich doch wenigstens ein rescan der PnP Hardware durchführen und mir
    dann alle Hardware-IDs von den angeschlossenen Monitoren zurückgeben lassen.

    In diesen steht jeweils auch der Registry Schlüssel! (z.B. DISPLAY\HWP286E\5&F5BF76&0&UID41943312)
    Alles was zwischen diesen beiden Backslash steht, ist der Herstellername.
    Wenn die EDID Daten nicht gelesen werden konnte, steht dort DEFAULT_MONITOR

    Da ich (momentan) nur wissen muss, ob EDID Daten empfangen wurden und wer der Hersteller ist, reicht mir das aus!
    In meinen Test's hat diese Funktion immer den richtigen Wert zurückgeliefert - auch bei denen, bei welchen softMCCs versagt oder extrem lange gebraucht hat.

    Die Funktion gibt ein Array zurück.
    Index 0 = Anzahl gefundene Monitore
    Index 1 - .... = jeweiliger Registry Key.

    Dieses Array muss man dann nur noch nach DEFAULT_MONITOR durchsuchen, dann weiss man, ob von allen die EDID Daten gesendet wurden, oder nicht!
    Die Hersteller ID kann man dann auch herausparsen!
    Enjoy!

    Spoiler anzeigen
    [autoit]


    #cs
    ==================================================================================
    Function: _GetPnPScreens()
    Description: Rescan PnP Hardware and get all Registry Keys from PnP Screens
    Parameter(s): -

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

    Return Value(s): On Success - Return Array with registry keys, @ERROR = 0
    On Failure: - Return 0, @ERROR <> 0
    Author(s): Veronesi
    ==================================================================================
    #ce
    #RequireAdmin
    #include-once

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

    Func _GetPnPScreens()
    Local $PID, $Timer, $Read, $aTmp, $aRead[1] = [0], $iGetPnPScreens
    Local Const $Timeout = 5000

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

    If Not FileExists(@TempDir & "\devcon.exe") Then FileInstall("S:\UE_Std\TestPC\Tools\DevCon\i386\devcon.exe", @TempDir & "\devcon.exe", 1)
    RunWait('"' & @ComSpec & '" /c ' & @TempDir & '\devcon.exe rescan', @TempDir, @SW_HIDE) ;Rescan for new PnP hardware
    $PID = Run('"' & @ComSpec & '" /c ' & @TempDir & '\devcon.exe hwids Monitor*', @TempDir, @SW_HIDE, 0x2) ;Get IDs from all screens

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

    $Timer = TimerInit()
    While 1
    $Read &= StdoutRead($PID)
    If @error Or TimerDiff($Timer) > $Timeout Then ExitLoop
    Sleep(10)
    WEnd
    #cs
    $Read =
    DISPLAY\HWP286E\5&F5BF76&0&UID41943312
    Name: PnP-Monitor (Standard)
    Hardware ID's:
    MONITOR\HWP286E
    Compatible ID's:
    *PNP09FF
    DISPLAY\ENC2012\5&F5BF76&0&UID41943313
    Name: PnP-Monitor (Standard)
    Hardware ID's:
    MONITOR\ENC2012
    Compatible ID's:
    *PNP09FF
    2 matching device(s) found.
    #ce
    $aTmp = StringSplit($Read, @CRLF) ;Split into array
    For $iGetPnPScreens = 1 To UBound($aTmp) - 1
    If StringInStr($aTmp[$iGetPnPScreens], "DISPLAY\") Then ;Take only the registry string!
    $aTmp[$iGetPnPScreens] = StringStripWS($aTmp[$iGetPnPScreens], 8) ;Strip ALL spaces in the correct registry path (if any found)
    $aRead[0] += 1 ;Increment number of found screens
    ReDim $aRead[$aRead[0] + 1]
    $aRead[$aRead[0]] = $aTmp[$iGetPnPScreens]
    EndIf
    Next
    #cs
    When in registry path the string "DEFAULT_MONITOR" is found, then this monitor didn't sent any EDID datas!
    $aRead =
    [0] | 2
    [1] | DISPLAY\HWP286E\5&F5BF76&0&UID41943312
    [2] | DISPLAY\ENC2012\5&F5BF76&0&UID41943313
    #ce
    If $aRead[0] = 0 Then Return SetError(1, 1, 0)
    Return $aRead
    EndFunc ;==>_GetPnPScreens

    [/autoit]


    Gruss Veronesi

  • EDID / DDC Daten direkt vom Monitor lesen

    • veronesi
    • 16. Mai 2011 um 17:45

    Hier habe ich noch einen älteren Code gefunden, der EDID Daten lesen soll. 3. Post!

    Kann mir jemand sagen, ob das mit dem klappen könnte und kann den vielleicht sogar jemand in AutoIt übersetzen??????

    Veronesi

  • EDID / DDC Daten direkt vom Monitor lesen

    • veronesi
    • 16. Mai 2011 um 14:46

    So, leider habe ich keine mögliche Lösung gefunden.
    Auch im softMCCs Forum habe ich einen negativen Bescheid bezüglich einer ansteuerbaren DLL bekommen.

    Das ist sehr schade!

  • @Macro

    • veronesi
    • 14. Mai 2011 um 15:15

    Ok. Dann danke ich!

    Gruss Veronesi

  • @Macro

    • veronesi
    • 14. Mai 2011 um 14:43

    Hallo zusammen,

    ich habe eine Menge Strings, welche ein AutoIt Makro enthalten.
    Also z.B. Teststringblablabla@YEARWeitererString.....

    Das ganze ist ein STRING und wird aus einer Datenbank ausgelesen.
    Was ist nun die eleganteste und schnellste Methode, um alle AutoIt speziellen Makros zu finden und durch die wirklichen Makros zu ersetzen?

    Also der oben genannte String würde heute dann z.b. so lauten. Teststringblablabla2011WeitererString.....

    Ich möchte nicht unbedingt alles mit StringReplace abarbeiten müssen!
    Danke!

  • EDID / DDC Daten direkt vom Monitor lesen

    • veronesi
    • 12. Mai 2011 um 20:44

    Den kenne ich nicht!
    Ich schaue mir den mal an. Aber ein kurzer Blick auf der Homepage lässt mich vermuten, dass es wohl eher schwieriger wird, dies automatisiert und ohne Installation einzusetzen.

    Doch ich schaue mir das morgen oder übermorgen mal an!

  • EDID / DDC Daten direkt vom Monitor lesen

    • veronesi
    • 12. Mai 2011 um 19:35

    Hallo Progandy,

    vielen Dank.
    Das Tool habe ich schon getestet.
    Ich glaube, es liesst wirklich nur aus der Registry!

    Zudem funktioniert es leider bei meinem Monitortyp nicht.

    ==> Failed to extract the EDID record. <==

    Sehr schade. Danke trotzdem!

  • EDID / DDC Daten direkt vom Monitor lesen

    • veronesi
    • 12. Mai 2011 um 18:15

    Hier habe ich von einem Kollegen noch was bekommen.
    Eine DLL und eine Hilfe.

    Es ist von einem anderen Programm. Allerdings weiss ich nicht, wie es mit der Lizenz aussieht! Der Kollege hat das Programm gekauft......
    Falls ich das hier nicht posten darf, dann sollen die Mods die Anhänge löschen!

    Ansonsten: Vielleicht kann ja jemand mit dieser DLL was anfangen!
    Veronesi

    Dateien

    EDID-DLL.zip 23,2 kB – 364 Downloads
  • EDID / DDC Daten direkt vom Monitor lesen

    • veronesi
    • 10. Mai 2011 um 21:08

    Es sind ja nicht nur die Chefs...
    Ich könnte so eine Funktion auch gut in 2-3 anderen AutoIt Programmen gebrauchen.
    Und da die Benutzer der Programme diverse Kriterien der Monitore überprüfen sollen (auf ganz speziellen und spezifischen Hintergrundbildern) würde das offene Fenster von softMCCS nur stören!!!

    Wenn jemand dazu eine Idee hat, oder den Code doch irgendwie übersetzen kann, bin ich dankbar.
    Ansonsten muss ich mich damit abfinden, die 8'000 Monitore manuell zu prüfen!
    Aber mal schauen!

  • EDID / DDC Daten direkt vom Monitor lesen

    • veronesi
    • 10. Mai 2011 um 20:48

    Ja, es wird wohl schon gehen, es zu automatisieren.
    Aber die 8'000 Monitore, die damit geprüft werden sollen, werden mit diesem Tool falsch erkannt. (Stichproben bei 30 Monitoren)

    Zudem dauerte es zT sehr lange (mehrere Minuten) bis die Daten gelesen wurden.
    Manchmal geht's in wenigen Sekunden.....
    Manchmal läuft es auf unserem (frisch aufgesetzten) Win 7 x64 gar nicht.
    Dann muss man zwei oder dreimal neu booten, manchmal auch das softMCCS neu installieren - erst dann läuft es wieder!

    Alles in allem wollte ich eine AutoIt Lösung, damit alles integriert ist und keine "unbekannten" externe Programme genutzt werden müssen!

    Automatisieren ließe es sich vermutlich schon, aber die Zuverlässigkeit des gesamten Programmes hat die Chefs leider nicht überzeugt!

    Schade!!!

  • EDID / DDC Daten direkt vom Monitor lesen

    • veronesi
    • 10. Mai 2011 um 12:06

    Habe soeben im Forum gefragt :)

    Aber ich denke, ich kenne die Antwort von denen...
    Naja, fragen kostet nichts!

    Wenn trotzdem jemand das C Script übersetzen kann... Bin gerne Abnehmer davon ;))

    Veronesi

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™