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

Beiträge von Surfy

  • Logfile Robocopy auslesen

    • Surfy
    • 13. Juli 2011 um 09:58

    Danke Dir! :thumbup:

  • CMD Robocopy

    • Surfy
    • 12. Juli 2011 um 16:12

    Danke Dir, Schnitzel!

    Lustig, das kann ich beim normalen kopieren reproduzieren ?(

    Jetzt geht das programm, aber es wird nichts kopiert *kopfkratz* Robocopy ist im System32 Verzeichniss, aber es wird weder ein Verzeichniss namens C:\Robocopy-Beispiel angelegt, noch kopiert falls ich es anlege ;(

  • Logfile Robocopy auslesen

    • Surfy
    • 12. Juli 2011 um 16:09

    Hallo zusammen

    Würde gerne ein Logfile auswerten, und das Ergebniss erhalten wieviel MB gelöscht werden, und wieviele zu kopieren sind.

    Das Logfile sieht so aus:


    Zitat

    -------------------------------------------------------------------------------
    ROBOCOPY :: Robust File Copy for Windows :: Version XP010
    -------------------------------------------------------------------------------

    Started : Tue Jul 12 16:04:15 2011

    Source : C:\Robocopy\Copy\Source\
    Dest : C:\Robocopy\Copy\Destion\

    Files : *.*

    Options : *.* /X /FP /L /S /E /COPY:DAT /PURGE /MIR /ZB /R:3 /W:1

    ------------------------------------------------------------------------------

    1 C:\Robocopy\Copy\Source\
    *EXTRA File 59 C:\Robocopy\Copy\Destion\cleaner.au3
    *EXTRA File 255824 C:\Robocopy\Copy\Destion\cleaner.exe
    *EXTRA File 2.1 m C:\Robocopy\Copy\Destion\Orca.Msi
    New File 79872 C:\Robocopy\Copy\Source\robocopy.exe

    ------------------------------------------------------------------------------

    Total Copied Skipped Mismatch FAILED Extras
    Dirs : 1 0 1 0 0 0
    Files : 1 1 0 0 0 3
    Bytes : 78.0 k 78.0 k 0 0 0 2.43 m
    Times : 0:00:00 0:00:00 0:00:00 0:00:00

    Ended : Tue Jul 12 16:04:15 2011

    Alles anzeigen


    Interressant wäre also nur die Zeilen " *EXTRA File" und die Zeilen mit "New File"

    Hat vielleicht jemand sowas schon mal gemacht? Es soll auf ein Directory compare hinauslaufen, mit über 20 GB Daten... Daher wäre ein Script schon klasse ;)

  • CMD Robocopy

    • Surfy
    • 12. Juli 2011 um 14:34

    Wenn ich das Ausführen will, erhalte ich folgende Fehler ;(


    C:\test\copy.au3(85,27) : ERROR: syntax error
    If NotNot @error
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\test\copy.au3(116,27) : ERROR: syntax error
    If NotNot @error
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\test\copy.au3(129,27) : ERROR: syntax error
    If NotNot @error
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\test\copy.au3 - 3 error(s), 0 warning(s)


    Was ist da falsch?

  • Trayicon Bereich updaten / refreshen

    • Surfy
    • 1. Juli 2011 um 13:29

    Herzlichen Dank an alle Beteiligten!

    Nun läufts wie geschmiert.

    Schnuffel, auch mit deiner Version ging es nicht, gleiche Fehlermeldung.

    Ich habe dann ein Include aus einem meiner geposteten Links verwendet:_RefreshTrayIcons.au3 Damit

    _RefreshTrayIcons.au3

  • Trayicon Bereich updaten / refreshen

    • Surfy
    • 30. Juni 2011 um 16:35
    Zitat

    Ich weiß ja nicht ob du vor hast Office 2010 im AKW aufzuspielen oder ob deine Benutzer 24/7 online sein müssen.

    Jo, dass ist vielleicht bissl übertrieben, aber macht ja auch spass - hab schon wieder viel gelernt.

    Ich hab jetzt eigentlich alles soweit gepackt - hatte nicht dran gedacht, dass ich im Service noch eine Exe starten kann, die die Executable mit ProcessWaitClose überwacht, und anschliessend den Systray refresht :)

    Der Service läuft unter Systemcontext, die Exe die den Service überwacht auch. Das einzige Problem ist, dass es einen Error gibt, wenn ein User sich während der Installation anmeldet:

    Autoit Error:

    Line 22 (File "C:\Program Files\ProzessWatch\reloader.exe")

    Error: Subscript used with non-Array variables

    Das blöde: an Zeile 22 ist gar nichts infrage kommendes:

    Hier der Quellcode der reloader.exe

    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=xxx\_Icons\awt_SECURITY_WARNING_0.ico
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Res_Comment=SystemTrayReloader
    #AutoIt3Wrapper_Res_Description=xx
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=xx
    #AutoIt3Wrapper_Res_Field=Made By|xx
    #AutoIt3Wrapper_Res_Field=Email| [email='xx@xx.com'][/email] 
    #AutoIt3Wrapper_Res_Field=Compile Date|%date% %time%
    #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #AutoIt3Wrapper_Run_After=copy "%in%" "..\..\Programs_Updates\AutoIt3Wrapper"
    #AutoIt3Wrapper_Run_After=copy "%out%" "..\..\Programs_Updates\AutoIt3Wrapper"
    #AutoIt3Wrapper_Run_After=copy "%in%" "c:\Program Files (x86)\autoit3\SciTE\AutoIt3Wrapper"
    #AutoIt3Wrapper_Run_After=aaCopy2Prod.exe "%scriptfile%.EXE" "%out%" "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper" "%in%" %fileversion% %fileversionnew%
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    ;#AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
    ;#AutoIt3Wrapper_Res_Field=Credits|wraithdu - Updating the Resource UDFs allowing other sections to be included.
    #cs ----------------------------------------------------------------------------
    AutoIt Version: 3.3.6.1
    Author: xxx
    Script Function:
    Template AutoIt script.
    #ce ----------------------------------------------------------------------------

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

    Opt("TrayIconHide", 1)
    ProcessWaitClose("ProZessWatch.exe")
    Local $iMode = Opt("WinTitleMatchMode", 4)
    Local $hControl = ControlGetHandle("[CLASS:Shell_TrayWnd]", "", "[CLASSNN:ToolbarWindow321]")
    Local $acSize = WinGetClientSize($hControl)
    For $x = 0 To $acSize[0] Step 5
    For $Y = 0 To $acSize[1] Step 5
    DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $hControl, "int", 0x0200, "wparam", 0, "lparam", BitOR($Y * 0x10000, BitAND($x, 0xFFFF)))
    Next
    Next

    [/autoit]
  • Trayicon Bereich updaten / refreshen

    • Surfy
    • 30. Juni 2011 um 11:35

    Ich sehe langsam mein Problem: Meine Exe was den Systray refreshen soll - läuft unter dem Usercontext der Softwareverteilung, und kommt so nicht an den Systray des eingeloggten Users heran.

    Da hilft wohl nur ein 2ter Service einrichten, der den refresh macht... :cursing:

  • Trayicon Bereich updaten / refreshen

    • Surfy
    • 30. Juni 2011 um 10:47

    Inzwischen habe ich Google nochmals intensiv beharkt:

    Das ist das aktuellste was ich gefunden habe:

    http://www.autoitscript.com/forum/topic/94…-refresh-redux/ bis Vista

    http://www.autoitscript.com/forum/topic/103871-systray-udf/ inkl Win7

    Dann gibts auch noch

    http://www.autoitscript.com/forum/topic/13704-systray-udf/

    http://www.autoitscript.com/forum/topic/74…reshsystemtray/

    Was haltet ihr von Link 1?

  • Trayicon Bereich updaten / refreshen

    • Surfy
    • 30. Juni 2011 um 08:05

    Ein Reboot ist nicht notwendig, es funktioniert auch so. Natürlich soll der Rollout über Nacht stattfinden, aber einige werden es sicher schaffen, den PC geloggt laufen zu lassen - um dann am nächsten Tag beglückt zu werden.


    [autoit]


    _refresh()
    Func _refresh()
    RUNWAIT (@COMSPEC & ' /c eventcreate /t information /so installer /id 100 /l application /d "Start of Trayrefresh triggered ',"",@SW_HIDE)
    Local $iMode = Opt("WinTitleMatchMode", 4)
    Local $hControl = ControlGetHandle("[CLASS:Shell_TrayWnd]", "", "[CLASSNN:ToolbarWindow321]")
    Local $acSize = WinGetClientSize($hControl)
    For $x = 0 To $acSize[0] Step 5
    For $Y = 0 To $acSize[1] Step 5
    DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $hControl, "int", 0x0200, "wparam", 0, "lparam", BitOR($Y * 0x10000, BitAND($x, 0xFFFF)))
    Next
    Next
    RUNWAIT (@COMSPEC & ' /c eventcreate /t information /so installer /id 100 /l application /d "End of Trayrefresh triggered ',"",@SW_HIDE)
    EndFunc

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

    Ich habe jetzt eine ausgelagerte Exe mit obenstehendem Code gemacht, die ich mit "Run" aufrufe. So bleibt wenigstens meine Exe nicht stehen, und die Installation geht weiter. Aber die Prozesse bleiben stehen! Dh der zweite Eventcreate Aufruf wird nie getriggert ;(

    Mit doppelklick geht das aber..

  • Trayicon Bereich updaten / refreshen

    • Surfy
    • 29. Juni 2011 um 15:00

    Nun stellt sich die Frage: gehe ich nach dem Prozess?

    [autoit]

    If ProcessExists("explorer.exe") Then

    [/autoit]

    oder WMI?

    [autoit]


    Local $sLoggedInUser = "", $sLoggedInDomain = "", $sResults = ""
    $objWMIService = ObjGet("winmgmts:" & "{impersonationLevel=impersonate}!\\localhost\root\cimv2")
    If IsObj($objWMIService) Then
    $colComputer = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
    For $objComputer In $colComputer
    $sLoggedInUser = $objComputer.UserName
    Next
    If StringInStr($sLoggedInUser,"\") Then
    $iSplit = StringInStr($sLoggedInUser,"\")
    $sLoggedInDomain = StringTrimRight($sLoggedInUser,(StringLen($sLoggedInUser) - $iSplit)+1)
    $sLoggedInUser = StringTrimLeft($sLoggedInUser,$iSplit)
    EndIf
    ;If $sLoggedInDomain <> "" Then $sResults &= "Logged in domain: " &$sLoggedInDomain &@CRLF
    If $sLoggedInUser = "" Then $sLoggedInUser = "n.a"
    Else
    $sLoggedInUser = "n.a"
    EndIf
    MsgBox(4096, "Test", $sLoggedInUser & " " & $sLoggedInDomain , 10)

    [/autoit]

    Oder Frage in der Registry den DefaultUserName ab? *verwirrtschau*

    [autoit]

    $RegUser = RegRead("HKLM\Software\Microsoft\Windows NT\CurrentVersion\WinLogon", "DefaultUserName")

    [/autoit]

    Was ist das zuverlässigste?

  • Trayicon Bereich updaten / refreshen

    • Surfy
    • 29. Juni 2011 um 14:30

    Hui, danke für die rege Beteiligung!

    Hintergrund:

    Ich habe zwei Programme, die in dem Systemtray angezeigt werden, auf dieser Basis:

    [ offen ] Verhindern dass mehrere Programme ausgeführt werden

    Erst kommt ein Fenster, das während der Deinstallation von Office 2003 angezeigt wird, danach wird ein Fenster eingeblendet während der Installation von Office 2010.

    Leider bleiben dann beide im Systemtray "sichtbar" Programm1 ist schon beendet, wird aber noch eine ganze weile im Systray angezeigt. Das ist insbesondere dann blöd, wenn die Migration vorbei ist, und der User eigentlich arbeiten könnte.

    Ziel ist natürlich, den Rollout/die Migration nachts laufen zu lassen, mit etwas glück sehen nicht viele oder niemand mein Kunstwerk ;)

    Daher bin ich hier nun an Programm3 - welches den Systray refreshen soll - damit die inaktiven kreierten Programme daraus verschwinden.

    Dazu reicht ein einmaliger Aufruf der Funktion! Aber der darf nicht crashen...

    Mit crashen meine ich: Das exe bleibt stehen, der Prozess beendet nicht - und die Migration geht nicht voran..

    Misterspeeds vorschlag geht wohl in die richtige Richtung: Abfragen ob ein User eingeloggt ist, und NUR dann die function aufrufen. Problem bleibt da der Runas Prozess der Software verteilung - der vielleicht dann anstelle eines Users connected wird.

    Wie kann man einen eingeloggten User erkennen? Muss das so komplex passieren wie zB hier? [ gelöst ] Angemeldeten Benutzer ermitteln (vom System-Konto)

  • Trayicon Bereich updaten / refreshen

    • Surfy
    • 29. Juni 2011 um 12:21

    danke fürs Helfen!


    Das ist schon der ganze Script!

    Der Script bzw die Exe wurde von der Softwareverteilung gestartet, als kein User eingeloggt war.

    Vielleicht hat das etwas damit zu tun? Deine Idee hat was - nur würde mir ein einmaliger Aufruf völlig ausreichen:

    Dh eine Schlaufe die 30sek läuft, und dann unbeachtet dessen, wo die Schleife gerade steht, sich beenden kann.

    Eigentlich hilft der ganze Trayrefresh nur, wenn ein User aktiv eingeloggt ist. Wichtig ist also nur, dass die Exe nicht hängen bleibt, wenn kein User eingeloggt ist.

    Da die Softwareverteilung auch mit einem Runas arbeitet, würde man mit @UserName etc wohl in die irre geführt.


    Surfy

  • Trayicon Bereich updaten / refreshen

    • Surfy
    • 29. Juni 2011 um 09:48

    Hallo zusammen

    Im englischen Forum hatte ich diese Zeilen gefunden, und adaptiert/übernommen:

    [autoit]

    Local $iMode = Opt("WinTitleMatchMode", 4)
    Local $hControl = ControlGetHandle("[CLASS:Shell_TrayWnd]", "", "[CLASSNN:ToolbarWindow321]")
    Local $acSize = WinGetClientSize($hControl)
    For $x = 0 To $acSize[0] Step 5
    For $Y = 0 To $acSize[1] Step 5
    DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $hControl, "int", 0x0200, "wparam", 0, "lparam", BitOR($Y * 0x10000, BitAND($x, 0xFFFF)))
    Next
    Next

    [/autoit]

    Quelle: http://www.autoitscript.com/forum/topic/10…__1#entry728342

    Das funktioniert insofern, das inaktive Prozesse im Systemtray ausgeblendet werden, bzw verschwinden. Wie es genau funktioniert, weiss ich allerdings nicht, die paar Zeilen scheinen jeden Systemtray durchzugehen?! Das übersteigt eindeutig meinen horizont..

    Leider scheint es nun vorzukommen, dass meine Exe hängen bleibt, dh es passiert einfach nichts mehr ;(

    Was ist an obenstehendem falsch? Wieso kann es hängen bleiben? Wie kann ich es so verpacken, dass es in einer Schlaufe aufgerufen wird, die nur 30 sek lang läuft, und sich dann beendet egal was innerhalb der Schlaufe passiert?

    Oder gibt es da noch einen anderen Ansatz?

    Ich hoffe ihr wisst rat!

    Surfy

  • Verhindern dass mehrere Programme ausgeführt werden

    • Surfy
    • 9. Juni 2011 um 13:12

    Danke Dir Water!

    Ich werde die Exe als Service einrichten, wenn alles fertig ist, beenden und löschen..

  • Verhindern dass mehrere Programme ausgeführt werden

    • Surfy
    • 9. Juni 2011 um 12:57

    Danke für den Tip! Also ungefähr so:

    [autoit]

    while 1
    $list = ProcessList("winword.exe")
    for $i = 1 to $list[0][0]
    ;msgbox(0, $list[$i][0], $list[$i][1])
    RunAs ( 'MyUser', 'MyDomain', 'MyPassWord', 0, @ComSpec & ' /c taskkill.exe /F /IM ' & $list[$i][0], @WindowsDir ,@SW_HIDE )
    next
    ToolTip("Office 2010 Migration is active, Kills: " &$i, 550, 0)
    Sleep(5000)
    $list = ProcessList("excel.exe")
    for $i = 1 to $list[0][0]
    ;msgbox(0, $list[$i][0], $list[$i][1])
    RunAs ( 'MyUser', 'MyDomain', 'MyPassWord', 0, @ComSpec & ' /c taskkill.exe /F /IM ' & $list[$i][0], @WindowsDir ,@SW_HIDE )
    next
    Sleep(5000)
    WEnd

    [/autoit]

    Das funktioniert :rock:

    Wäre es irgendwie noch möglich, den Killcounter aus dem ersten Beispiel zu integrieren?:

    [autoit]

    $i += 1
    ToolTip("Office 2010 Migration is active, Kills: " &$i, 550, 0)

    [/autoit]

    Leider reicht dafür mein Skill nicht ;(

  • Verhindern dass mehrere Programme ausgeführt werden

    • Surfy
    • 9. Juni 2011 um 12:23

    Hallo zusammen

    Ich würde gerne im Rahmen der Officemigration verhindern, dass Office Komponten auf dem PC gestartet werden können, während des Setups/Remove.

    Der einzige weg der mir einfällt, ist nun mehrere Exefiles zu machen, nach diesem Muster, die jeweils einen Prozess abfragen:

    [autoit]

    $i = 0
    while 1
    ProcessWait("winword.exe")
    RunAs ( 'myuser', 'mydomain', 'mypassword', 0, @ComSpec & ' /c taskkill.exe /F /IM winword.exe', @WindowsDir ,@SW_HIDE )
    $i += 1
    ToolTip("Office 2010 Migration is active, Kills: " &$i, 550, 0)
    Sleep(5000)
    WEnd

    [/autoit]

    Gibt es eine Möglichkeit, dies innerhalb einer Exe Datei abzufangen? Wie? So dass weder Outlook.exe, Winword.exe, Excel.exe gestartet werden können?

    Surfy

  • Active Directory Funktionen - Neue Version 1.5.0.0 freigegeben!

    • Surfy
    • 5. Mai 2011 um 17:57

    woah woah - was für geniale sachen - die es hier gibt :thumbup:

    Ich habe gerade den fall, dass ich via ADSI Abfrage, den Full qualified Computername (workstation.domain.com) abfragen soll.

    Nur habe ich keinen blassen, was zb in FQDNToDisplayname genutzt wird *kopfkratz*

    Ist das eine AutoIt ADSI abfrage?

  • Effektive Ordnerberechtigungen auslesen

    • Surfy
    • 15. Februar 2011 um 15:54

    I

    ch bin leider noch ein ziemlicher AutoIt Noob - aber vielleicht kann ich Dir ja doch ein paar denkanstösse geben. Anscheinend willst Du die vollen Angaben zu den Permissions... Ich glaube da brauchst Du dann mehr wie WMI :huh:

    Mit den komandozeilentools subinacl und setacl kann man die berechtigung ausgeben lassen, auf den Schirm, und DOS gerecht natürlich auch zb in eine Datei, um dass dann so weiter zu bearbeiten.

  • Textdatei zeilenweise auswerten

    • Surfy
    • 1. Februar 2011 um 16:34

    Herzlichen Dank! Damit gehts :rock:

    Danke Dir Schnitzel & natürlich auch allen anderen Helfern ;)

  • Textdatei zeilenweise auswerten

    • Surfy
    • 1. Februar 2011 um 16:18

    Anbei die Datei:

    Ich habe den Namen natürlich in dem Script jeweils angepasst.

    Dateien

    server.txt 467 Byte – 298 Downloads

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™