Hi!
Ja wenn du alle Programmteile integriert hast die du brauchst.
Dann als exe compilieren und entweder eine Verknüpfung in den Autostart oder du kopierst die Exe direkt in den Autostartordner.
Hi!
Ja wenn du alle Programmteile integriert hast die du brauchst.
Dann als exe compilieren und entweder eine Verknüpfung in den Autostart oder du kopierst die Exe direkt in den Autostartordner.
Hi!
Dein Script funktioniert bei mir.
Hast du auch wirklich Schreibrechte auf dem Server?
Ich habe es mit einem FTP Server getestet der in unserem Intranet steht und auf den ich volle Zugriffsrechte habe.
Eventuell Umlaute im Pfad, Dateiname? Könnte bei bestimmten Servern, ein Problem sein.
Hi!
$file = FileOpen("wieweitsinddieinstallationen.txt", 0)
$nummer = FileReadLine($file,1)
FileClose($file)
While $nummer <> 5
$nummer += 1
$file = FileOpen("wieweitsinddieinstallationen.txt", 2)
FileWriteLine($file,$nummer)
FileClose($file)
If $nummer = 1 Then
_install1()
ElseIf $nummer = 2 Then
_install2()
ElseIf $nummer = 3 Then
_install3()
Else
_install4()
EndIf
WEnd
FileDelete("wieweitsinddieinstallationen.txt")
Func _install1()
run("T:\UpdateDVD28092009\Auto\WindowsXP\Winfuture3.16XPSP3-14102009\WinFuture_WinXPsp3_UpdatePack_3.16_Oktober-2009-Vollversion.exe")
blockinput(1)
winwait ("WinFuture Update Pack für Windows XP SP3 (Oktober 2009)")
sleep(4000)
controlclick("WinFuture Update Pack für Windows XP SP3 (Oktober 2009)", "Weiter" , "TButton4" )
sleep(2000)
controlclick("WinFuture Update Pack für Windows XP SP3 (Oktober 2009)", "Ich stimme zu" , "TRadioButton2" )
sleep(2000)
controlclick("WinFuture Update Pack für Windows XP SP3 (Oktober 2009)", "Weiter" , "TButton3" )
sleep(2000)
controlclick("WinFuture Update Pack für Windows XP SP3 (Oktober 2009)", "Automatisch" , "TRadioButton2" )
sleep (1000)
controlclick("WinFuture Update Pack für Windows XP SP3 (Oktober 2009)", "Weiter" , "TButton3" )
sleep (500)
WinSetTitle("WinFuture Update Pack für Windows XP SP3 (Oktober 2009)", "" , "Installation123")
winwait ("Neu starten")
blockinput (0)
controlclick ("Neu starten" , "Jetzt neu starten" , "TButton1") ;genau hier!!
sleep (1000)
EndFunc
Func _install2()
blockinput(1)
WinWaitclose("Installation123"); keine Ahnung ob man diese Zeile dann noch braucht
sleep (2000)
controlclick("WinFuture Update Pack für Windows XP SP3 (Oktober 2009)", "Jetzt nicht neu starten", "TCheckBox1" )
sleep (1000)
controlclick("WinFuture Update Pack für Windows XP SP3 (Oktober 2009)", "Beenden" , "TButton2" )
blockinput (0)
EndFunc
Func _install3()
;.........Programm3
EndFunc
Func _install4()
;.........Programm4
EndFunc
Hi!
Du bist blutiger Anfänger was!? (ist nicht böse gemeint, schließlich fängt jeder mal an)
Du musst sie natürlich Compilieren.
Heißt in eine deinScriptName.exe umwandeln.
Diese kannst du dann wie in den anderen Beiträgen schon beschrieben, über die Registry starten lassen.
Aber ich denke einfacher für dich ist es, wenn du eine Verknüpfung im Autostartordner erstellst.
edit:
Wenn du es so machst wie ich es beschrieben habe, dann musst du bevor du die Installation startest die Zahl in die Datei schreiben.
Es könnte ja sein, dass diese Installation neu startet. Dann wird dein Script abgebrochen und wenn der PC wieder gestartet ist, würde er diese Installaton wieder aufrufen.
Einfacher wäre es immer noch dir zu helfen, wenn du etwas von deinem Code zeigen würdest.
LG
Concara
JA ist trotzdem die gleiche vorgehensweise!
Du brauchst eine Datei die dir sagt wo dein Script war.
Wenn du nur eine Datei hast dann musst du halt in dieser die einzelnen Istallationen als Funktionen gestalten, um sie einzeln ansprechen zu können.
[EDIT]
So wie du dir das wahrscheinlich vorstellst geht es meines Wissens nach nicht.
Das wenn das Script sagen wir mal in Zeile 100 unterbrochen wurde, dass es dann nach einem neustart in der Zeile 101 weiter geht.
[Edit2]
Hier ein weiteres Beispiel wo alles in einer Datei ist.
$file = FileOpen("wieweitsinddieinstallationen.txt", 0)
$nummer = FileReadLine($file,1)
FileClose($file)
$nummer += 1
While $nummer <> 5
If $nummer = 1 Then
_install1()
ElseIf $nummer = 2 Then
_install2()
ElseIf $nummer = 3 Then
_install3()
ElseIF $nummer = 4 Then
_install4()
EndIf
$file = FileOpen("wieweitsinddieinstallationen.txt", 2)
FileWriteLine($file,$nummer)
FileClose($file)
$nummer += 1
WEnd
Func _install1()
;.........Programm1
EndFunc
Func _install2()
;.........Programm2
EndFunc
Func _install3()
;.........Programm3
EndFunc
Func _install4()
;.........Programm4
EndFunc
Hi!
Das glaub ich dir. Du hältst dich aber auch ziemlich bedeckt.
Wartest du auf einen neuen Vorschlag?
Hast du schon etwas ausprobiert?
Wie sieht dein bisheriger Code aus?
Sollen wir in die Galskugel schauen?
OK genug ich denke du weißt was ich meine.
Zu meinem Vorschlag.
Du hast mehrer selbständige Installtionsscrpte in Autoit erstellt oder nur eines, wo alle Programme nacheinander abgearbeitet werden!?
Wenn du mehrer hast dann erstell ein Script mit dem du sie nacheinander startest. Bei nur einer Autoit Datei musst du den Code dazwischen plazieren.
Beispiel für selbständige (einzelne) Installationsscripte:
Dim $scripte[4] =["installation1", "installation2", "installation3", "installation4"]
$file = FileOpen("wieweitsinddieinstallationen.txt", 0)
$nummer = FileReadLine($file,1)
FileClose($file)
$nummer += 1
While $nummer <> 5
;~ RunWait($scripte[$nummer-1])
ConsoleWrite($scripte[$nummer-1] & @CRLF)
$file = FileOpen("wieweitsinddieinstallationen.txt", 2)
FileWriteLine($file,$nummer)
FileClose($file)
$nummer += 1
WEnd
ShellExecute("wieweitsinddieinstallationen.txt")
Hi!
Ich glaube er meint ein Script zu Offline Installtion von der Zeitschrift CT.
Array[0] sollt aber trotzdem funktionieren!
[autoit]
#include <String.au3>
#include <array.au3>
Dim $aFile[5] = ["String ohne Suchziel", "CN=S0myT001,OU=Servers,OU=_Global,OU=E0my,DC=test,DC=my,DC=net Terminal Server", "CN=S0myT010,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Citrix Server", "CN=S0myT011,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Citrix Server", "CN=s0myt020,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Terminalserver my "]
For $i = 0 To 4
$aFile[$i] = StringStripWS($aFile[$i], 7)
$Array = _StringBetween($aFile[$i], 'CN=', ',')
_ArrayDisplay($Array)
If IsArray ($Array) Then
ConsoleWrite($Array[0] & @CRLF)
;GUICtrlCreateListViewItem($Array[0], $hListView)
EndIf
Next
LG
Concara
HI!
Die Array[1] war nur ein Beispiel!
Wenn Arraydislay funktioniert dann siest du in der obersten Zeile die Nummer die du angeben musst. Ich nehme an bei dir ist es die 0 -> $Array[0]
Eine Überprüfung ob es ein Array ist wäre auch nicht schlecht.
If IsArray($Array) Then ;z.B.
Hi !
Wie wäre es wenn du dem Array eine Nummer gibst!?
[autoit]
For $i = 2 To $aFile[0] - 2
$aFile[$i] = StringStripWS($aFile[$i], 7)
$Array = _StringBetween($aFile[$i], 'CN=', ',')
_ArrayDisplay($Array)
GUICtrlCreateListViewItem($Array[1], $hListView) ;<------ Hier zb.
Next
HI!
Du müsstest dein Script dazu bringen, dass es nach einem Neustart sich selber wieder startet z.b.: Autostart.
Und im Script in eine Datei schreiben wie weit es schon war!
Das dann beim Start einlesen und beim nächsten Punkt in deinem Script weiter machen.
Probleme gibt es aber dabei genug!
z.B: welcher Benutzer ist angemeldet, ist die vorhergende Installation wirklich abgeschlossen usw.
LG
Concara
Hi!
Hier ein Script was dir helfen könnte.
Bei Runas und auch bei RunAsWait muss man sehr genau achten, auf die Pfadangaben im Script, das man ausführen möchte!
#AutoIt3Wrapper_Change2CUI=y
#NoTrayIcon
If $CmdLine[0] > 1 Then
ConsoleWrite(@CRLF & "Error: Zuviele Parameter angegeben!" & @CRLF)
_text()
Exit
ElseIf $CmdLine[0] < 1 Then
ConsoleWrite(@CRLF & "Error: Keine Datei zum Starten angegeben!" & @CRLF)
_text()
Exit
EndIf
If $CmdLine[1] = "/?" Or $CmdLine[1] = "-?" Or $CmdLine[1] = "--help" Then
_text()
Exit
EndIf
Local $run
Local $username = "Administrator"
Local $domain = "deine.com"
Local $password = "Passwort"
Local $batchfile = $CmdLine[1]
$run = RunAs($username, $domain, $password, 0, $batchfile, @WindowsDir & "\temp", @SW_HIDE)
If @error Then
ConsoleWrite("Error: " & $CmdLine[1] & " konnte nicht gestartet werden")
Exit
EndIf
ConsoleWrite("PID: " & $run)
Func _text()
ConsoleWrite(@CRLF & "Startet die angegebene Datei im Hintergrund mit Administratorrechten" & @CRLF & @CRLF & " " & @ScriptName & ' "[Laufwerk:][Pfad]Dateiname" [Parameter]"' & @CRLF & " Beispiel: " & @ScriptName & ' "c:\windows\system32\ping.exe localhost"' & @CRLF & @CRLF & "Bei Erfolg wird die PID angezeigt" & @CRLF)
EndFunc
Hi!
Danke für die Rückmeldungen!
@simon: Ich hab nicht verstanden was du meinst!?
funkey:
Danke, deine Funktion funktioniert im Gegensatz zu dem was ich gebastelt habe immer. Zuminstest soweit ich das getestet habe.
Mit deiner Funktion funktionierts auch auf Server 2003.
Warum das von mir nicht funktioniert weiß ich leider immer noch nicht
Hier das Script mit Funkey Funktion.
#Include <Array.au3>
#include <Constants.au3>
#include <WinAPI.au3>
#include <Date.au3>
$ProcessID = _WinAPI_GetCurrentProcessID()
;HotKey für das Beenden vom Server
HotKeySet("{ESC}","_Shutdown")
Dim $ip[5]
$ip[1] = @IPAddress1
$ip[2] = @IPAddress2
$ip[3] = @IPAddress3
$ip[4] = @IPAddress4
$input = InputBox("Select IP","1 " & $ip[1] & @CR & "2 " & $ip[2] & @CR & "3 " & $ip[3] & @CR & "4 " & $ip[4], "1")
If $input > 4 Or $input < 1 Then Exit
; Variablen
$ServerIP = $ip[$input]
$ServerPort = 443
$ConnectedSocket = -1
Dim $line2
;TCP starten
TCPStartup()
;MainSocket erstellen
$MainSocket = TCPListen($ServerIP, $ServerPort )
;Bei Fehlschlag Server beenden
If $MainSocket = -1 Then Exit
While 1
$ConnectedSocket = TCPAccept( $MainSocket)
If $ConnectedSocket >= 0 Then
$aIP = _GetConnectionFromPort($ServerPort)
TrayTip("Info",$aIP[0], 5)
$file = FileOpen(@ScriptDir & "\Connections.txt",9)
FileWrite($file, _DateTimeFormat( _NowCalc(),2) & " " & @HOUR & ":" & @MIN & ":" & @SEC & " " & $aIP[0] & @CRLF)
FileClose($file)
TCPCloseSocket($ConnectedSocket)
EndIf
WEnd
Func _Shutdown()
ShellExecute(@ScriptDir & "\Connections.txt")
TCPCloseSocket($ConnectedSocket)
TCPShutdown()
Exit
EndFunc
Func _GetConnectionFromPort($sPort = '5900')
; funkey 17.06.2009
; gibt IP oder Namen eines verbundenen PC's abhängig vom Port zurück
; Standard-Port ist 5900 für VNC, 3389 wäre für Remotedesktop ('mstsc.exe')
Local $sErgebnis, $aPort
Local $pid = Run(@ComSpec & " /c " & 'netstat -np TCP |findstr ":'&$sPort&'"', "", @SW_HIDE, $STDOUT_CHILD)
Do
$sErgebnis &= StdoutRead($pid)
Until @error
$aPort = StringSplit($sErgebnis, @CRLF, 3)
For $i = UBound($aPort) - 1 To 0 Step -1
If StringInStr($aPort[$i], 'HERGESTELLT') Then
$aPort[$i] = StringRegExpReplace($aPort[$i], '(\s+)(\S+)(\s+)(\S+)(\s+)(\S+):(\S+)(\s+)(\S+)', '$6')
Else
_ArrayDelete($aPort, $i)
EndIf
Next
If Not IsArray($aPort) Then Return SetError(1, 0, "")
Return $aPort
EndFunc
Hi Leute!
Ich habe mir ein Programm zusammen gestellt, das auf einem TCP Port horcht und auf eine Verbindung wartet.
Zweck des Programms soll sein, herauszufinden ob Anfragen an diesen Port gestellt werden.
Bei mir ist das der Port 443, der für HTTPS Verbindungen verwendet wird.
Meine Fragen:
1.) Kennt jemand ein fertiges Programm, das mir diese Möglichkeit bietet? Es sollte allerdings keinen Sniffer wie Wireshark oder der gleichen sein. Es sollte auch mehrere Netzwerkadapter unterstützen.
2.) Mein Programm funktioniert soweit recht gut. Problem ist nur, dass es manchmal vorkommt, dass beim ersten Verbindungsversuch keine IP Adresse ausgegeben wird. Sprich der Aufruf des Netstat Befehls kein Ergebnis bringt.
3.) Und größtes Problem für mich. Das Script funktioniert unter Windows Server 2003 nicht. Unter WinXP funktoniert es, bis auf das unter Punkt 2 beschriebenen Problem.
#include <Constants.au3>
#include <WinAPI.au3>
#include <Date.au3>
$ProcessID = _WinAPI_GetCurrentProcessID()
;HotKey für das Beenden vom Server
HotKeySet("{ESC}","_Shutdown")
Dim $ip[5]
$ip[1] = @IPAddress1
$ip[2] = @IPAddress2
$ip[3] = @IPAddress3
$ip[4] = @IPAddress4
$input = InputBox("Select IP","1 " & $ip[1] & @CR & "2 " & $ip[2] & @CR & "3 " & $ip[3] & @CR & "4 " & $ip[4], "1")
If $input > 4 Or $input < 1 Then Exit
; Variablen
$ServerIP = $ip[$input]
$ServerPort = 443
$ConnectedSocket = -1
Dim $line2
;TCP starten
TCPStartup()
;MainSocket erstellen
$MainSocket = TCPListen($ServerIP, $ServerPort )
;Bei Fehlschlag Server beenden
If $MainSocket = -1 Then Exit
While 1
$ConnectedSocket = TCPAccept( $MainSocket)
If $ConnectedSocket >= 0 Then
$commandline = @ComSpec & ' /A /C netstat -a -n -o| find "' & $ServerIP & ":" & $ServerPort & '"'
$id = Run($commandline, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
While 1
$line = StdoutRead($id)
If @error Then ExitLoop
;~ If $line <> "" Then
If StringInStr($line, " " & $ProcessID) = True And StringInStr($line,"0.0.0.0") = False Then ;And StringInStr($line,"HERGESTELLT") = True
$line2 = $line2 & $line
EndIf
;~ EndIf
Wend
;~ $line2 = StringRegExpReplace($line2, "[" & Chr(13) & "ABCDEFGHIJKLMNOPQRSTUVWXYZ]", "")
;~ $line2 = StringReplace($line2,Chr(13), "?")
;~ $line2 = StringReplace($line2,Chr(10), "?")
$line2 = StringRegExpReplace($line2, "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]", "")
$line2 = StringStripWS($line2,5)
$line2 = StringTrimLeft($line2, StringInStr($line2,Chr(13),"",-2))
TrayTip("Info",$line2, 5)
$file = FileOpen(@ScriptDir & "\Connections.txt",9)
;~ FileWriteLine($file, _DateTimeFormat( _NowCalc(),2) & " " & @HOUR & ":" & @MIN & ":" & @SEC & " " & $line2 & @CRLF)
FileWrite($file, _DateTimeFormat( _NowCalc(),2) & " " & @HOUR & ":" & @MIN & ":" & @SEC & " " & $line2 & @CRLF)
FileClose($file)
TCPCloseSocket($ConnectedSocket)
$line2 = ""
$line = ""
$id = ""
EndIf
WEnd
Func _Shutdown()
ShellExecute(@ScriptDir & "\Connections.txt")
TCPCloseSocket($ConnectedSocket)
TCPShutdown()
Exit
EndFunc
Hi!
Hast du nach der certutil.exe gegoogelt?
Eher nicht, nehme ich an.
Bekommen dust du sie im Adminpack von Server 2003
http://www.microsoft.com/downloadS/details.aspx?FamilyID=c16ae515-c8f4-47ef-a1e4-a8dcbacff8e3&displaylang=en
Die Verwendung ist im Technet beschrieben.
http://technet.microsoft.com/en-us/library/…28WS.10%29.aspx
Einen Auszug aus dieser Seite, der dir weiterhelfen könnte.
To view the certificate of the user that has the serial number 26e0aaaf000000000004 in the store named My, type:
certutil -store -user My 26e0aaaf000000000004
Schau dir aber die Technetseite an, da du ja Maschinenzertifikate auslesen willst und nicht welche von Usern.
So noch ein kleines Beispiel aus der Hilfe von Autoit, wie man das ganze dann noch in einem Programm verwenden kann.
#include <Constants.au3>
Local $foo = Run("certutil -v -store -user My ", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $line
While 1
$line = StdoutRead($foo)
If @error Then ExitLoop
MsgBox(0, "STDOUT read:", $line)
Wend
While 1
$line = StderrRead($foo)
If @error Then ExitLoop
MsgBox(0, "STDERR read:", $line)
Wend
MsgBox(0, "Debug", "Exiting...")
[/autoit]Ich hoffe das war jetzt hilfreich für dich.
LG
Concara
Hi!
Nettes spiel.
Bei mir geht allerdings das Getreide "verlohren".
Ich habe einige Getriedefarmen aber ich bekomme kein Getreide dazu.
LG
Concara
Hi!
Deine Angaben sind etwas dürftig.
Was genau willst du machen?
Willst du ein Zertifikat exportieren,importieren?
Such mal im Internet nach Certutil.exe
Hi!
Eigendlich geht es schon mit Commandline Angaben.
[autoit]
Run('temp.exe x -o"C:\temp\temp" -y')
Wichtig ist das kein Abstand zwischen -o und der Pfadangabe ist!
LG
Concara
Edit:
Was ich noch vergessen habe zu Sagen.
Fehlende Ordner in der Angabe, werden von 7zip, sofern die rechte des Benutzers ausreichen, selbständig erstellt.
Heißt wenn der Ordner c:\temp\blabla angegeben wird und z.B.: blabla noch nicht vorhanden ist wird dieser automatisch erstellt.
Hast du das getestet? Ich bezweifele es schwer...Und auch den Edit glaube ich eigentlich nicht :D. Überzeug mich vom Gegenteil ;).
Johannes
Also ich habe das mit einem anderen Programm getestet.(Irfanview)
Ob ich dich damit überzeugen kann weiß ich auch nicht.(glaub ich eher wenig)
HI!
Meist lässt sich diese Sicherheitswarnung umgehen wenn du nicht ShellExecute verwendest, sondern run.
LG
Concara
Edit:
Und noch eine Möglichkeit gibt es.
Wenn du bevor du ShellExecute aufrufst ein zweites Script startest mit diesem Inhalt:
WinWait("Datei öffnen - Sicherheitswarnung","")
If Not WinActive("Datei öffnen - Sicherheitswarnung","") Then WinActivate("Datei öffnen - Sicherheitswarnung","")
WinWaitActive("Datei öffnen - Sicherheitswarnung","")
Sleep(100)
Send("{TAB 3}")
Sleep(100)
Send("{ENTER}")
Bei ShellExecute wartet nämlich das Script bis das Programm das du starten willst ausgeführt wird und dieses wird durch die Sicherheitswarnung unterbrochen.
Deshalb musst du das Script vorher starten, das unabhängig von deinem Hauptscript, diese Sicherheitswarnung beantwortet.
Run(@ScriptDir & "\Sicherheitswarnungbeantworten.exe") ;Sicherheitswarnungbeantworten.exe ist das Script von oben
ShellExecute("\\193.196.72.5\ProgrammeAutoit$\3ds Max 2009\Pool.lnk")