danke ;o)) soo schlau war ich auch schon, nur habe ich eben nichts gefunden, deshalb frage ich ja ob es jemand zufällig noch auf der platte hat ;o)
Beiträge von CrazyER
-
-
Hallo zusammen,
ich habe letztes Jahr mir ein Script gebaut, das ich gerade wieder ausführen wollte. Nun musste ich feststellen, das mir die UDF _GetFilesFolder_Rekursiv.au3 fehlt. Hat die zufällig jemand von euch auf der Platte liegen und weiß wo ich sie mir ziehen kann ??
Vielen Dank im voraus.
Grüße
CrazyER -
Hallo zusammen,
ich hab folgende Idee, weiß nur noch nicht ob ich es mit AutoIT umsetzen kann. Vielleicht hat von euch ja jemand einen Tipp.
Ich hab mir übers INet ein USB Mail Notifier bestellt, das sieht so aus [Blockierte Grafik: http://www.geekalerts.com/u/usbwebmailnotifier.jpg]
Das Teil wird über USB angeschlossen, wird als USB HID Gerät erkannt und kann in 3 verschiedene Farben leuchten. Die mitgelieferte Software ist aber nicht das wahre, zumindest nicht so wie ich es mir vorstelle. Soo nun zu meiner Frage, ist es irgendwie möglich mit AutoIT dieses USB Gerät zu steuern ?? Durch die Softwareinstallation hätte ich ja alle nötigen DLLs vorhanden (weiß nur noch nicht, wie ich die Funktion auslesen kann).
Bin für jeden Tipp dankbar.
Grüße
CrazyER -
Hallo zusammen,
ich habe mal eine grundsätzliche Frage, ob ich folgendes mit Autoit machen kann. Ich habe ein Lageplan (mit Gebäudenummern) des Firmengelände im JPG Format. Ich möchte nun ein Skript schreiben, das sich mit einer Gebäudenummer als Parameter aufrufen lässt. Das Skript soll dann den Gebäudeplan öffnen und mir das gesucht Gebäude farblich markieren.
Ist so etwas dynamisches möglich ?? Oder ist das eine Scriptsprache für Webanwendungen besser geeignet ??
Bin für jegliche Art von Idee dankbar.
Grüße
CrazyER -
Also ich habe es fast geschafft, jetzt erhalte ich nur noch ein Fehlermeldung, mit der ich nichts anfangen kann, bzw. die ich mir nicht erklären kann.
Hier mein Code:
Spoiler anzeigen
[autoit]#include <AD.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$usertext = FileOpen ("D:\AutoIT\user.txt", 0)
[/autoit] [autoit][/autoit] [autoit]
_AD_Open()$Logfile = FileOpen("D:\AutoIt\AD-Log.txt", 2)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$LogDokuSchreiber = FileOpen("D:\AutoIT\DokuSchreiber-LOG.txt", 1)
$LogDokuAenderer = FileOpen("D:\AutoIT\DokuAenderer-LOG.txt", 1)Dim $DokuSchreiber[1]
[/autoit] [autoit][/autoit] [autoit]
Dim $DokuAdmin[1]
Dim $DokuAendererPlus[1]
Dim $UserFQDN
Dim $UserWhile 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;user.txt wird Zeile für Zeile eingelesen, nach der letzten Zeile geht er aus der While Schleife.
$UserFQDN = FileReadLine($usertext)
If @error = -1 Then ExitLoop;eingelesenr User FQDN wird hier als Benutzername aufgelöst
[/autoit] [autoit][/autoit] [autoit]
$User = _AD_FQDNToSamAccountName($UserFQDN)
;jetzt werden alle Gruppen des Users eingelesen
$aUserGr = _AD_GetUserGroups($User)ReDim $DokuSchreiber[1]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ReDim $DokuAdmin[1]
ReDim $DokuAendererPlus[1]
$x = 1
$y = 1; DokuSchreiber Gruppen werden hier gefunden
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
For $x =1 to $aUserGr[0]
IF StringRegExp($aUserGr[$x],"DokuSchreiber") Then
ReDim $DokuSchreiber[UBound($DokuSchreiber)+1]
$DokuSchreiber[$y] = $aUserGr[$x]
FileWriteLine($LogDokuSchreiber, $aUserGr[$x])
$y = $y +1
EndIf
Next
$DokuSchreiber[0] =UBound($DokuSchreiber)-1
$x = 1
$y = 1; DokuAendererPlus Gruppen werden hier gefunden
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
For $x =1 to $aUserGr[0]
IF StringRegExp($aUserGr[$x],"DokuAendererPlus") Then
ReDim $DokuAendererPlus[UBound($DokuAendererPlus)+1]
$DokuAendererPlus[$y] = $aUserGr[$x]
FileWriteLine($LogDokuAenderer, $aUserGr[$x])
$y = $y +1
EndIf
Next
$DokuAendererPlus[0] =UBound($DokuAendererPlus)-1
$x = 1
$y = 1; DokuSchreiber String wird zu DokuAdmin String
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
While $x <= $DokuSchreiber[0]
ReDim $DokuAdmin[UBound($DokuAdmin)+1]
$DokuAdmin[$y]=StringRegExpReplace($DokuSchreiber[$x],"DokuSchreiber","DokuAdmin")
$y = $y +1
$x = $x +1
WEnd
$x = 1
; DokuAendererPlus String wird zu DokuAdmin String
While $x <= $DokuAendererPlus[0]
ReDim $DokuAdmin[UBound($DokuAdmin)+1]
$DokuAdmin[$y]=StringRegExpReplace($DokuAendererPlus[$x],"DokuAendererPlus","DokuAdmin")
$y = $y +1
$x = $x +1
WEnd$DokuAdmin[0] =UBound($DokuAdmin)-1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]; Benutzer wird in die DokuAdmin Gruppe hinzugefügt
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$x = 0
$z = 0
While $x <= $DokuAdmin[0]
_AD_AddUserToGroup($DokuAdmin[$x],$User)
If $z=0 Then
FileWriteLine($Logfile, "Benutzer "&$User&" wurde in "&$DokuAdmin[$x]&" DokuAdmin-Gruppe(n) hinzugefügt.")
$z = $z +1
Else
FileWriteLine($Logfile, "Benutzer "&$User&" wurde in der Gruppe "&$DokuAdmin[$x]&" hinzugefügt.")
EndIf
$x = $x +1
WEnd
; Benutzer wird aus der DokuSchreiber Gruppe gelöscht
$x = 0
$z = 0
While $x <= $DokuSchreiber[0]
_AD_RemoveUserFromGroup($DokuSchreiber[$x],$User)
If $z=0 Then
FileWriteLine($Logfile, "Benutzer "&$User&" wurde in "&$DokuSchreiber[$x]&" DokuSchreiber-Gruppe(n) gelöscht.")
$z = $z +1
Else
FileWriteLine($Logfile, "Benutzer "&$User&" wurde in der Gruppe "&$DokuSchreiber[$x]&" gelöscht.")
EndIf
$x = $x +1
WEnd
; Benutzer wird aus der DokuAendererPlus Gruppe gelöscht
$x = 0
$z = 0
While $x <= $DokuAendererPlus[0]
_AD_RemoveUserFromGroup($DokuAendererPlus[$x],$User)
If $z=0 Then
FileWriteLine($Logfile, "Benutzer "&$User&" wurde in "&$DokuAendererPlus[$x]&" AendererPlus-Gruppe(n) gelöscht.")
$z = $z +1
Else
FileWriteLine($Logfile, "Benutzer "&$User&" wurde in der Gruppe "&$DokuAendererPlus[$x]&" gelöscht.")
EndIf
$x = $x +1
WEndFileWriteLine($Logfile, "----------------------------------------------------------------------------------------------------------------------------")
[/autoit] [autoit][/autoit] [autoit]Wend
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_AD_Close()
[/autoit]
;_ArrayDisplay($DokuSchreiber, "Alle DokuSchreiber")
;_ArrayDisplay($DokuAdmin, "Alle DokuAdmin")
;_ArrayDisplay($aUserGr, "Alle")
ExitUnd hier die Fehlermeldung:
Code
Alles anzeigen>"C:\Programme\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "D:\AUTOIT\ad_test.au3" /autoit3dir "C:\Programme\AutoIt3" /UserParams +>15:07:30 Starting AutoIt3Wrapper v.1.10.1.14 Environment(Language:0407 Keyboard:00000407 OS:WIN_XP/Service Pack 2 CPU:X86 ANSI) >Running AU3Check (1.54.19.0) from:C:\Programme\AutoIt3 +>15:07:30 AU3Check ended.rc:0 >Running:(3.3.6.1):C:\Programme\AutoIt3\autoit3.exe "D:\AUTOIT\ad_test.au3" D:\AUTOIT\ad_test.au3 (39) : ==> Subscript used with non-Array variable.: For $x =1 to $aUserGr[0] For $x =1 to $aUserGr^ ERROR ->15:07:31 AutoIT3.exe ended.rc:1 +>15:07:32 AutoIt3Wrapper Finished >Exit code: 1 Time: 3.447Wäre dankbar, wenn mir einer mein Fehler erklären könnte.
DANKE
-
danke dir, manchmal ist die Lösung zu einfach ;o)
-
Darter, kann es sein, das dir eine Windows Domäne und somit ein Active Directory (LDAP Server) fehlt??
@DaX, das mit dem umbennen hatte ich mir auch schon überlegt, aber ich habe da bedenken, das es mit die bestehen Gruppen/Mitglieder eventuell überschreibt/zerhaut, bzw. ob er nicht rum meckert das es die Gruppe ja schon gibt (was er tut, wenn man es manuelle testet) ??
-
Sorry wenn ich nun hier direkt reinplatze, aber ich bekomme das UDF irgendwie garnicht zum laufen. Vielleicht hat von euch spontan einer eine Idee.
Ich sitze an einem Win XP mit SP2 und es ist eine 2003er Domäne.
[autoit]#include <AD.au3>
[/autoit][autoit][/autoit][autoit]_AD_Open("testuser", "testpasswd"
[/autoit][autoit][/autoit][autoit]_AD_Close
[/autoit]Also ihr seht, nichts besonderes ;o))
Ich erhalte aber folgende Fehlermeldung:
Spoiler anzeigen
Code
Alles anzeigenC:\Programme\AutoIt3\Include\AD.au3(1609,59) : ERROR: _Date_Time_SystemTimeToDateTimeStr() called with wrong number of args. $sAD_Now = _Date_Time_SystemTimeToDateTimeStr($sAD_Now, 1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\Date.au3(2796,60) : REF: definition of _Date_Time_SystemTimeToDateTimeStr(). Func _Date_Time_SystemTimeToDateTimeStr(ByRef $tSystemTime) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\AD.au3(1752,69) : ERROR: _Date_Time_SystemTimeToDateTimeStr() called with wrong number of args. $sAD_DTExpire = _Date_Time_SystemTimeToDateTimeStr($sAD_DTExpire, 1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\Date.au3(2796,60) : REF: definition of _Date_Time_SystemTimeToDateTimeStr(). Func _Date_Time_SystemTimeToDateTimeStr(ByRef $tSystemTime) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\AD.au3(1771,78) : ERROR: _Date_Time_SystemTimeToDateTimeStr() called with wrong number of args. $aAD_FQDN[$iAD_Count][1] = _Date_Time_SystemTimeToDateTimeStr($sAD_Temp, 1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\Date.au3(2796,60) : REF: definition of _Date_Time_SystemTimeToDateTimeStr(). Func _Date_Time_SystemTimeToDateTimeStr(ByRef $tSystemTime) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\AD.au3(1773,78) : ERROR: _Date_Time_SystemTimeToDateTimeStr() called with wrong number of args. $aAD_FQDN[$iAD_Count][2] = _Date_Time_SystemTimeToDateTimeStr($sAD_Temp, 1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\Date.au3(2796,60) : REF: definition of _Date_Time_SystemTimeToDateTimeStr(). Func _Date_Time_SystemTimeToDateTimeStr(ByRef $tSystemTime) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\AD.au3(1918,93) : ERROR: _Date_Time_SystemTimeToDateTimeStr() called with wrong number of args. $aAD_ObjectProperties[$iCount3][1] = _Date_Time_SystemTimeToDateTimeStr($sAD_Temp3, 1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\Date.au3(2796,60) : REF: definition of _Date_Time_SystemTimeToDateTimeStr(). Func _Date_Time_SystemTimeToDateTimeStr(ByRef $tSystemTime) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\AD.au3(2859,71) : ERROR: _Date_Time_SystemTimeToDateTimeStr() called with wrong number of args. $aAD_PwdInfo[10] = _Date_Time_SystemTimeToDateTimeStr($sAD_Temp2, 1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\Date.au3(2796,60) : REF: definition of _Date_Time_SystemTimeToDateTimeStr(). Func _Date_Time_SystemTimeToDateTimeStr(ByRef $tSystemTime) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\AD.au3(2863,70) : ERROR: _Date_Time_SystemTimeToDateTimeStr() called with wrong number of args. $aAD_PwdInfo[8] = _Date_Time_SystemTimeToDateTimeStr($sAD_Temp2, 1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\Date.au3(2796,60) : REF: definition of _Date_Time_SystemTimeToDateTimeStr(). Func _Date_Time_SystemTimeToDateTimeStr(ByRef $tSystemTime) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\AD.au3(2866,70) : ERROR: _Date_Time_SystemTimeToDateTimeStr() called with wrong number of args. $aAD_PwdInfo[9] = _Date_Time_SystemTimeToDateTimeStr($sAD_Temp2, 1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\Date.au3(2796,60) : REF: definition of _Date_Time_SystemTimeToDateTimeStr(). Func _Date_Time_SystemTimeToDateTimeStr(ByRef $tSystemTime) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ D:\AUTOIT\ad_test.au3(3,34) : ERROR: syntax error _AD_Open("testuser", "testpasswd" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Include\AD.au3(1004,47) : ERROR: _ArrayUnique(): undefined function. $aAD_Groups = _ArrayUnique($aAD_Groups, 1, 1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ D:\AUTOIT\ad_test.au3 - 10 error(s), 0 warning(s)Hat jemand eine Idee ??
Grüße
CrazyER -
Tach zusammen
ich hab mal wieder eine etwas größere Aufgabe zu bewältigen, die mich mal wieder auf AutoIT bringt ;o)
Also ich erklär mal eben das vorhaben. Wir haben in der AD in einer OU viele viele unter OUs mit noch mehr Gruppen. Unter anderem gibt es doch Gruppen die xxxxxx-DokuAenderer heißen und xxxxxxxxx-DokuAdmin. Ziel ist nun, die Mitglieder von den DokuAenderer in die Gruppe der DokuAdmins einzupflegen, um anschließen alle Gruppen mit DokuAenderer zu löschen.
Gibt es eine Möglichkeit mit AutoIt direkt in die AD einzugreifen ?? Muss ich mir anderer MS Tools besorgen um dies mit AutoIt zurealisieren ?? Hat jemand sowas zufällig schonmal gescriptet ?? Hat mir jemand einen Ansatz, wie ich das Umsetzen kann ??
Für jeden Tipp und Rat bin ich dankbar.
Grüße
CrazyER -
Schon erledigt, hatte das Auslesen an der falschen Stelle ;o))
-
Tach zusammen,
mal iweder eine kleien Frage zwischen durch. ich bin einfach blind ;o))
Habe folgenden mini Code:
Spoiler anzeigen
Code
Alles anzeigenDIM $local_IP = @IPAddress1&"|"&@IPAddress2&"|"&@IPAddress3&"|"&@IPAddress4 #Region ### START Koda GUI section ### Form=D:\AUTOIT\NSClient\NSCinstall.kxf $Form1 = GUICreate("Form1", 354, 173, 193, 125) $ok = GUICtrlCreateButton("OK", 240, 32, 65, 33, 0) $Combo1 = GUICtrlCreateCombo("", 40, 40, 161, 25) GUICtrlSetData(-1,$local_IP) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### $C_IP = GUICtrlRead($Combo1) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $ok MsgBox(1,"test",$C_IP) EndSwitch WEndWenn ich es nun ausführe und eine IP aus der Box auswähle, mit OK bestätige, dann erhalte ich einfach nur ein lerres Dialogfeld.
Wieso liest er meine auswahl nicht aus ??
Grüße
CrazyER -
Hallo zusammen,
wieder einmal bastel ich mir nen altes Script neu und wieder einmal habe ich mir gedacht, mach es richtig, mach Funktionen. Nun funktioniert es eben mal wieder nicht wie ich es will.
Hier mal das alte Script noch in der einfachen und unübersichtlichen Darstellung:
Spoiler anzeigen
[autoit]#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
[/autoit] [autoit][/autoit] [autoit]
#AutoIt3Wrapper_outfile=Tonerstandplugin.exe
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Process.au3>Const $inifile = @ScriptDir&"\Tonerstandplugin.ini"
[/autoit] [autoit][/autoit] [autoit]
$i = 0
$y = 1
$x = 1
$Error = 0$Section = IniReadSectionNames ($inifile)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$maxArray = $Section[0]
Dim $DruckerTyp[$maxArray]
Dim $Tonerartikel[$maxArray]
Dim $Artikelzusatz[$maxArray]
Dim $Tonermeldebestand[$maxArray]
Dim $Tonerbestand[$maxArray]
Dim $TonerMaximalBestand[$maxArray]
Dim $Meldung[$maxArray]
Dim $TonerBestellmenge
Dim $Output; Ini-Datei wird ausgelesen und in die Arrays geschrieben. $Tonerbestand-/meldebstand werden als Zahl eingelesen, damit ein Verlgeich funktioniert.
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
While $i < $maxArray
$DruckerTyp[$i] = IniRead($inifile, $Section[$y], "DruckerTyp","")
$Tonerartikel[$i] = IniRead($inifile, $Section[$y], "Tonerartikel","")
$Artikelzusatz[$i] = IniRead($inifile, $Section[$y], "Artikelzusatz","")
$Tonermeldebestand[$i] = Number(IniRead($inifile, $Section[$y], "Tonermeldebestand",""))
$Tonerbestand[$i] = Number(IniRead($inifile, $Section[$y], "Tonerbestand",""))
$TonerMaximalBestand[$i] = Number(IniRead($inifile, $Section[$y], "TonerMaximalBestand",""))
$i = $i + 1
$y = $y + 1
WEnd$y = 1
[/autoit]
$i = 0
If $CmdLine[0] > 0 Then
; Hier wird der eigentliche Check ausgelöst. Dieser prüft den Tonerbestand gegenüber dem Meldebestand.
If $CmdLine[1] == "check" Then
$i = 0
While $i < $maxArray
If $Tonerbestand[$i] <= $Tonermeldebestand[$i] Then
$TonerBestellMenge = $TonerMaximalBestand[$i] - $Tonerbestand[$i]
$Meldung[$x] = '" | "'&$TonerBestellMenge&"x "&$Tonerartikel[$i]&" "&$Artikelzusatz[$i]&" fuer "&$DruckerTyp[$i]
$x = $x +1
$i = $i +1
Else
$i = $i +1
EndIf
WEnd
If $x >1 Then
$Error = 1
EndIf
; Hier wird der $Output mit der $Meldung befüllt/ergenzt
While $x > 0
$Output = $Output &$Meldung[$x]
$x = $x -1
WEnd
; Wenn ein Meldebestand unterschritten worde ist, wird hier die Warnung ausgegeben, ansonsten ist alles OK.
If $Error >= 1 Then
_RunDOS("echo Tonerbestand KRITISCH ! "&$Output)
exit 2
Else
_RunDOS("echo Tonerbestand OK")
exit 0
EndIf
Else
; Hier wird der Tonerstand angepasst, wenn das Plugin mit dem $Tonerartikel als Parameter aufgerufen wird
While $i < $maxArray
If $CmdLine[1] == $Tonerartikel[$i] Then
$Tonerbestand[$i] = $Tonerbestand[$i] - 1
IniWrite ($inifile, $Section[$y], "Tonerbestand", $Tonerbestand[$i] )
EndIf
$y = $y +1
$i = $i +1
WEnd
EndIf
Else
_RunDOS("echo Bitte Parameter mit angeben")
exit 3
EndIfund hier nun meine Version mit Funktionen:
Spoiler anzeigen
[autoit]#include <Process.au3>
[/autoit] [autoit][/autoit] [autoit]Dim $DruckerTyp[$maxArray]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Dim $Tonerartikel[$maxArray]
Dim $Artikelzusatz[$maxArray]
Dim $Tonermeldebestand[$maxArray]
Dim $Tonerbestand[$maxArray]
Dim $TonerMaximalBestand[$maxArray]
Dim $Meldung[$maxArray]
Dim $TonerBestellmenge
Dim $Output
Dim $Section
Dim $maxArray
Dim $x
Dim $y
Dim $iSelect
[/autoit] [autoit][/autoit] [autoit]
Case $CmdLine[1] == "Geb.1"
$inifile = @ScriptDir&"\1_Tonerstandplugin.ini"
_INIlesen()
_Tonerlisteanpassung()
Case $CmdLine[1] == "Geb.2"
$inifile = @ScriptDir&"\2_Tonerstandplugin.ini"
_INIlesen()
_Tonerlisteanpassung()
Case $CmdLine[1] == "Geb.3"
$inifile = @ScriptDir&"\3_Tonerstandplugin.ini"
_INIlesen()
_Tonerlisteanpassung()
Case $CmdLine[1] == "Geb.4"
$inifile = @ScriptDir&"\4_Tonerstandplugin.ini"
_INIlesen()
_Tonerlisteanpassung()
Case $CmdLine[1] == "check"
_INIlesen()
_check()
Case $CmdLine[0] < 0
_RunDOS("echo Bitte Parameter mit angeben")
exit 3EndSelect
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _INIlesen()
[/autoit] [autoit][/autoit] [autoit]
$i = 0
$y = 1
$x = 1
$Error = 0$Section = IniReadSectionNames ($inifile)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$maxArray = $Section[0]; Ini-Datei wird ausgelesen und in die Arrays geschrieben. $Tonerbestand-/meldebstand werden als Zahl eingelesen, damit ein Verlgeich funktioniert.
[/autoit] [autoit][/autoit] [autoit]
While $i < $maxArray
$DruckerTyp[$i] = IniRead($inifile, $Section[$y], "DruckerTyp","")
$Tonerartikel[$i] = IniRead($inifile, $Section[$y], "Tonerartikel","")
$Artikelzusatz[$i] = IniRead($inifile, $Section[$y], "Artikelzusatz","")
$Tonermeldebestand[$i] = Number(IniRead($inifile, $Section[$y], "Tonermeldebestand",""))
$Tonerbestand[$i] = Number(IniRead($inifile, $Section[$y], "Tonerbestand",""))
$TonerMaximalBestand[$i] = Number(IniRead($inifile, $Section[$y], "TonerMaximalBestand",""))
$i = $i + 1
$y = $y + 1
WEndEndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _check()
[/autoit] [autoit][/autoit] [autoit]
; Hier wird der eigentliche Check ausgelöst. Dieser prüft den Tonerbestand gegenüber dem Meldebestand.
$y = 1
$i = 0
While $i < $maxArray
If $Tonerbestand[$i] <= $Tonermeldebestand[$i] Then
$TonerBestellMenge = $TonerMaximalBestand[$i] - $Tonerbestand[$i]
$Meldung[$x] = '" | "'&$TonerBestellMenge&"x "&$Tonerartikel[$i]&" "&$Artikelzusatz[$i]&" fuer "&$DruckerTyp[$i]
$x = $x +1
$i = $i +1
Else
$i = $i +1
EndIf
WEnd
If $x >1 Then
$Error = 1
EndIf
; Hier wird der $Output mit der $Meldung befüllt/ergenzt
While $x > 0
$Output = $Output &$Meldung[$x]
$x = $x -1
WEnd
; Wenn ein Meldebestand unterschritten worde ist, wird hier die Warnung ausgegeben, ansonsten ist alles OK.
If $Error >= 1 Then
_RunDOS("echo Tonerbestand KRITISCH ! "&$Output)
exit 2
Else
_RunDOS("echo Tonerbestand OK")
exit 0
EndIfEndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Tonerlisteanpassung()
[/autoit]
; Hier wird der Tonerstand angepasst, wenn das Plugin mit dem $Tonerartikel als Parameter aufgerufen wird
$i = 0
$y = 1
While $i < $maxArray
If $CmdLine[2] == $Tonerartikel[$i] Then
$Tonerbestand[$i] = $Tonerbestand[$i] - 1
IniWrite ($inifile, $Section[$y], "Tonerbestand", $Tonerbestand[$i] )
EndIf
$y = $y +1
$i = $i +1
WEnd
EndFuncKann mir nun mal einer erklären, was ich tun muss, damit jede Funktion jede Variable kennt ??
Danke im voraus.
Grüße
CrazyER -
Supi vielen Dank.
Macht immer wieder Spaß mit euch zu scripten. Und gelernt habe ich auch wieder eine Menge.
-
Sooo, nun hatte ich gestern mal wieder einbisschen Zeit das Script anzupassen. Habe es auch gleich durchlaufen lassen. Bei 9583 Ordnern hat es ne Weile gedauert, aber es lief. Nur ein Problem habe ich nicht bedacht. Manche Ordner haben Leerstellen drin, und da der String nicht in " " gesetzt ist, weiß robocopy damit wenig anzufangen. Wer hat bloss dieses DOS erfunden ;o))
Also hier mal ein aktuelles Script:
Spoiler anzeigen
autoit]#include <_GetFilesFolder_Rekursiv.au3>
#include <File.au3>
#include <String.au3>
#include <Array.au3>
If FileExists(@ScriptDir&"\robocopy.exe") == 1 Then
$robocopy = "Robocopy ist vorhanden"
Else
$robocopy ="ACHTUNG: Bitte Robocopy in das Scriptverzeichnis kopieren!"
EndIfMsgBox(0,"Robocopy ?",$robocopy)
$Laufwerk = "W:\"
$altJahr = "2009"
$neuJahr = "2010"$array=_GetFilesFolder_Rekursiv($Laufwerk, 1, 1)
DIM $String, $sPfad, $aPfad, $sNowPath, $aNowPath
For $i = 1 to $array[0]
$String=StringSplit($array[$i],"\")
If $String[$String[0]-1] == $altJahr Then
$sPfad &= $array[$i]&"|"
EndIf
Next
If $sPfad <> "" then
$aPfad = StringSplit(StringTrimRight($sPfad,1),"|")
For $i = 1 to $aPfad[0]
$aNowPath = StringSplit($aPfad[$i],"\")
For $x = 1 to $aNowPath[0]-2
$sNowPath &= $aNowPath[$x]&"\"
Next
If Not FileExists($sNowPath& $neuJahr) Then _robocopy($sNowPath)
;DirCreate($sNowPath&"2010")
ConsoleWrite($sNowPath& $neuJahr& @CRLF)
$sNowPath = ""
NextElse
MsgBox(0,"","nichts gefunden")
EndIfMsgBox(0,"","Script ist komplett durchgelaufen!")
Func _robocopy($Pfad)
Run (@ScriptDir&"\robocopy.exe "&$Pfad&$altJahr&" "&$Pfad&$neuJahr&" /E /LEV:3 /ZB /COPY:ATSO /LOG:test.txt")
EndFunc[/autoit]Wie bekomme ich nun hier @ScriptDir&"\robocopy.exe "&$Pfad&$altJahr&" "&$Pfad&$neuJahr&" /E /LEV:3 /ZB /COPY:ATSO /LOG:test.txt" das doppelte " " hin ??
Vorschläge werden gerne angenommen.
DANKE
-
erstmal danke euch beiden. Eigentlich war mein Ansatz ja garnicht soooooo schlecht :o))
ich habe mich nun für die Methode von SEuBo entschieden, funktioniert auch gut. Muss nur noch das DirCreate gegen ein Robocopy Befehl tauschen.
Aber irgendwie gehen mir die einzelne Schritte deiner Logik noch nicht ganz in den Kopf. Wäre es zuviel verlangt, wenn du mir erklären könntest, was welcher Schritt genau macht ? Dann wäre für mich auch noch ein Lerneffekt dabei.
-
derren Namen 2009 IST. Ich benötige aber von diesem Ordner den vollständigen Pfad.
-
Hallo zusammen
ich hab folgenden Code:
[autoit]#include <_GetFilesFolder_Rekursiv.au3>
[/autoit][autoit][/autoit][autoit]
#include <File.au3>
#include <String.au3>$sPath="D:\"
[/autoit]
$iDir=1
$iRetType=1
$array=_GetFilesFolder_Rekursiv($sPath, $iDir, $iRetType)
$i=1
$y=0
$x=0
DIM $String
DIM $Pfad
While $i <= UBound($array)
$String=_StringSplit($array[$i],"\")
While $x <= UBound($String)
If $String[$x] == "2009" Then $Pfad[$y] = $array[$i]
If $Pfad[$y] > 1 Then $y = $y+1
$x = $x+1
WEnd
$x = 0
$i = $i +1
WEnd
MsgBox(0,"test", $y)Wenn ich ihn ausführe, erhalte ich folgende Fehlermeldung:
Code:\AUTOIT\Jahreswechsel.au3 (27) : ==> Subscript used with non-Array variable.: If $Pfad[$y] > 1 Then $y = $y+1 If $Pfad^ ERRORIch vermute mal, das er ein Problem mit dem Array hat, aber ich blick es nicht ganz.
Im Detail, was ich vor habe:
Ich möchte einen Pfad durchsuchen lassen und alle Ordner die 2009 enthalten finden und dort einen Ordner 2010 erstellen lassen. Also durchsuche ich alle Ordner und lasse sie in ein Array schreiben, diese Array splitte ich in einzelne Strings auf und suche nach 2009. Die Ergebnise lasse ich mir dann wieder in eine neues Array schreiben, damit ich am ende nur noch ein Array habe, in dem dann alle Pfade mit 2009 drinstehen.Bin für jeden Tipp dankbar.
-
Tach zusammen, stehe mal wieder vor einem Rätsel, das Ihr bestimmt schnell lösen könnt.
Möchte von einer Combobox etwas auswählen und den Eintrag mit einer Variablen Vergleichen, aber irgendwie ruft er nicht mal meine Funktion auf, bzw wenn er sie mal aufruft, dann liest er das Combofeld nicht aus. Wo ist mein Fehler ??
Spoiler anzeigen
[autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>$x=1
[/autoit]
DIM $artikel[100]
DIM $bestandalt[100]
DIM $liste
_lesen()
_fuellen()
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 633, 168, 192, 124)
$Combo1 = GUICtrlCreateCombo($artikel[0], 32, 64, 329, 25)
$Combo1 = GUICtrlSetData(-1, $liste, $artikel[0])
$aktuell = GUICtrlCreateInput("aktuell", 384, 64, 49, 21)
$neu = GUICtrlCreateInput("neu", 464, 64, 49, 21)
$OK = GUICtrlCreateButton("Übernehmen", 536, 64, 81, 25, $WS_GROUP)
$Exit = GUICtrlCreateButton("Beenden", 272, 112, 113, 33, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("TonerTyp auswählen:", 32, 40, 153, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("aktuell", 392, 40, 35, 17)
$Label3 = GUICtrlCreateLabel("neu", 472, 40, 22, 17)
$Label4 = GUICtrlCreateLabel("Tonerbestand", 400, 16, 101, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Exit
Exit
Case $Combo1
GUICtrlSetData ( $aktuell, _anzeigen())
EndSwitch
WEnd
Func _lesen()
While $x <= 99
$artikel[$x] = IniRead ("\\printserver\c$\NSClient++\nrpe\Tonerstandplugin.ini", "TonerTyp"&$x, "Tonerartikel", "0")
$bestandalt[$x] = IniRead ("\\printserver\c$\NSClient++\nrpe\Tonerstandplugin.ini", "TonerTyp"&$x, "Tonerbestand", "0")
$x = $x + 1
WEnd
EndFunc
Func _fuellen()
$x = 1
$liste = $artikel[$x]
$x= 2
While $x <= 99
$liste = $liste &"|"& $artikel[$x]
$x = $x +1
WEnd
EndFunc
Func _anzeigen()
$auswahl = GUICtrlRead ($Combo1)
$i = 0
$x =1
While $i = 0
If $auswahl = $artikel[$x] Then $i = 1
$x = $x +1
WEnd
$toneraktuell = $bestandalt[$x]
Return $toneraktuell
EndFuncBin wie immer für jeden Tipp dankbar.
Grüße
CrazyER -
Tach zusammen mal wieder ;o))
gibt es eine Möglichkeit Texte in verschiedenen Schriftarten und Farben darstellen zu lassen ?? Bislang lese ich die Texte alle aus einer ini Datei und füge Sie bei bedarf in ein Input feld. Ist ja schön und gut. aber ich würde gerne einige Textstelle besonders hervorheben durch andere Schriftart und anderer Farbe. z.B. als HTML Text oder sonst was. Wie muss ich die Texte bereit halten, damit ich sie auslesen kann und nicht fest in den Code binden muss. Und in welche Felder kann ich die Texte einfügen lassen ??
Für Tipps bin ich wieder immer dankbar.
Grüße
CrazyER
-
Hat sich erledigt, man darf scheinbar nicht beide GUI Methode mit einander mischen.
Sollte ich falsch liegen, bin ich für eine Aufklärung dankbar.