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. chip

Beiträge von chip

  • Post mit proxy auth

    • chip
    • 18. Januar 2010 um 15:35

    Außer das eine leere body.html aufgeht passiert hier leider recht wenig.

  • Softwareverteilung Hephaistos [RELEASE]

    • chip
    • 18. Januar 2010 um 14:53

    Ups wusste das ich was vergessen habe. Die Wake.exe bekommst hier:http://masterbootrecord.de/english/wakeup.php

  • Post mit proxy auth

    • chip
    • 18. Januar 2010 um 14:31

    Hi,

    habe schon einige UDFs nun gefunden mit deren Hilfe man einen Post an eine Webseite schicken kann. Problem ist allerdings das diese alle weder selbst einen funktion haben um einen Proxy mit User und PW zu setzen noch HttpSetProxy berücksichtigen.

    Gib es irgendeine UDF die diese zwei Kriterien (Post + Proxyauth) erfüllt?

  • ObjCreate("ADSystemInfo") Fehler ohne AD

    • chip
    • 18. Januar 2010 um 11:56

    Nun dann wäre es doch sinniger anhand des Standartgateways zu entscheiden ob und wenn ja welcher DC genommen wird.

  • Hilfe eine einfache Progressbar erstellt mit Koda

    • chip
    • 18. Januar 2010 um 11:10

    Schau dir das Script aus der Hilfe mal an:


    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $progressbar1, $progressbar2, $button, $wait, $s, $msg, $m

    GUICreate("My GUI Progressbar", 220, 100, 100, 200)
    $progressbar1 = GUICtrlCreateProgress(10, 10, 200, 20)
    GUICtrlSetColor(-1, 32250); not working with Windows XP Style
    $progressbar2 = GUICtrlCreateProgress(10, 40, 200, 20, $PBS_SMOOTH)
    $button = GUICtrlCreateButton("Start", 75, 70, 70, 20)
    GUISetState()

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

    $wait = 20; wait 20ms for next progressstep
    $s = 0; progressbar-saveposition
    Do
    $msg = GUIGetMsg()
    If $msg = $button Then
    GUICtrlSetData($button, "Stop")
    For $i = $s To 100
    If GUICtrlRead($progressbar1) = 50 Then MsgBox(0, "Info", "The half is done...", 1)
    $m = GUIGetMsg()

    If $m = -3 Then ExitLoop

    If $m = $button Then
    GUICtrlSetData($button, "Next")
    $s = $i;save the current bar-position to $s
    ExitLoop
    Else
    $s = 0
    GUICtrlSetData($progressbar1, $i)
    GUICtrlSetData($progressbar2, (100 - $i))
    Sleep($wait)
    EndIf
    Next
    If $i > 100 Then
    ; $s=0
    GUICtrlSetData($button, "Start")
    EndIf
    EndIf
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>Example

    [/autoit]

    Wobei das mit FileInstall nicht gehen dürfte, weil diese Dateien vor dem Ausführen des eigentlichen Scriptes entpackt werden.

  • Softwareverteilung Hephaistos [RELEASE]

    • chip
    • 18. Januar 2010 um 10:22

    So hier nun der Angeküngite erste Release von Hephaistos. Hier nochmal die Beschreibung dazu aus dem Entwicklungsthread:

    Spoiler anzeigen

    Hallo,

    ich möchte euch kurz etwas vorstellen an dem ich bereits seit Anfang Juli arbeite und es nun auch bereits auf über 60 Rechnern erfolgreich im Einsatz habe.

    Es geht um ein von mir auf Hephaistos getaufte Softwareverteilung die vollkommen über Autoit realisiert wurde.

    Der Grund warum ich eine Eigenentwicklung gemacht habe und nicht ein bereits fertiges Produkt genommen habe lässt sich in drei Punkten darlegen:

    - Die meisten Softwareverteilungen kosten extrem viel und haben mehr Funktionen als ich brauche.
    - Ein Großteil benötigt zwingt eine ADS wodurch z.B. Laptops die nicht in der ADS sind aber im gleichen Netzwerk nicht versorgt werden können.
    - Bei vielen werden Router im Netzwerk nicht unterstützt.

    Aus diesen Gründen ist Hephaistos entstanden.

    Es ist eine Client-Server-Anwendung die es ermöglicht Autoitscirpte oder auch sonstige Automatisierungen wie MSI auf Rechner zu installieren.
    Auf den Clients muss lediglich eine install.exe ausgeführt werden die dann die aktuelle Version der Clientsoftware auf den Rechner installiert. Bei jedem Anmelden an dem Rechner wird geprüft ob eine neuere Version der Clientsoftware verfügbar ist und wenn ja wir diese im Hintergrund installiert. Von diese Aktualisierung bekommt der Benutzer nichts mit was es ermöglich auch im laufenden Alltagsbetrieb neue Versionen des Clients zu verteilen.

    Die Clients melden sich nach der Anmeldung beim Server und falls sie dort noch nicht bekannt sind landen sie in einer neutralen Gruppe. Der Rechner wird unter anderem Anhang seine MAC Identifiziert wodurch es auch ohne Probleme möglich ist den Namen eines Rechners zu ändern ohne das es Probleme mit der Installierten Software gibt.

    Es können beliebig viele Gruppen, denen Rechner zugewiesen werden, erstellt werden. Software kann sowohl Gruppen als auch nur einzelnen Rechner zugewiesen werden.

    Die zu verteilenden Software wird automatisch durch die Adminkonsole erkannt. Wobei hier ebenfalls automatisch darauf hingewiesen wir ob nur ein Installations- oder nur eine Deinstallationscript vorhanden ist. Oder eben auch ob man es sowohl deinstallieren auch als installieren kann oder keines von beidem. Das ganze wird durch eindeutige Icons vor den Namen der Programme angezeigt und ist sofort auf einen Blick überschaubar.

    Es ist auch möglich einzelnen Rechner oder ganze Gruppen Herunterzufahren, Neuzustarten oder Aufzuwecken.

    Es ist auch Möglich zu aktivieren das nach dem Neustart der Rechner ein bestimmter Account automatisch eingeloggt wird. Allerdings ist das ein Punkt der leider nur unschön über die ADS zu lösen ist indem man dort ein entsprechendes Template hinterlegt dem man dann einen User zuweißt. Diese Funktion ist also nicht wirklich Massentauchglich.

    Zurzeit bin ich noch dabei die Möglichkeit einzubauen das man Regeln definieren wie z.B. das wenn ein Programm zur Installation markiert ist ein anderes zwingend auch mit installiert werden muss usw.


    Das ganze läuft zwar schon wie gesagt Erfolgreich auf über 60 Rechner und diese wurden auch komplett nur über Hephaistos mit Software versorgt aber es sind noch einige Ideen und Punkte die ich noch ändern will/muss.

    Wie bei jeder Software braucht es erstmal ein klein wenig Arbeit zum einrichten aber danach ist die Verteilung/Aktuallisierung von Hepheistos zu 99% automatisch durchführbar. Es ist zu sagen das das ganze aktuell allerdings noch mit einigen RunAs Befehlen arbeiten in der auch die ADS benötigt wird von daher ist es nur bei vorhandensein einer ADS lauffähig (Wird noch geändert). Es muss allerdings nur der Rechner der als Server benutzt werden soll in einer ADS sein die Clientrechner müssen dies nicht!

    So hier nun die Anleitung zur Serverinstallation:

    1. Erstellt auf dem Rechner der als Server arbeiten soll eine Netzwerkfreigabe auf einen Ordner
    2. Erstellt einen Benutzer der Zugriff auf diese Freigabe und gleichzeitig auch Adminrechte auf den zu versorgenden Clients hat.
    3. In das Freigabeverzeichniss kommen folgende Dateien (Achtung vorher die Variablen noch anpassen sonst geht nichts ;))

    run.exe

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: Kai Forstner (chip)

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

    Copyright (C) 2010 Kai Forstner (chip)

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

    This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

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

    This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

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

    You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>.

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

    #ce ----------------------------------------------------------------------------

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

    $admin = "admin"
    $passwort = "adminpw"
    $ads = "ads"
    $clientinstall = "C:\Programme\install\"

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

    RunAs($admin, $ads, $passwort, 1, $clientinstall & "client.exe")

    [/autoit]



    client.exe

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: Kai Forstner (chip)

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

    Copyright (C) 2010 Kai Forstner (chip)

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

    This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

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

    This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

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

    You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>.

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

    #ce ----------------------------------------------------------------------------

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

    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    #include <_GetIntersection.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $admin = "admin"
    $passwort = "admin"
    $ads = "ads"
    $clientinstall = "C:\Programme\install\"
    $serverip = "193.196.72.5"
    $freigabe = "ProgrammeAutoit$"

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

    $iWidth = @DesktopWidth
    $iHeight = @DesktopHeight
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("", $iWidth, $iHeight, 0, 0, $WS_POPUP)
    $Label1 = GUICtrlCreateLabel("", $iWidth / 2 - 200, $iHeight / 2 - 50, 400, 36, $SS_CENTER)
    GUICtrlSetFont(-1, 20, 400, 0, "Arial")
    $Progress1 = GUICtrlCreateProgress($iWidth / 2 - 150, $iHeight / 2 - 10, 300, 17)
    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###

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

    Func _GetMACFromIP($sIP = @IPAddress1, $mode = 1)
    Local $MAC, $MACSize
    Local $i, $s, $r, $iIP
    $MAC = DllStructCreate("byte[6]")
    $MACSize = DllStructCreate("int")
    DllStructSetData($MACSize, 1, 6)
    $r = DllCall("Ws2_32.dll", "int", "inet_addr", _
    "str", $sIP)
    $iIP = $r[0]
    $r = DllCall("iphlpapi.dll", "int", "SendARP", "int", $iIP, "int", 0, "ptr", DllStructGetPtr($MAC), "ptr", DllStructGetPtr($MACSize))
    $s = ""
    If $mode = 0 Then
    For $i = 0 To 5
    $s &= Hex(DllStructGetData($MAC, 1, $i + 1), 2)
    Next

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

    ElseIf $mode = 1 Then
    For $i = 0 To 5
    If $i Then $s = $s & ":"
    $s = $s & Hex(DllStructGetData($MAC, 1, $i + 1), 2)
    Next
    ElseIf $mode = 2 Then
    For $i = 0 To 5
    If $i Then $s = $s & "-"
    $s = $s & Hex(DllStructGetData($MAC, 1, $i + 1), 2)
    Next
    EndIf
    Return $s
    EndFunc ;==>_GetMACFromIP

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

    Do
    Local $macadresse = ""
    $macadresse = _GetMACFromIP()
    Until $macadresse <> ""

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

    $text = @IPAddress1 & "#" & $macadresse & "#" & @ComputerName

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

    $Empfaenger_IP = $serverip
    $Port = 33891

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

    TCPStartup()
    $ConnectedSocket = TCPConnect($Empfaenger_IP, $Port)
    $connecttimmer = 100
    Do
    $recv = TCPRecv($ConnectedSocket, 2048)
    Sleep(100)

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

    If $connecttimmer = 0 Then
    Exit
    EndIf
    $connecttimmer = $connecttimmer - 1
    Until $recv <> ""

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

    BlockInput(1)

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

    TCPSend($ConnectedSocket, $text)
    Sleep(2000)

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

    TCPShutdown()

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

    DriveMapAdd("X:", "\\" & $serverip & "\" & $freigabe, 8, $ads & "\" & $admin, $passwort)

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

    DriveMapGet("N:")

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

    $localini = IniRead($clientinstall & "client.ini", "Client", "Version", "0")
    $remotini = IniRead("\\" & $serverip & "\" & $freigabe & "\client.ini", "Client", "Version", "0")

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

    If $localini <> $remotini Then
    $pid = RunAsWait($admin, $ads, $passwort, 0, "\\" & $serverip & "\" & $freigabe & "\install.exe")
    EndIf

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

    GUICtrlSetData($Progress1, 20)
    GUICtrlSetData($Label1, "Software wird überprüft")
    GUISetState(@SW_SHOW,$Form1)

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

    $sSQliteDll = _SQLite_Startup()
    $remotedb = _SQLite_Open('X:\datenbank.db')

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

    Dim $Query = "", $Zeile = ""
    _SQLite_Query($remotedb, "SELECT kategorie FROM Rechner WHERE mac = '" & $macadresse & "'", $Query)
    While _SQLite_FetchData($Query, $Zeile) = $SqlITE_OK
    For $element In $Zeile

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

    Dim $programmQuery = "", $programmZeile = ""
    _SQLite_Query($remotedb, "SELECT programmname FROM Zuweisenkategorie WHERE kategorie = '" & $element & "'", $programmQuery)

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

    Dim $count = 0
    Dim $programme[1]
    While _SQLite_FetchData($programmQuery, $programmZeile) = $SqlITE_OK
    For $programmelement In $programmZeile
    ReDim $programme[$count + 1]
    $programme[$count] = $programmelement
    $count = $count + 1
    Next
    WEnd

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

    Dim $programmQuery = "", $programmZeile = ""
    _SQLite_Query($remotedb, "SELECT programmname FROM Zuweisenrechner WHERE rechnername = '" & @ComputerName & "'", $programmQuery)

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

    While _SQLite_FetchData($programmQuery, $programmZeile) = $SqlITE_OK
    For $programmelement In $programmZeile
    ReDim $programme[$count + 1]
    $programme[$count] = $programmelement
    $count = $count + 1
    Next
    WEnd

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

    Next
    WEnd

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

    _SQLite_Close($remotedb)

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

    $localdb = _SQLite_Open($clientinstall & 'local.db')

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

    $strCREATE = _
    "CREATE TABLE [Programme] (" & _
    "[id] INTEGER PRIMARY KEY NOT NULL," & _
    "[programmname] VARCHAR[50] NULL)"
    If _SQLite_Exec($localdb, $strCREATE) <> $SqlITE_OK Then

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

    EndIf

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

    Dim $localprogrammQuery = "", $localprogrammZeile = ""
    _SQLite_Query($localdb, "SELECT programmname FROM Programme WHERE id > 0 ", $localprogrammQuery)

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

    Dim $count = 0
    Dim $localprogramme[1]
    While _SQLite_FetchData($localprogrammQuery, $localprogrammZeile) = $SqlITE_OK
    For $localprogrammelement In $localprogrammZeile
    ReDim $localprogramme[$count + 1]
    $localprogramme[$count] = $localprogrammelement
    $count = $count + 1
    Next
    WEnd

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

    _SQLite_Close($localdb)

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

    Dim $install[1]
    Dim $uninstall[2]
    $ret = _GetIntersection($programme, $localprogramme, 0, ' ')

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

    GUICtrlSetData($Progress1, 40)
    GUICtrlSetData($Label1, "Software wird deinstalliert")

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

    For $i = 0 To UBound($ret) - 1
    If $ret[$i][2] <> '' Then
    $pid = RunAsWait($admin, "ads", $passwort, 0, "\\" & $serverip & "\" & $freigabe & "\" & $ret[$i][2] & "\uninstall.exe")
    ProcessWaitClose($pid)

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

    $localdb = _SQLite_Open($clientinstall & 'local.db')
    _SQLite_Exec(-1, "DELETE FROM Programme WHERE programmname = '" & $ret[$i][2] & "'")
    _SQLite_Close($localdb)
    EndIf
    Next

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

    GUICtrlSetData($Progress1, 80)
    GUICtrlSetData($Label1, "Software wird installiert")
    BlockInput(0)
    For $i = 0 To UBound($ret) - 1
    If $ret[$i][1] <> '' Then
    $pid = RunAsWait($admin, "ads", $passwort, 0, "\\" & $serverip & "\" & $freigabe & "\" & $ret[$i][1] & "\install.exe")
    ProcessWaitClose($pid)

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

    $localdb = _SQLite_Open($clientinstall & 'local.db')
    _SQLite_Exec(-1, "INSERT INTO Programme (id, programmname) VALUES (NULL, '" & $ret[$i][1] & "')")
    _SQLite_Close($localdb)
    EndIf
    Next
    BlockInput(1)

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

    GUICtrlSetData($Progress1, 100)
    GUICtrlSetData($Label1, "Aktuallisierung wird beendet")

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

    _SQLite_Shutdown()
    DriveMapDel("X:")
    BlockInput(0)

    [/autoit]

    scratch.bat

    Spoiler anzeigen
    Code
    ping -n 3 127.0.0.1 > NUL
    :loop
    del "C:\Dokumente und Einstellungen\All Users\Startmen\Programme\Autostart\install.exe"
    if exist ""C:\Dokumente und Einstellungen\All Users\Startmen\Programme\Autostart\install.exe"" goto loop

    client.ini

    Spoiler anzeigen
    [autoit]

    [Client]
    Version=1.1.7

    [/autoit]

    Ich weiß ist bisschen Arbeit aber wie gesagt braucht ihr das nur einmal machen und dann nie wieder :).

    4. Jetzt kommt das Herzstück, der eigentliche Server. Startet folgende Datei (Variablen anpassen nicht vergessen) auf dem Server.

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: Kai Forstner (chip)

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

    Copyright (C) 2010 Kai Forstner (chip)

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

    This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

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

    This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

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

    You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>.

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

    #ce ----------------------------------------------------------------------------

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

    #include <SQLite.au3>
    #include <SQLite.dll.au3>

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

    $freigabe = "H:\Packages\ProgrammeAutoit\"

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

    Local $sSQliteDll
    $sSQliteDll = _SQLite_Startup()
    If @error > 0 Then
    MsgBox(16, "SQLite Fehler", "SQLite.dll konnte nicht geladen werden!")
    Exit -1
    EndIf
    ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CR)

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

    _SQLite_Open($freigabe & 'datenbank.db')

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

    $strCREATE = _
    "CREATE TABLE [Rechner] (" & _
    "[id] INTEGER PRIMARY KEY NOT NULL," & _
    "[ip] VARCHAR[15]NULL," & _
    "[mac] VARCHAR[17] NULL," & _
    "[name] VARCHAR[50] NULL," & _
    "[kategorie] VARCHAR[50] NULL)"
    If _SQLite_Exec(-1, $strCREATE) <> $SQLITE_OK Then

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

    EndIf

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

    $strCREATE = _
    "CREATE TABLE [Zuweisenrechner] (" & _
    "[id] INTEGER PRIMARY KEY NOT NULL," & _
    "[programmname] VARCHAR[50] NULL," & _
    "[rechnername] VARCHAR[50] NULL)"
    If _SQLite_Exec(-1, $strCREATE) <> $SQLITE_OK Then

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

    EndIf

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

    $strCREATE = _
    "CREATE TABLE [Zuweisenkategorie] (" & _
    "[id] INTEGER PRIMARY KEY NOT NULL," & _
    "[programmname] VARCHAR[50] NULL," & _
    "[kategorie] VARCHAR[50] NULL)"
    If _SQLite_Exec(-1, $strCREATE) <> $SQLITE_OK Then

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

    EndIf

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

    _SQLite_Close()
    _SQLite_Shutdown()

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

    TCPStartup()
    $MainSocket = TCPListen(@IPAddress1, 33891, 100)

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

    While 1

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

    While 1
    $ConnectedSocket = TCPAccept($MainSocket)
    If $ConnectedSocket <> -1 Then ExitLoop
    Sleep(100)
    WEnd

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

    TCPSend($ConnectedSocket, "1")

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

    Do
    $recv = TCPRecv($ConnectedSocket, 2048)
    Sleep(100)
    Until $recv <> ""

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

    _SQLite_Startup()
    _SQLite_Open($freigabe & '\datenbank.db')

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

    $empfang = StringSplit($recv, "#")

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

    Local $hQuery, $hZeile = ""
    _SQLite_Query(-1, "SELECT ip,name FROM Rechner WHERE mac = '" & $empfang[2] & "'", $hQuery)
    _SQLite_FetchData($hQuery, $hZeile)
    _SQLite_QueryFinalize($hQuery)

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

    $anzahl = UBound($hZeile)

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

    If $anzahl < 2 Then
    _SQLite_Exec(-1, "INSERT INTO Rechner (id, ip, mac, name, kategorie) VALUES (NULL, '" & $empfang[1] & "', '" & $empfang[2] & "', '" & $empfang[3] & "', 'keine')")
    Else
    _SQLite_Exec(-1, "UPDATE Rechner SET ip = '" & $empfang[1] & "', name = '" & $empfang[3] & "' WHERE mac ='" & $empfang[2] & "'")
    EndIf

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

    _SQLite_Close()
    _SQLite_Shutdown()

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

    WEnd
    TCPShutdown()

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

    _SQLite_Close()
    _SQLite_Shutdown()

    [/autoit]

    So das wars der Server ist nun bereit und wartet auf Clients.


    Die Clientinstallation:

    Die Clientinstalltion ist recht einfach. Nach anpassen der Variablen einfach folgende Datei auf dem Client starten. Nach einem neuanmelden am Rechner ist er bereit zum Softwareerhalt. Ich persönlich habe die Datei einfach eimal compiliert und im Rohimage (das ich zum schnellen Rechnerinstallieren nutze) in den Autostart gelegt. Hat einfach den Vorteil das ein neue Rechner immer direkt auch soweit ist Software zu bekommen ohne das ich per Hand noch etwas machen muss. Durch die scratch.bat die wir in die Freigabe bei der Serverinstallation gelegt haben wird die isntall.exe dann auch wieder automatisch nach der installation aus dem Autostart genommen.

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: Kai Forstner (chip)

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

    Copyright (C) 2010 Kai Forstner (chip)

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

    This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

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

    This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

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

    You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>.

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

    #ce ----------------------------------------------------------------------------

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

    $admin = "admin"
    $passwort = "adminpw"
    $ads = "ads"
    $clientinstall = "C:\Programme\install\"
    $serverip = "193.196.72.5"
    $freigabe = "ProgrammeAutoit$"

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

    $PID = ProcessExists("client.exe")
    If $PID Then ProcessClose($PID)

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

    DriveMapAdd("X:", "\\" & $serverip & "\" & $freigabe, 8, $ads & "\" & $admin, $passwort)
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Autoit", "REG_SZ", $clientinstall & "run.exe")
    FileCopy("\\" & $serverip & "\" & $freigabe & "\run.exe", $clientinstall & "run.exe", 9)
    FileCopy("\\" & $serverip & "\" & $freigabe & "\client.exe", $clientinstall & "client.exe", 9)
    FileCopy("\\" & $serverip & "\" & $freigabe & "\scratch.bat", $clientinstall & "scratch.bat", 9)
    FileCopy("\\" & $serverip & "\" & $freigabe & "\client.ini", $clientinstall & "client.ini", 9)
    DriveMapDel("X:")
    RunAs($admin, $ads, $passwort, 0, $clientinstall & "scratch.bat")

    [/autoit]


    So das wars, der Sever läuft und die Clients sind bereit um Software zu erhalten. Doch nun werden sich wohl sicher einige Fragen wie man den nun die Software zuweist. Das geht recht einfach. Erstellt in der Freigabe für jedes Programm jeweils einen Ordner z.B. "Office 2007", "Adobe Reader" usw. In diese Ordner kommen nun die entsprechenden Setupdateien der Programme und euer Autoitinstallationsscript (Wie man so eines erstellt brauche ich wohl nicht erklären, sollte bekannt sein). Zu beachten ist lediglich das Script install.exe (bzw. wenn ihr es auch wieder deinstallieren wollt noch die datei uninstall.exe) zu nennen.

    Nun könnt ihr über das Admininteface Rechner in Gruppen anordner, Software der ganzen Gruppen zuweißen, Software nur einzelnen Rechner zuweißen, Rechner neu starten usw.

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: Kai Forstner (chip)

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

    Copyright (C) 2010 Kai Forstner (chip)

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

    This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

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

    This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

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

    You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>.

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

    #ce ----------------------------------------------------------------------------

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

    #NoTrayIcon
    #include <File.au3>
    #include <GuiComboBox.au3>
    #include <GuiTreeView.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>

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

    $serverip = "193.196.72.5"
    $freigabe = "ProgrammeAutoit$"

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

    DriveMapAdd("X:", "\\" & $serverip & "\" & $freigabe)

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

    #Region ### START Koda GUI section ### Form=
    $Form = GUICreate("Softwareverteilung Hephaistos", 985, 889, 167, 53)
    $RechnerTreeView = GUICtrlCreateTreeView(8, 8, 353, 873, -1, $WS_EX_CLIENTEDGE)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
    $Rechnername = GUICtrlCreateLabel("", 376, 16, 116, 24)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    GUICtrlSetState(-1, $GUI_HIDE)
    $Gruppe = GUICtrlCreateCombo("", 376, 48, 145, 25)
    GUICtrlSetState(-1, $GUI_HIDE)
    $Gruppeaendern = GUICtrlCreateButton("ändern", 528, 47, 75, 25, 0)
    GUICtrlSetState(-1, $GUI_HIDE)
    $programmtree = GUICtrlCreateTreeView(384, 88, 329, 617, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES, $WS_GROUP, $WS_TABSTOP))
    GUICtrlSetState(-1, $GUI_HIDE)
    GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM)
    $nGruppe = GUICtrlCreateButton("neue Gruppe", 608, 47, 75, 25, 0)
    GUICtrlSetState(-1, $GUI_HIDE)
    $Speichern = GUICtrlCreateButton("speichern", 720, 88, 75, 25, 0)
    GUICtrlSetState(-1, $GUI_HIDE)
    $Pic1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\g-admin\Desktop\autoit3\loader.gif", 496, 288, 100, 100, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    GUICtrlSetState(-1, $GUI_HIDE)
    $Rechnerneustart = GUICtrlCreateButton("Neustarten", 857, 77, 115, 25, 0)
    GUICtrlSetState(-1, $GUI_HIDE)
    $Rechnerherunterfahren = GUICtrlCreateButton("Herunterfahren", 857, 107, 115, 25, 0)
    GUICtrlSetState(-1, $GUI_HIDE)
    $Rechnerwakeup = GUICtrlCreateButton("Wakeup", 857, 47, 115, 25, 0)
    GUISetState(@SW_SHOW, $Form)
    #EndRegion ### END Koda GUI section ###

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

    Func _dbopen()
    Local $sSQliteDll
    $sSQliteDll = _SQLite_Startup()
    If @error > 0 Then
    MsgBox(16, "SQLite Fehler", "SQLite.dll konnte nicht geladen werden!")
    Exit -1
    EndIf

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

    _SQLite_Open('X:\datenbank.db')
    EndFunc ;==>_dbopen

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

    Func _dbclose()
    _SQLite_Close()
    _SQLite_Shutdown()
    EndFunc ;==>_dbclose

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

    Func _Programmliste($rechner, $typ)
    $Programmliste = _FileListToArray("X:", "*", 2)
    If @error = 1 Then
    MsgBox(0, "", "Keine Programme gefunden")
    $Programmliste[0] = 0
    EndIf

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

    Dim $Programmitem[1]
    $x = 0
    GUICtrlSetState($programmtree, $GUI_HIDE)
    GUICtrlSetState($Pic1, $GUI_SHOW)
    _GUICtrlTreeView_BeginUpdate($programmtree)
    _GUICtrlTreeView_DeleteAll($programmtree)

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

    $listcount = 0
    For $element In $Programmliste
    If $listcount > 0 Then
    ReDim $Programmitem[$x + 1]
    $Programmitem[$x] = _GUICtrlTreeView_Add($programmtree, 0, $element)

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

    $uninstall = False
    $install = False

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

    If FileExists("\\" & $serverip & "\" & $freigabe & "\" & $element & "\uninstall.exe") Then
    $uninstall = True
    EndIf

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

    If FileExists("\\" & $serverip & "\" & $freigabe & "\" & $element & "\install.exe") Then
    $install = True
    EndIf

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

    If $install = False And $uninstall = False Then
    _GUICtrlTreeView_SetIcon($programmtree, $Programmitem[$x], "shell32.dll", 27)
    ElseIf $install = False Then
    _GUICtrlTreeView_SetIcon($programmtree, $Programmitem[$x], "shell32.dll", 24)
    ElseIf $uninstall = False Then
    _GUICtrlTreeView_SetIcon($programmtree, $Programmitem[$x], "shell32.dll", 31)
    Else
    _GUICtrlTreeView_SetIcon($programmtree, $Programmitem[$x], "shell32.dll", 13)
    EndIf
    _dbopen()
    Dim $programmlisteQuery = "", $programmlisteZeile = ""

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

    If $typ = "rechner" Then
    _SQLite_Query(-1, "SELECT id FROM Zuweisenrechner WHERE programmname = '" & $element & "' AND rechnername = '" & $rechner & "'", $programmlisteQuery)
    Else
    _SQLite_Query(-1, "SELECT id FROM Zuweisenkategorie WHERE programmname = '" & $element & "' AND kategorie = '" & $rechner & "'", $programmlisteQuery)
    EndIf
    While _SQLite_FetchData($programmlisteQuery, $programmlisteZeile) = $SqlITE_OK
    For $programmlisteelement In $programmlisteZeile
    _GUICtrlTreeView_SetChecked($programmtree, $Programmitem[$x])
    Next
    WEnd
    _dbclose()
    $x = $x + 1

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

    Else
    $listcount = 1
    EndIf
    Next
    _GUICtrlTreeView_EndUpdate($programmtree)
    GUICtrlSetState($programmtree, $GUI_SHOW)
    GUICtrlSetState($Pic1, $GUI_HIDE)

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

    Return $Programmitem
    EndFunc ;==>_Programmliste

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

    Func _Install($rechner, $programm)
    Dim $id = $rechner

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

    _dbopen()
    Dim $installQuery = "", $installZeile = ""
    _SQLite_Query(-1, "SELECT id FROM Rechner WHERE name = '" & $rechner & "'", $installQuery)
    While _SQLite_FetchData($installQuery, $installZeile) = $SqlITE_OK
    For $installelement In $installZeile
    $id = $installelement
    Next
    WEnd

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

    If $id > 0 Then

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

    _SQLite_Exec(-1, "INSERT INTO Zuweisenrechner(id, programmname, rechnername) VALUES (NULL, '" & $programm & "', '" & $rechner & "')")

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

    Else
    _SQLite_Exec(-1, "INSERT INTO Zuweisenkategorie(id, programmname, kategorie) VALUES (NULL, '" & $programm & "', '" & $rechner & "')")
    EndIf

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

    _dbclose()

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

    EndFunc ;==>_Install

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

    Func _Gruppe($name)
    Dim $wert
    _dbopen()
    Dim $poolQuery = "", $poolZeile = ""
    _SQLite_Query(-1, "SELECT kategorie FROM Rechner WHERE name = '" & $name & "'", $poolQuery)
    While _SQLite_FetchData($poolQuery, $poolZeile) = $SqlITE_OK
    For $poolelement In $poolZeile
    $wert = $poolelement
    Next
    WEnd
    _dbclose()
    Return $wert
    EndFunc ;==>_Gruppe

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

    Func _Rechnertreeviewupdate()
    Dim $count = 2
    Dim $rkategorie[1]

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

    _GUICtrlTreeView_BeginUpdate($RechnerTreeView)
    _GUICtrlTreeView_DeleteAll($RechnerTreeView)
    GUICtrlSetData($Gruppe, "")
    Dim $poolQuery = "", $poolZeile = ""
    _SQLite_Query(-1, "SELECT kategorie FROM Rechner WHERE id > 0 GROUP BY kategorie", $poolQuery)
    While _SQLite_FetchData($poolQuery, $poolZeile) = $SqlITE_OK

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

    For $poolelement In $poolZeile
    ReDim $rkategorie[$count + 1]

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

    $rkategorie[$count] = $poolelement
    _GUICtrlComboBox_AddString($Gruppe, $poolelement)
    $topitem = _GUICtrlTreeView_Add($RechnerTreeView, 0, $poolelement)

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

    Dim $rechnerQuery = "", $rechnerZeile = ""
    _SQLite_Query(-1, "SELECT name FROM Rechner WHERE kategorie = '" & $poolelement & "'", $rechnerQuery)
    While _SQLite_FetchData($rechnerQuery, $rechnerZeile) = $SqlITE_OK
    For $rechnerelement In $rechnerZeile
    _GUICtrlTreeView_AddChild($RechnerTreeView, $topitem, $rechnerelement)
    Next
    WEnd
    $count = $count + 1
    Next
    WEnd
    _GUICtrlTreeView_EndUpdate($RechnerTreeView)
    Return $rkategorie
    EndFunc ;==>_Rechnertreeviewupdate

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

    Func _Rechnerneustart($typ, $name)
    If $typ = "rechner" Then
    RunWait(@ComSpec & " /c shutdown -r -f -m \\" & $name)
    MsgBox(64, "Neustart", "Der Rechner " & $name & " wurde neu gestartet.", 2)
    Else
    _dbopen()
    Dim $rechnerQuery = "", $rechnerZeile = ""
    _SQLite_Query(-1, "SELECT name FROM Rechner WHERE kategorie = '" & $name & "'", $rechnerQuery)
    While _SQLite_FetchData($rechnerQuery, $rechnerZeile) = $SqlITE_OK
    For $rechnerelement In $rechnerZeile
    RunWait(@ComSpec & " /c shutdown -r -f -m \\" & $rechnerelement)
    Next
    WEnd
    _dbclose()
    MsgBox(64, "Neustart", "Der Rechner der Gruppe " & $name & " wurden neu gestartet.", 2)
    EndIf
    EndFunc ;==>_Rechnerneustart

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

    Func _Rechnerherunterfahren($typ, $name)
    If $typ = "rechner" Then
    RunWait(@ComSpec & " /c shutdown -s -f -m \\" & $name)
    MsgBox(64, "Herunterfahren", "Der Rechner " & $name & " wurde heruntergefahren.", 2)
    Else
    _dbopen()
    Dim $rechnerQuery = "", $rechnerZeile = ""
    _SQLite_Query(-1, "SELECT name FROM Rechner WHERE kategorie = '" & $name & "'", $rechnerQuery)
    While _SQLite_FetchData($rechnerQuery, $rechnerZeile) = $SqlITE_OK
    For $rechnerelement In $rechnerZeile
    RunWait(@ComSpec & " /c shutdown -s -f -m \\" & $rechnerelement)
    Next
    WEnd
    _dbclose()
    MsgBox(64, "Herunterfahren", "Der Rechner der Gruppe " & $name & " wurden heruntergefahren.", 2)
    EndIf
    EndFunc ;==>_Rechnerherunterfahren

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

    Func _Rechnerwakeup($typ, $name)
    If $typ = "rechner" Then
    _dbopen()
    Dim $rechnerQuery = "", $rechnerZeile = ""
    _SQLite_Query(-1, "SELECT mac FROM Rechner WHERE name = '" & $name & "'", $rechnerQuery)
    While _SQLite_FetchData($rechnerQuery, $rechnerZeile) = $SqlITE_OK
    For $rechnerelement In $rechnerZeile
    $mac = StringReplace($rechnerelement, ":", "-")
    Dim $rechnerQuery = "", $rechnerZeile = ""
    _SQLite_Query(-1, "SELECT ip FROM Rechner WHERE name = '" & $name & "'", $rechnerQuery)
    While _SQLite_FetchData($rechnerQuery, $rechnerZeile) = $SqlITE_OK
    For $rechnerelement In $rechnerZeile
    $broad = StringSplit($rechnerelement, ".")
    RunWait(@ComSpec & " /c " & '"' & @ScriptDir & "\wake.exe" & '"' & " " & $mac & " " & $broad[1] & "." & $broad[2] & "." & $broad[3] & ".255")
    Next
    WEnd

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

    Next
    WEnd
    _dbclose()
    MsgBox(64, "Wakeup", "Der Rechner " & $name & " wurde aufgeweckt.", 2)
    Else
    _dbopen()
    Dim $rechnerQuery = "", $rechnerZeile = ""
    _SQLite_Query(-1, "SELECT mac FROM Rechner WHERE kategorie = '" & $name & "'", $rechnerQuery)
    While _SQLite_FetchData($rechnerQuery, $rechnerZeile) = $SqlITE_OK
    For $rechnerelement In $rechnerZeile

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

    $mac = StringReplace($rechnerelement, ":", "-")
    Dim $wakeupQuery = "", $wakeupZeile = ""
    _SQLite_Query(-1, "SELECT ip FROM Rechner WHERE mac = '" & $rechnerelement & "'", $wakeupQuery)
    While _SQLite_FetchData($wakeupQuery, $wakeupZeile) = $SqlITE_OK
    For $wakeupelement In $wakeupZeile
    $broad = StringSplit($wakeupelement, ".")
    RunWait(@ComSpec & " /c " & '"' & @ScriptDir & "\wake.exe" & '"' & " " & $mac & " " & $broad[1] & "." & $broad[2] & "." & $broad[3] & ".255")
    Next
    WEnd

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

    Next
    WEnd
    _dbclose()
    MsgBox(64, "Wakeup", "Die Rechner der Gruppe " & $name & " wurden aufgeweckt.", 2)
    EndIf
    EndFunc ;==>_Rechnerwakeup

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

    _dbopen()
    $rkategorie = _Rechnertreeviewupdate()
    _dbclose()

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

    $altrechnername = "alt"
    While 1
    $RechnerTreeView_selected = GUICtrlRead($RechnerTreeView, 1)

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

    $rechnerkategorie = False
    For $poolelement In $rkategorie
    If $poolelement = $RechnerTreeView_selected Then
    $rechnerkategorie = True
    ExitLoop
    EndIf
    Next

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

    If $RechnerTreeView_selected = "0" Then

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

    ElseIf $altrechnername = $RechnerTreeView_selected Then

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

    ElseIf $rechnerkategorie = False Then
    $typ = "rechner"

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

    $altrechnername = $RechnerTreeView_selected

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

    $Programmitem = _Programmliste($altrechnername, $typ)

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

    GUICtrlSetData($Rechnername, $RechnerTreeView_selected)
    GUICtrlSetState($Rechnername, $GUI_SHOW)

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

    $rechnergruppe = _Gruppe($RechnerTreeView_selected)
    _GUICtrlComboBox_SelectString($Gruppe, $rechnergruppe)
    GUICtrlSetState($Gruppe, $GUI_SHOW)
    GUICtrlSetState($Gruppeaendern, $GUI_SHOW)
    GUICtrlSetState($programmtree, $GUI_SHOW)
    GUICtrlSetState($nGruppe, $GUI_SHOW)
    GUICtrlSetState($Speichern, $GUI_SHOW)
    GUICtrlSetState($Rechnerherunterfahren, $GUI_SHOW)
    GUICtrlSetState($Rechnerneustart, $GUI_SHOW)
    GUICtrlSetState($Rechnerwakeup, $GUI_SHOW)

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

    Else
    $typ = "kategorie"

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

    $altrechnername = $RechnerTreeView_selected

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

    $Programmitem = _Programmliste($altrechnername, $typ)

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

    GUICtrlSetData($Rechnername, $RechnerTreeView_selected)
    GUICtrlSetState($Rechnername, $GUI_SHOW)
    GUICtrlSetState($Gruppe, $GUI_HIDE)
    GUICtrlSetState($Gruppeaendern, $GUI_HIDE)
    GUICtrlSetState($programmtree, $GUI_SHOW)
    GUICtrlSetState($nGruppe, $GUI_HIDE)
    GUICtrlSetState($Speichern, $GUI_SHOW)
    GUICtrlSetState($Rechnerherunterfahren, $GUI_SHOW)
    GUICtrlSetState($Rechnerneustart, $GUI_SHOW)
    GUICtrlSetState($Rechnerwakeup, $GUI_SHOW)
    EndIf

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

    $nMsg = GUIGetMsg()

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

    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    DriveMapDel("X:")
    Exit
    Case $nGruppe
    $neueGruppe = InputBox("neue Gruppe", "Name der neuen Gruppe eingeben")
    If @error = 1 Then
    MsgBox(0, "Fehler", "Ein Fehler ist aufgetreten.")
    Else
    _dbopen()
    _SQLite_Exec(-1, "UPDATE rechner SET kategorie = '" & $neueGruppe & "' WHERE name ='" & $RechnerTreeView_selected & "'")
    $rkategorie = _Rechnertreeviewupdate()
    _dbclose()
    GUICtrlSetState($Rechnername, $GUI_HIDE)
    GUICtrlSetState($Gruppe, $GUI_HIDE)
    GUICtrlSetState($Gruppeaendern, $GUI_HIDE)
    GUICtrlSetState($programmtree, $GUI_HIDE)
    GUICtrlSetState($nGruppe, $GUI_HIDE)
    EndIf
    Case $Gruppeaendern
    _dbopen()
    _SQLite_Exec(-1, "UPDATE rechner SET kategorie = '" & GUICtrlRead($Gruppe) & "' WHERE name ='" & $RechnerTreeView_selected & "'")
    $rkategorie = _Rechnertreeviewupdate()
    _dbclose()
    GUICtrlSetState($Rechnername, $GUI_HIDE)
    GUICtrlSetState($Gruppe, $GUI_HIDE)
    GUICtrlSetState($Gruppeaendern, $GUI_HIDE)
    GUICtrlSetState($programmtree, $GUI_HIDE)
    GUICtrlSetState($nGruppe, $GUI_HIDE)
    Case $Speichern

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

    _dbopen()
    If $typ = "rechner" Then
    _SQLite_Exec(-1, "DELETE FROM Zuweisenrechner WHERE rechnername = '" & $RechnerTreeView_selected & "'")
    Else
    _SQLite_Exec(-1, "DELETE FROM Zuweisenkategorie WHERE kategorie = '" & $RechnerTreeView_selected & "'")
    EndIf
    _dbclose()

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

    For $programmitemelement In $Programmitem
    $pruef = _GUICtrlTreeView_GetChecked($programmtree, $programmitemelement)
    If $pruef = True Then
    $programmname = _GUICtrlTreeView_GetText($programmtree, $programmitemelement)

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

    _Install($RechnerTreeView_selected, $programmname)
    EndIf
    Next
    _Programmliste($RechnerTreeView_selected, $typ)
    Case $Rechnerherunterfahren
    _Rechnerherunterfahren($typ, $RechnerTreeView_selected)
    Case $Rechnerneustart
    _Rechnerneustart($typ, $RechnerTreeView_selected)
    Case $Rechnerwakeup
    _Rechnerwakeup($typ, $RechnerTreeView_selected)
    EndSwitch
    WEnd

    [/autoit]

    Hier die Wake.exe um PCs aufzuwecken: http://masterbootrecord.de/english/wakeup.php

    Wenn es Fragen/Unklarheiten/Wünsche gibt einfach hier posten.
    Sollte ihr das produktiv im Einsatz haben wäre ich über kleine Rückmeldung erfreut da mich das interessieren würde.

  • Problem mit Frame im Frame

    • chip
    • 15. Januar 2010 um 12:39

    Hat sich da nun was getan Stilgar hehe?

  • Autoit Script Sharing

    • chip
    • 15. Januar 2010 um 12:27

    Gute Idee habs mal abgeändert.

  • Autoit Script Sharing

    • chip
    • 15. Januar 2010 um 12:22

    Hab ja nichts von Torrentprotokoll geschrieben ;). Ich habe gesagt Torrentverfahren, das ist ein großer Unterschied. Vor allem wäre das Bittorrentprotokoll hier eher störend, da dieses auf großes Datenmengen ausgelegt ist und bei kleinen wie z.b. einem Autoitscript mehr bremst als beschleunigt. Macht ja auch wenig Sinn solch kleine Dateien nochmal in Pakete zu splitten.

  • Frage zu TCPListen

    • chip
    • 15. Januar 2010 um 11:40

    Ja das ist klar. Ging mir darum ob Client sofort wieder gekickt werden wenn ein anderen mit TCPAccept angenommen wurde oder ob sie wirklich in einer Warteschlange bleiben.

  • Autoit Script Sharing

    • chip
    • 15. Januar 2010 um 11:36

    Da ich das gleiche im Grunde für mein Softwaretool gemacht habe, nur halt Netzintern, ist das kein Problem in Autoit und auch keineswegs langsam.

  • Programm sperrt MouseClick und MouseMove

    • chip
    • 15. Januar 2010 um 11:16
    Zitat von Schnitzel

    PS: Falls du auf youtube oder so videos gesehn hast die sagen "342 euro an einem wochenende" oder "4323 euro im monat"

    also mit diesem 100% sicherem system geld zu gewinnen indem man immer auf rot oder schwarz setzt.

    Das ganze is beschiss. Das system funktioniert auf dauer nicht.
    Es ist wie es immer heißt: Die Bank gewinnt immer!

    Nunja muss ich dir wiedersprechen, hab das selber mal eine Monat lang aus spaß getestet und immerhin mit einem Gewinn von 150€ raus gekommen :).

  • Autoit Script Sharing

    • chip
    • 15. Januar 2010 um 11:11

    Nachdem sich meine Softwareverteilung Hephaistos , nach einer längeren Testphase, nun kurz vor dem Release befindet habe ich mir überlegt was ich als nächstes machen könnte. Die UDF-Database von Jautois, die ich übrigens echt klasse finde und hoffe das da bald noch einige UDFs mehr rein kommen, hat mich dabei auf eine Idee gebracht. In wie weit diese Idee nun nötig oder unnötig ist sei dahingestellt.

    Es gibt doch viele Leute die sich die Mühe machen kleine oder auch große Skripte zu schreiben und diese unter anderem auch hier im Forum zu veröffentlichen. Was ich nun schade finde ist das diese Skripte doch recht schnell wieder in Vergessenheit geraten. Wenn man dann ein bestimmtes Skript braucht erinnert man sich meistens zwar noch, dass es so eines gibt aber nichtmehr wo. Oder noch schlimmer man weiß wo das Skript ist aber die Seite existiert nichtmehr und das Skript ist verloren.

    Von daher werde ich mit Projekt „Autoit Script Sharing“ beginnen.

    Das ganze wird im Peer to Peer Verfahren ablaufen. Mit Peer to Peer Verfahren ist gemeint das die Daten sich nicht auf einem zentralen Rechner befinden sondern sich die Clients untereinander austauschen. Ein Server ist in diesem Verfahren nur noch dazu da zu Listen welche Skripte verfügbar sind und von welchem Client diese zurzeit verfügbar sind.

    Der Vorteil ist der, dass man nicht auf einen einzigen Server angewiesen ist. Man kann auch seinen eigenen Server aufmachen und z.b. nur Skripte unter seinen Freunden tauschen. Auch der Ausfall des Servers ist kein großes Problem da man schlicht auf einen anderen dann ausweichen kann.

    Funktion des Servers:

    - Listet Skripte die schon einmal im Netzwerk verteilt wurden mit einem eindeutigen MD5 Hash.
    - Listet welche Clients, die aktuell online sind, welche Skripte verteilen
    - Gibt eine Liste aller bekannten Skripte an Clients aus
    - Gibt eine Liste der verfügbaren Quellen für an Skript an Clients weiter

    Funktion Client

    - Verteilen von Skripten im Netzwerk mit Generierung von eindeutigem MD5 Hash
    - Generiert einmaligen public + privat key
    - Gibt public-key an anfragenden Client aus
    - Verhandelt mit anderem Client einen Session-Key über RSA aus.
    - Durchsuchen der im Netzwerk bekannten Skripte

  • Programm sperrt MouseClick und MouseMove

    • chip
    • 15. Januar 2010 um 10:49

    Everest Casino ist ein Onlinecasino also gilt folgendes:

    Zitat

    Folgende Inhalte sind nicht erwünscht oder gar komplett verboten. Das Team behält es sich ausdrücklich vor, die Umsetzung der Regeln je nach Schweregrad zu
    verwarnen, zu löschen oder gar komplett zu sperren.

    - Bots für Spiele jeglicher Art, insbesondere Onlinespiele und ganz besonders Silkroad Online sowie World of Warcraft

  • Softwareverteilung Hephaistos

    • chip
    • 15. Januar 2010 um 10:23

    So wollte kurz mitteilen, dass sich das ganze nun langsam dem ersten Release nähert. Es fehlt nur noch eine kleine Installationsroutine und dann wird die erste Version releasd werden :). Inzwischen war auch ein Test auf Vista und Win 7 erfolgreich möglich. Zu erwähnen wäre auch noch da inzwischen rund 90 Rechner nur 10 Laptops bei mir mit Hephaistos mit Software versorgt werden. Etwa 40 davon habe ich auch gleichzeitig neu aufgesetzt, im Anschluss mit Software versorgt und um ehrlich zu sein ich war doch überrascht wie Problemlos und zeitgleich das funktioniert hat. Viele Anwender wollen das garnichtmehr missen, da es einfach wesentlich einfacher ist als z.b. mit MSI über ADS.

    Im Anhang noch ein Bild vom Adminmenu.

    Dateien

    Admin.jpg 157,52 kB – 0 Downloads
  • Frage zu TCPListen

    • chip
    • 15. Januar 2010 um 08:17

    Hi,

    bei TCPListen gibt es ja den Parameter "MaxPendingConnection". Wollte nun wissen ob das so richtig ist wie ich das verstanden habe.

    Wenn man bei "MaxPendingConnection" z.B. den Wert 100 eingibt können sich 100 Clients zum Server verbinden. Diese reihen sich dann in einer Warteschlange ein und können nacheinander mit TCPAccept abgearbeitet werden.

    Also so:

    Spoiler anzeigen
    [autoit]

    TCPStartup()
    $MainSocket = TCPListen(@IPAddress1, 33891, 100)

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

    While 1
    $ConnectedSocket = TCPAccept($MainSocket)
    If $ConnectedSocket <> -1 Then ExitLoop
    Wend

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

    TCPShutdown()

    [/autoit]

    Wenn nun also sich drei Clients zum Server verbinden wird der erste in der Schleife mit TCPAccept angenommen und die anderen zwei Warten in der Warteschlange. Ist dann der erste Client abgearbeitet wird mit TCPAccept dann der nächste Client aus der Warteschlange geholt.

    Hab ich das so richtig verstanden?

  • Dateien packen und verschlüsseln

    • chip
    • 14. Januar 2010 um 15:39

    Hi,

    hab eine kleines Script geschrieben das eine Datei oder einen ganzen Ordner, der im selben Verzeichniss wie das Script liegt, packt und verschlüsselt. Als Verschlüsselung wird der Tiny Encryption Algorithm mit einem 128-bit Schlüssel und der Cipher Block Chaining Mode verwendet.

    Sichern:

    Spoiler anzeigen
    [autoit]

    FileInstall("C:\crypt\7z.exe", "C:\Windows\Temp\7z.exe")
    FileInstall("C:\crypt\crypt.exe", "C:\Windows\Temp\crypt.exe")

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

    $ordner = "Kalender" ;Ordner oder Datei die gesichert werden soll
    $dateiname = "logo.jpg" ;Wie die Datei am Ende heißen soll
    $passwort = "test" ;Passwort für das zip Archiv
    $key = "secret" ;Schlüssel der Verschlüsselung

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

    RunWait(@ComSpec & ' /c ' & "C:\Windows\Temp\7z.exe a -tzip -p" & $passwort & " C:\Windows\Temp\" & $dateiname & " " & @ScriptDir & "\" & $ordner, @ScriptDir, @SW_HIDE)

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

    sleep(100)

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

    RunWait(@ComSpec & ' /c ' & "C:\Windows\Temp\crypt.exe -encrypt -key " & $key & " -infile C:\Windows\Temp\" & $dateiname & " -outfile C:\Windows\Temp\" & $dateiname, @ScriptDir, @SW_HIDE)

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

    sleep(100)

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

    FileCopy("C:\Windows\Temp\" & $dateiname, @ScriptDir & "\*.*",8)

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

    sleep(100)

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

    FileDelete("C:\Windows\Temp\7z.exe")
    FileDelete("C:\Windows\Temp\crypt.exe")
    FileDelete("C:\Windows\Temp\" & $dateiname)

    [/autoit]


    Entsichern:

    Spoiler anzeigen
    [autoit]

    FileInstall("C:\crypt\7z.exe", "C:\Windows\Temp\7z.exe")
    FileInstall("C:\crypt\crypt.exe", "C:\Windows\Temp\crypt.exe")

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

    $dateiname = "logo.jpg" ;Name der geschützten Datei
    $passwort = "test" ;Passwort für das zip Archiv
    $key = "secret" ;Schlüssel der Verschlüsselung

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

    RunWait(@ComSpec & ' /c ' & "C:\Windows\Temp\crypt.exe -decrypt -key " & $key & " -infile " & @ScriptDir & "\" & $dateiname & " -outfile " & @ScriptDir & "\entsichert.zip", @ScriptDir, @SW_HIDE)

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

    sleep(100)

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

    RunWait(@ComSpec & ' /c ' & "C:\Windows\Temp\7z.exe x -y -o"& @ScriptDir & "\ -p" & $passwort & " " & @ScriptDir & "\entsichert.zip" , @ScriptDir, @SW_HIDE)

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

    sleep(100)

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

    FileDelete("C:\Windows\Temp\7z.exe")
    FileDelete("C:\Windows\Temp\crypt.exe")
    FileDelete(@ScriptDir & "\" & $dateiname)
    FileDelete(@ScriptDir & "\entsichert.zip")

    [/autoit]


    Es werden noch die zwei Dateien 7z.exe und crypt.exe (von codeode) benötigt welche ich angehängt habe.

    Dateien

    crypt.zip 213,24 kB – 477 Downloads
  • Button - Paste führt zum Programmende

    • chip
    • 14. Januar 2010 um 12:21

    Aus den paar Codesnipseln kann man wenig sagen. Würde einfach mal sagen das keine Schleife hast:

    Spoiler anzeigen
    [autoit]


    #include <WindowsConstants.au3>
    Do
    $msg = GUIGetMsg()

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

    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]
  • Spracheingabe

    • chip
    • 14. Januar 2010 um 08:22

    Schau die mal die UDF an: http://www.autoitscript.com/forum/index.php?showtopic=17032

    Ist allerdings von 2005 also keine Ahnung ob sie noch geht.

  • GUI nachträglich Größe ändern

    • chip
    • 14. Januar 2010 um 00:23

    Danke werde ich mal testen. Der Grund warum ich die GUI nachträglich in der Größe änder will ist der, dass ich da Bilder und Text reinladen lasse der unterschiedlich groß ist und ich dementsprechen die GUI anpassen muss.

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™