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

Beiträge von casi4712

  • eingebundenes Powershell macht plötzlich Probleme

    • casi4712
    • 26. Mai 2024 um 02:38

    Nichtsdestotrotz würde mich mal interessieren warum mit meinem Powershellansatz die txt datei nicht in das Temp verzeichnis geschrieben wird, die temp PS Datei alleine funktioniert jedenfalls:


    AutoIt
    Case $AllActivePCButton
        $FileName = "AllActivPC.txt"
    
        $sScript = _
            '$Computers = Get-ADComputer -Filter {Name -like ''A*'' -or Name -like ''N*''}' & @CRLF & _
            '$Jobs = @()' & @CRLF & _
            'foreach ($Computer in $Computers) {' & @CRLF & _
            '    if ($Computer.Name -ne $null -and $Computer.Name -ne '''') {' & @CRLF & _
            '        $Jobs += Start-Job -ScriptBlock {' & @CRLF & _
            '            param($Computer)' & @CRLF & _
            '            if (Test-Connection -ComputerName $Computer.Name -Count 1 -Quiet) {' & @CRLF & _
            '                $Computer.Name' & @CRLF & _
            '            }' & @CRLF & _
            '        } -ArgumentList $Computer' & @CRLF & _
            '    }' & @CRLF & _
            '}' & @CRLF & _
            '$Results = $Jobs | ForEach-Object {$_ | Wait-Job | Receive-Job}' & @CRLF & _
            '$OnlineComputers = $Results | Where-Object { $_ -ne $null }' & @CRLF & _
            '$OutputFilePath = "' & @TempDir & '\computers.txt"' & @CRLF & _
            'if ($OnlineComputers) {$OnlineComputers | Out-File -FilePath $OutputFilePath -Force} else {}'
        ExecutePowerShellScript($sScript, $FileName)
        .
        .
        
        
       Func ShowDomPCsActive($script, $FileName)
        ; Splash-Screen anzeigen
        SplashTextOn("Splash", "Liste wird geholt !!", 300, 50, -1, -1, 33, "", 12)
        WinMove("Splash", "", (@DesktopWidth-300)/2, (@DesktopHeight-50)/2)
    
        ; Define the path for the PowerShell script
        Local $PsScriptPath = @TempDir & "\getcomputers.ps1"
        Local $OutputFilePath = @ScriptDir & "\lists\" & $FileName
    
        ; Write the script content to the file
        Local $fH = FileOpen($PsScriptPath, $FO_OVERWRITE)
        If $fH = -1 Then
            MsgBox(16, "Error", "Failed to open the file for writing: " & $PsScriptPath)
            SplashOff() ; Splash-Screen schließen
            Return
        EndIf
    
        FileWrite($fH, $script)
        FileClose($fH)
    
        ; Run the PowerShell script and save the output to the specified file
        ;RunWait(@ComSpec & " /c powershell -ExecutionPolicy Bypass -File """ & $PsScriptPath & """ > """ & $OutputFilePath & """", @SystemDir, @SW_show)
     Local $command = 'powershell -ExecutionPolicy Bypass -File "' & @TempDir & '\getcomputers.ps1"'
    	 ConsoleWrite("Generated Command: " & $command & @CRLF)
        RunWait($command, @TempDir, @SW_SHOW)
        ; Splash-Screen schließen
        SplashOff()
    
        ; Check if the output file was created
        If Not FileExists($OutputFilePath) Then
            MsgBox(16, "Error", "Failed to create the output file: " & $OutputFilePath)
            Return
        EndIf
    
        ; Read the content of the new file
        Local $ComputerList = FileRead($OutputFilePath)
    
        ; Sort the list
        Local $ComputerArray = StringSplit(StringStripWS($ComputerList, 3), @CRLF, 1)
        _ArraySort($ComputerArray, 0, 0, 0, 1) ; Sort the list
    
        ; Set the host file path to the new file
        $hostFilePath = $OutputFilePath
    
        ; Update the GUI with the sorted list
        GUICtrlSetData($Edit1, "")
        For $i = 1 To $ComputerArray[0]
            If $ComputerArray[$i] <> "" Then
                GUICtrlSetData($Edit1, $ComputerArray[$i] & @CRLF, 1)
            EndIf
        Next
    EndFunc
    Alles anzeigen

    denke fehlt wieder nur ein '' oder so, vielleicht siehts ja jemand, denke das wär erst mal ok für mich


    lg und schönen Sonntag

  • eingebundenes Powershell macht plötzlich Probleme

    • casi4712
    • 25. Mai 2024 um 17:20

    okidoki dann weiss ich Bescheid, mir wuede immer gesagt dass in Autoit die Multitasking Fähigkeiten eher beschränlt sind...


    lg

  • eingebundenes Powershell macht plötzlich Probleme

    • casi4712
    • 25. Mai 2024 um 14:04

    okidoki werde ich mir mal anschauen, macht natürlich nur Sinn wenn dass auch entsprechend parallel abegerabeitet wird, wie in meinem PS, sonst wird es wohl ewig dauern;)


    lg und schönes Weekend

  • eingebundenes Powershell macht plötzlich Probleme

    • casi4712
    • 24. Mai 2024 um 18:13

    recht herzlichen Dank

  • eingebundenes Powershell macht plötzlich Probleme

    • casi4712
    • 24. Mai 2024 um 17:33

    ah ok, hab ichs wieder mal zu kompliziert gemacht, gibt es für diese UDF vielleicht eine Dokumentation, wäre zumindest interessant. Bezüglich meines Scriptteils was aktive PC finden soll, habe ich bislang folgendes, aber das hängt irgendie, obwohl das Powershell alleine funktioniert. Vielleicht sihet ja da jemand den Fehler:


    AutoIt
    .
    .
    Case $AllServerButton
                ShowDomPCs('Get-ADComputer -Filter * -Property Name,OperatingSystem | Where-Object { $_.OperatingSystem -like ''*Server*'' } | Select-Object -ExpandProperty Name', 'allServer.txt')
    
            Case $AugiasPCButton
               ShowDomPCs('Get-ADGroupMember -Identity "Augias-PC" -Recursive | Where-Object { $_.objectClass -eq ''computer'' } | Select-Object -ExpandProperty Name', 'augiasPC.txt')
    
    
    Case $AllActivePCButton
    		 Global Const $sScriptDir = @ScriptDir
    		 Global Const $filename = "computers.txt"
             Global Const $sTempPSFile = @TempDir & "\temp.ps1"
    
             Global Const $sCMD = '$ScriptDir = "' & $sScriptDir & '"' & @CRLF & _
    			'$Computers = Get-ADComputer -Filter "Name -like ''A*''"' & @CRLF & _
    			'$Jobs = @()' & @CRLF & _
    			'foreach ($Computer in $Computers) {' & @CRLF & _
    			'    if ($Computer.Name -ne $null -and $Computer.Name -ne '''') {' & @CRLF & _
    			'        $Jobs += Start-Job -ScriptBlock {' & @CRLF & _
    			'            param($Computer, $ScriptDir)' & @CRLF & _
    			'            if (Test-Connection -ComputerName $Computer.Name -Count 1 -Quiet) {' & @CRLF & _
    			'                $Computer.Name | Out-File -FilePath (Join-Path -Path $ScriptDir -ChildPath "computers.txt") -Append' & @CRLF & _
    			'            }' & @CRLF & _
    			'        } -ArgumentList $Computer, $ScriptDir' & @CRLF & _
    			'    } else {' & @CRLF & _
    			'    }' & @CRLF & _
    			'}' & @CRLF & _
    			'$Results = $Jobs | ForEach-Object {' & @CRLF & _
    			'    $_ | Wait-Job | Receive-Job' & @CRLF & _
    			'}' & @CRLF & _
    			'$OnlineComputers = $Results | Where-Object { $_ -ne $null }' & @CRLF & _
    			'$OutputFilePath = (Join-Path -Path $ScriptDir -ChildPath "' & $Filename & '")'
    		   ; 'if ($OnlineComputers) {' & @CRLF & _
    		   ; '    $OnlineComputers | Out-File -FilePath $OutputFilePath -Force' & @CRLF & _
    			;'} else {' & @CRLF & _
    			;'}'
    
    ShowDomPCs($sCMD, $FileName)
    		.
    		.
    		Func ShowDomPCs($sCmd, $filename)
        ; Splash-Screen anzeigen
        SplashTextOn("Splash", "Liste wird geholt !!", 300, 50, -1, -1, 33, "", 12)
        WinMove("Splash", "", (@DesktopWidth-300)/2, (@DesktopHeight-50)/2)
        Local $outputFilePath = @ScriptDir & "\lists\" & $filename
    
        ; PowerShell-Skript vorbereiten
        Local Const $sKey32 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
        Local Const $sKey64 = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
        Local Static $sKey = @CPUArch = 'X64' ? $sKey64 : $sKey32
        Local Static $sPSexe = RegRead($sKey, 'Path')
        Local $sPathTMP = StringFormat('%s\__%s%s%s%s%s%s%s.ps1', @TempDir, @YEAR, @MON, @MDAY, @HOUR, @MIN, @SEC, @MSEC)
        Local $fH = FileOpen($sPathTMP, 2 + 8 + 128)
        FileWrite($fH, $sCmd)
        FileClose($fH)
    
        ; PowerShell-Skript ausführen
        Local $sRun = StringFormat('%s -ExecutionPolicy UnRestricted -File %s', $sPSexe, $sPathTMP)
    	Local $fullPsCommand = $sRun & ' if ($OnlineComputers) {$OnlineComputers | Out-File -FilePath "' & $OutputFilePath & '" -Force } else {}'
    
        Local $iPID = Run($sRun, @ScriptDir, @SW_HIDE)
    		While ProcessExists($iPID)
    			Sleep(350)
    		WEnd
        FileDelete($sPathTMP)
    
        ; Überprüfen, ob die Datei erstellt wurde und keine zusätzlichen Leerzeilen enthält
        If FileExists($outputFilePath) Then
            Local $ComputerList = FileRead($outputFilePath)
            ; Entfernen Sie alle Leerzeilen und trimmen Sie die Whitespaces
            Local $ComputerArray = StringSplit(StringStripWS($ComputerList, 3), @CRLF, 1)
            If $ComputerArray[0] = 0 Then
                MsgBox(16, "Fehler", "Keine Computer gefunden.")
                SplashOff()
                Return False
            EndIf
            _ArraySort($ComputerArray, 0, 0, 0, 1) ; Sortiere die Liste
    
            ; Löschen Sie den Inhalt des Edit-Feldes und fügen Sie die sortierte Liste hinzu
            GUICtrlSetData($Edit1, "")
            For $i = 1 To $ComputerArray[0]
                If $ComputerArray[$i] <> "" Then
                    GUICtrlSetData($Edit1, $ComputerArray[$i] & @CRLF, 1)
                EndIf
            Next
    
            FileCopy($outputFilePath, @ScriptDir & "\" & $filename, 1) ; 1 = Überschreibe bestehende Datei
        Else
            MsgBox(48, "Fehler", "Die Datei '" & $filename & "' wurde nicht erstellt.")
            SplashOff()
            Return False
        EndIf
    
        ; Splash-Screen schließen
        SplashOff()
       Return True
    EndFunc
    Alles anzeigen


    lg und ein schönes Wochenende

  • eingebundenes Powershell macht plötzlich Probleme

    • casi4712
    • 23. Mai 2024 um 23:32

    tja keine Ahnung ob mit oder ohne zusätzliche ' ging so nicht, jetzt funktioniert es mit dieser Variante, wenn auch unschön.


    AutoIt
       Case $AllDomPCsWithAButton
                ShowDomPCs('Get-ADComputer -Filter {Name -like "A*"} | Select-Object -ExpandProperty Name', 'alldompcA.txt')
    
            Case $AllLapButton
                ShowDomPCs('Get-ADComputer -Filter {Name -like "N*"} | Select-Object -ExpandProperty Name', 'alldompcLAP.txt')
                
                .
                .
      Func ShowDomPCs($sCmd, $filename)
        ; Splash-Screen anzeigen
        SplashTextOn("Splash", "Liste wird geholt !!", 300, 50, -1, -1, 33, "", 12)
        WinMove("Splash", "", (@DesktopWidth-300)/2, (@DesktopHeight-50)/2)
      $hostFilePath = @ScriptDir & "\lists\" & $fileName
        ; PowerShell-Skript vorbereiten
        Local Const $sKey32 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
        Local Const $sKey64 = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
        Local Static $sKey = @CPUArch = 'X64' ? $sKey64 : $sKey32
        Local Static $sPSexe = RegRead($sKey, 'Path')
        Local $sPathTMP = StringFormat('%s\__%s%s%s%s%s%s%s.ps1', @TempDir, @YEAR, @MON, @MDAY, @HOUR, @MIN, @SEC, @MSEC)
        Local $fH = FileOpen($sPathTMP, 2 + 8 + 128)
        Local $outputFilePath = @TempDir & "\" & $filename
        ;Local $fullPsCommand = $sCmd & ' | Out-File -FilePath "' & $outputFilePath & '" -Encoding utf8'
    Local $fullPsCommand = $sCmd & ' if ($OnlineComputers) {$OnlineComputers | Out-File -FilePath "' & $OutputFilePath & '" -Force } else {}' -Encoding utf8
    
    FileWrite($fH, $fullPsCommand)
        FileClose($fH)
    
        ; PowerShell-Skript ausführen
        Local $sRun = StringFormat('%s -ExecutionPolicy UnRestricted -File %s', $sPSexe, $sPathTMP)
        Local $iPID = Run($sRun, @ScriptDir, @SW_HIDE)
        While ProcessExists($iPID)
            Sleep(350)
        WEnd
        FileDelete($sPathTMP)
    
        ; Überprüfen, ob die Datei erstellt wurde und keine zusätzlichen Leerzeilen enthält
        If FileExists($outputFilePath) Then
            Local $ComputerList = FileRead($outputFilePath)
            ; Entfernen Sie alle Leerzeilen und trimmen Sie die Whitespaces
            Local $ComputerArray = StringSplit(StringStripWS($ComputerList, 3), @CRLF, 1)
            If $ComputerArray[0] = 0 Then
                MsgBox(16, "Fehler", "Keine Computer gefunden.")
                SplashOff()
                Return False
            EndIf
            _ArraySort($ComputerArray, 0, 0, 0, 1) ; Sortiere die Liste
    
            ; Löschen Sie den Inhalt des Edit-Feldes und fügen Sie die sortierte Liste hinzu
            GUICtrlSetData($Edit1, "")
            For $i = 1 To $ComputerArray[0]
                If $ComputerArray[$i] <> "" Then
                    GUICtrlSetData($Edit1, $ComputerArray[$i] & @CRLF, 1)
                EndIf
            Next
    
            FileCopy($outputFilePath, @ScriptDir & "\" & $filename, 1) ; 1 = Überschreibe bestehende Datei
        Else
            MsgBox(48, "Fehler", "Die Datei '" & $filename & "' wurde nicht erstellt.")
            SplashOff()
            Return False
        EndIf
    
        ; Splash-Screen schließen
        SplashOff()
        Return True
    EndFunc          
    Alles anzeigen


    ja Ad Variante klingt erst mal gut, aber soclhe Filterabfragen, da hab ich leider nichts zu gesehen, bei den Beispielen, bin ja gern bereit auch neues aufzunehmen.


    lg und schönen Abend noch

  • eingebundenes Powershell macht plötzlich Probleme

    • casi4712
    • 18. Mai 2024 um 21:12

    der zweite hat noch nicht fubktioniert, der erste aber, obwohl nix verändert wurde, solitär in ps gehen beide, also dass was in temp geschrieben wird

  • eingebundenes Powershell macht plötzlich Probleme

    • casi4712
    • 18. Mai 2024 um 16:37

    , danke für drin Feedback,

    wie gesagt neulich bekam ich mit dem String noch die Ergebnisse. Aber vielen Dank für Deine UDF, werde ich mir mal anschauen. Trotzdem muss es doch einen Grund haben, ' Zeichen zuviel oder zu wenig oder "" , irgendwas in der Art muss es ja sein


    lg und schönes Pfingstwochenende noch

  • eingebundenes Powershell macht plötzlich Probleme

    • casi4712
    • 18. Mai 2024 um 14:43

    Hallo allerseits,

    nach längerer Pause melde ich mich wieder mal zu Wort mit einem äusserst hartnäckigem Problem. Es sollen über verrschiedene Button bestimmte Powershellbefehle abgearbeitet werden, diese zunächst ins Temp geschrieben werden. Leider weigert sich das PS so zu arbeiten, das merkwürdige, vor ein paar Tagen, hatte es noch funktioniert. Vielleicht sieht ja jemand was da falsch eingebunden wurde, würde mich freuen, unten steht der PS Fehler der zurückgegeben wird. Der Befehl selber einzeln in PS funktioniert jeweils


    lg


    Casi


    Aufruf im Mainloop:

    AutoIt
    Case $AllDomPCButton
                Local $psCommand = 'Get-ADComputer -Filter "OperatingSystem -like ''*Windows 10*''" | Select-Object -ExpandProperty Name'
                ConsoleWrite("Generierter PowerShell-Befehl: " & $psCommand & @CRLF)
                ShowDomPCs($psCommand, 'alldompc.txt')
    
            Case $AllDomPCsWithAButton
                Local $psCommand = 'Get-ADComputer -Filter {Name -like "A*"} | Select-Object -ExpandProperty Name'
                ConsoleWrite("Generierter PowerShell-Befehl: " & $psCommand & @CRLF)
                ShowDomPCs($psCommand, 'alldompcA.txt')

    die Funktion die dan aufgerufen wird:

    AutoIt
    Func ShowDomPCs($psCommand, $filename)
        Global $username, $password
        Local $outputFilePath = @TempDir & "\" & $filename
    
        ; Zeige den Splash-Screen
        Local $hSplash = ShowSplashBox("Bitte warten...")
    
        ; PowerShell-Befehl zum Speichern der Ergebnisse
        Local $fullPsCommand = 'powershell.exe -ExecutionPolicy Bypass -Command "' & $psCommand & ' | Out-File -FilePath "' & $outputFilePath & '" -Encoding utf8"'
      
        ; PowerShell-Befehl ausführen und die Ergebnisse anzeigen
        Local $iResult = RunWait(@ComSpec & ' /c ' & $fullPsCommand, "", @SW_HIDE)
    
        Sleep(3000)
    
        ; Schließe den Splash-Screen
        CloseSplashBox($hSplash)
    
        If FileExists($outputFilePath) Then
            Local $scriptDir = @ScriptDir
            FileCopy($outputFilePath, $scriptDir & "\" & $filename, 1)
            $hostFilePath = $scriptDir & "\" & $filename
            $ComputerList = FileRead($hostFilePath)
            $ComputerArray = StringSplit($ComputerList, @CRLF, 1)
            If $ComputerArray[1] = "" Then _ArrayDelete($ComputerArray, 1)
    
            ; Sortiere die Liste
            _ArraySort($ComputerArray, 0, 0, 0, 1)
    
            ; Lösche den Inhalt des Edit-Feldes
            GUICtrlSetData($Edit1, "")
    
            ; Füge die sortierte Liste zum Edit-Feld hinzu
            For $i = 1 To UBound($ComputerArray) - 1
                GUICtrlSetData($Edit1, $ComputerArray[$i] & @CRLF, 1)
            Next
        Else
            MsgBox(48, "Fehler", "Die Datei '" & $filename & "' wurde nicht erstellt.")
        EndIf
    EndFunc
    Alles anzeigen


    PS Meldung:

    Code
    Get-ADComputer : Fehler beim Analysieren der Abfrage: "OperatingSystem -like Windows 10*" Fehlermeldung: "syntax
    error" an folgender Position: "23".
    In Zeile:1 Zeichen:1
    + Get-ADComputer -Filter 'OperatingSystem -like Windows 10*' | Select-O ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : ParserError: (:) [Get-ADComputer], ADFilterParsingException
        + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingException,Micr
       osoft.ActiveDirectory.Management.Commands.GetADComputer
  • Transparente GUI mit Memofunktion

    • casi4712
    • 24. Dezember 2023 um 14:02

    oki doki danke für das Weihnachts Präsent, werde ich berücksichtigen,


    dir auch frohe Weihnachten

  • Transparente GUI mit Memofunktion

    • casi4712
    • 23. Dezember 2023 um 21:29

    okidoki, vielen Dank noch mal für die Verbesserungen

    klappt super


    wünsche geruhsamme Feiertage

  • Transparente GUI mit Memofunktion

    • casi4712
    • 23. Dezember 2023 um 16:36

    Komisch, hab es eben noch mal bisl umgestelt, dachte so hätte ich es gestern schon gehabt, nun funktionierts. Vielleicht sollte ich damit aufhören soetwas um 2Uhr in der Nacht anzufangen lach.

    AutoIt
    #include <WindowsConstants.au3>
    #include <sendmessage.au3>
    #include <GuiConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <Excel.au3>
    #include <array.au3>
    #include <GuiComboBox.au3>
    #include <FileConstants.au3>
    #include <File.au3>
    #include <WinAPI.au3>
    #NoTrayIcon
    HotKeySet("ESC", "_Exit")
    
    Global $siniFile = StringTrimRight(@AppDataDir, 3) & "ini"
    
    ; Create GUI
    $GUI = GUICreate("Test", 400, 40, 600, 40, $WS_POPUP, $WS_EX_LAYERED)
    if not FileExists($siniFile) Then
        _StandardPos()
    endif
    
    _GUIRestorePositions($GUI, $siniFile)
    GUISetBkColor(0xABCDEF)
    
    ; Create Boxes
    Local $cmb01 = GUICtrlCreateCombo('', 10, 10, 150, 20)
    Local $cmb02 = GUICtrlCreateCombo('', 170, 10, 50, 20)
    Local $cmb03 = GUICtrlCreateCombo('', 230, 10, 50, 20)
    Local $cmb04 = GUICtrlCreateCombo('', 290, 10, 200, 20)
    
    _WinAPI_SetLayeredWindowAttributes($GUI, 0xABCDEF, 250)
    GUISetState()
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                _GUISavePositions($GUI, $siniFile)
                Exit
            Case $GUI_EVENT_PRIMARYDOWN
                _SendMessage($GUI, $WM_SYSCOMMAND, 0xF012, 0)
        EndSwitch
    WEnd
    
    Func _Exit()
        Exit
    EndFunc
    
    Func _GUISavePositions($hGUI, $sConfigFile, $sSectName = "Window Positions")
        Local $aGUI_Pos = WinGetPos($hGUI)
        If @error Then Return 0
    
        IniWrite($sConfigFile, $sSectName, "Left", $aGUI_Pos[0])
        IniWrite($sConfigFile, $sSectName, "Top", $aGUI_Pos[1])
        IniWrite($sConfigFile, $sSectName, "Width", $aGUI_Pos[2])
        IniWrite($sConfigFile, $sSectName, "Height", $aGUI_Pos[3])
    
        Return 1
    EndFunc
    
    Func _GUIRestorePositions($hGUI, $sConfigFile, $sSectName = "Window Positions", $iDefWidth = 700, $iDefHeight = 40)
        Local $iGUI_Left = IniRead($sConfigFile, $sSectName, "Left", -1)
        Local $iGUI_Top = IniRead($sConfigFile, $sSectName, "Top", -1)
        Local $iGUI_Width = IniRead($sConfigFile, $sSectName, "Width", $iDefWidth)
        Local $iGUI_Height = IniRead($sConfigFile, $sSectName, "Height", $iDefHeight)
    
        If $iGUI_Left = -1 Then $iGUI_Left = (@DesktopWidth / 2) - ($iGUI_Width / 2)
        If $iGUI_Top = -1 Then $iGUI_Top = (@DesktopHeight / 2) - ($iGUI_Height / 2)
    
        Return WinMove($hGUI, "", $iGUI_Left, $iGUI_Top, $iGUI_Width, $iGUI_Height)
    EndFunc
    
    Func _StandardPos()
        ; Get screen dimensions
        Local $iScreenWidth = @DesktopWidth
        Local $iScreenHeight = @DesktopHeight
    
        ; Calculate window position (centered horizontally, positioned from the bottom)
        Local $iWindowWidth = 800
        Local $iWindowHeight = 40
        Local $iWindowX = ($iScreenWidth - $iWindowWidth) / 2
        Local $iWindowY = $iScreenHeight - $iWindowHeight - 3; Adjust 50 to change the gap from the bottom
    
        ; Set window position
        WinMove($GUI, "", $iWindowX, $iWindowY, $iWindowWidth, $iWindowHeight)
        _GUISavePositions($GUI, $siniFile)
    EndFunc
    Alles anzeigen


    lg noch und ein gesegnetes Fest

  • Transparente GUI mit Memofunktion

    • casi4712
    • 23. Dezember 2023 um 16:10

    ok danke,

    Zu Punkt 1, Du meinst wirklich ich kann dass Winmove mit meiner GUIRestore Function verbinden?

    Zum zweiten Punkt, ist schon klar, da müsste ne Bedingung rein, irgendwie hatte ich da auch erst eine, das hatte ihn nicht interessiert, ist hier wohl im meinem Post wieder verschwunden.


    lg und Danke

  • Transparente GUI mit Memofunktion

    • casi4712
    • 23. Dezember 2023 um 13:14

    Hallo allerseits,

    ich bräuchte mal die freundlcihe Unterstützung unserer GUI xperten. Ich habe eine transparente Eingabe GUI erstellt, die beim Verschieben die Position speichert. Soweit so gut. Bei ersten öffnen soll die GUI aber (also wenn noch keine INI Datei existiert relativ am unteren Bildschirmrand mittig sein, irgendwi3 klappt das noch nicht. Vielleicht sieht ja jemand den Fehler.

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WINAPI.au3>
    #include <sendmessage.au3>
    #include <GuiConstants.au3>
    #NoTrayIcon
    HotKeySet("ESC", "_Exit")
    
    Global $ConfigFile = StringTrimRight(@ScriptFullPath, 3) & "ini"
    
    
    ;Create GUI
    $GUI = GUICreate("Test", 400, 40, 600, 40, $WS_POPUP, $WS_EX_LAYERED)
    	 if not FileExists($ConfigFile) Then ;kein configfile
    	  _StandardPos()
    	 endif
     
     _GUIRestorePositions($GUI, $ConfigFile)
    GUISetBkColor(0xABCDEF)
    
    ;Create Boxes
    Local $cmb01 = GUICtrlCreateCombo('', 10, 10, 150, 20)
    Local $cmb02 = GUICtrlCreateCombo('', 170, 10, 50, 20)
    Local $cmb03 = GUICtrlCreateCombo('', 230, 10, 50, 20)
    Local $cmb04 = GUICtrlCreateCombo('', 290, 10, 200, 20)
    
    _WinAPI_SetLayeredWindowAttributes($GUI, 0xABCDEF, 250)
    GUISetState()
    
    While 1
        Switch GUIGetMsg()
    		Case $GUI_EVENT_CLOSE
    			_GUISavePositions($GUI, $ConfigFile)
                Exit
            Case $GUI_EVENT_PRIMARYDOWN
                _SendMessage($GUI, $WM_SYSCOMMAND, 0xF012, 0)
        EndSwitch
    WEnd
    
    Func _Exit()
        Exit
    EndFunc
    
    
    Func _GUISavePositions($hGUI, $sConfigFile, $sSectName="Window Positions")
        Local $aGUI_Pos = WinGetPos($hGUI)
        If @error Then Return 0
    
    		IniWrite($sConfigFile, $sSectName, "Left", $aGUI_Pos[0])
    		IniWrite($sConfigFile, $sSectName, "Top", $aGUI_Pos[1])
    		IniWrite($sConfigFile, $sSectName, "Width", $aGUI_Pos[2])
    		IniWrite($sConfigFile, $sSectName, "Height", $aGUI_Pos[3])
    
        Return 1
    EndFunc
    
    Func _GUIRestorePositions($hGUI, $sConfigFile, $sSectName="Window Positions", $iDefWidth=700, $iDefHeight=40)
        Local $iGUI_Left = IniRead($sConfigFile, $sSectName, "Left", -1)
        Local $iGUI_Top = IniRead($sConfigFile, $sSectName, "Top", -1)
        Local $iGUI_Width = IniRead($sConfigFile, $sSectName, "Width", $iDefWidth)
        Local $iGUI_Height = IniRead($sConfigFile, $sSectName, "Height", $iDefHeight)
    
        If $iGUI_Left = -1 Then $iGUI_Left = (@DesktopWidth / 2) - ($iGUI_Width / 2)
        If $iGUI_Top = -1 Then $iGUI_Top = (@DesktopHeight / 2) - ($iGUI_Height / 2)
    
       Return WinMove($hGUI, "", $iGUI_Left, $iGUI_Top, $iGUI_Width, $iGUI_Height)
    EndFunc
    
    
    Func _StandardPos()
    ; Get screen dimensions
    Local $iScreenWidth = @DesktopWidth
    Local $iScreenHeight = @DesktopHeight
    
    ;Calculate window position (centered horizontally, positioned from the bottom)
    Local $iWindowWidth = 800
    Local $iWindowHeight = 40
    Local $iWindowX = ($iScreenWidth - $iWindowWidth) / 2
    Local $iWindowY = $iScreenHeight - $iWindowHeight - 3; Adjust 50 to change the gap from the bottom
    EndFunc
    Alles anzeigen


    Danjke schon mal

    lg und ein frohes Fest

  • RunWait mit Batch in Netzlaufwerk

    • casi4712
    • 18. Dezember 2023 um 10:04

    ich habe einfach mal folgendes ausgeführt, jetzt ist wieder alles in Butter an dem betreffenden PC:


    Code
    reg add “HKCU\Software\Microsoft\Command Processor” /v DisableUNCCheck /t REG_DWORD /d 0x1 /f

    vielen Dank noch mal


    lg

  • RunWait mit Batch in Netzlaufwerk

    • casi4712
    • 18. Dezember 2023 um 07:44

    Hallo liebe Forengemeunde. Ich hab mal ne ganz duselige Frage. Nach einer Neuinstallation funktioniert ein Teil eines grösseren Scriptes nicht mehr, was ich auf diesen´m Rechner entwickelt hatte. Auf allen anderen funktioniert dieser Aufruf. Diese Batchdatei ist auch per Doppelklick aufzurufen also innerhalb der sicheren Zone und ohne Sicherheitsfenster, also daran liegt es nicht. Aber diese Batch wird ums Verrecken nicht gestartet, hat irgend jemand ne Idee? ich bin am Vezweifeln. Der Aufruf sieht so aus:

    Code
    Global $Freigaben = "\\LA-DFS.domain.de\Freigaben\"
    Global $InvP = $Freigaben & "Austausch-Daten\spez\inv2"
    
    ; Löschen der vorhandenen Datei
    FileDelete($InvP & '\summary.csv')
    
    ; Ausführen der Batch-Datei mit RunWait
    Runwait(@ComSpec & ' /c "' & $InvP & '\CSV-Merge2.bat"', $InvP, @SW_HIDE)

    vielen Dank schon mal und eine schöne Woche noch

  • SSH Passwort falsch

    • casi4712
    • 5. November 2023 um 20:01

    ja das hatte ich schon gemacht;) hatte nur teilweise etwas gebracht, dann kam zwar die Info aber der Copybefehl ging nicht. Aber denke mal mit der Trennung ist jetzt jetzt die sauberste Lösung.

    lg und einen schönen Anend noch

  • SSH Passwort falsch

    • casi4712
    • 5. November 2023 um 15:40

    so ich habe das ganze mal in 2 Prozesse gezogen und das ganze in eine Function gezogen, so wird erst kurz die Authentifizierung gecheckt und dann kommt der Rest. Vielleicht nicht schön aber ist ne Lösung:

    AutoIt
    #include <File.au3>
    #include <MsgBoxConstants.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <FileConstants.au3>
    #include <WinAPIFiles.au3>
    
    HotKeySet("{ESC}", "AbortScript") ; Abbrechen mit Escape-Taste
    
    Global $usb = _checkBackVolume()
    $width = 40
    $height = 10
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Pfade bitte ggf. anpassen
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Global $ServerIP = "x.x.x.x"
    Global $bash = 'C:\cygwin64\bin\bash.exe'
    Local $targetPath = "/cygdrive/" & $usb & "/linuxback/koha/"
    Local $sourcePath = "/var/backup/"
    Local $sourcePath2 = "/"
    Local $sourcePath3 = "/"
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    _checkDomain()
    _CheckAndCreateBacksServerFolder()
    _Authcheck()
    _ProgressGUI()
    
    
    ;MAIN
    ; Kopierbefehl
    
    Local $bashCommand = $bash & ' -l -c "rsync -azP --delete --progress -e /usr/bin/ssh.exe root@' & $serverIP & ':' & $sourcePath & ' ' & $targetPath & '"'
     ConsoleWrite("Bash-Befehl: " & $bashCommand & @CRLF) ; Konsolenausgabe
      RunWait($bashCommand, "", @SW_HIDE)
    
     _MoveProgressBar()
     _ErfolgsMSG()
     _MoveProgressBar()
     _MoveProgressBar()
     _MoveProgressBar()
    GUIDelete()
    
    
    ; Funktionen für GUI
    Func _ProgressGUI()
    ; Erstellen Sie ein GUI-Fenster mit Fortschrittsbalken
     GUICreate("Backup vom Server wird geholt", 300, 100)
     GUISetState(@SW_SHOW)
      GUICtrlCreateLabel("Backup vom Server wird geholt", 10, 10, 280, 20) ; Text für Fortschrittsanzeige
      GUICtrlSetFont(-1, 12, 800) ; Schriftgröße 12 und fett (800)
     Global $ProgressBar = GUICtrlCreateProgress(10, 40, 280, 30, $PBS_MARQUEE) ; Fortschrittsbalken
      GUICtrlCreateLabel("Escape zum Abbrechen", 10, 75, 280, 20, $SS_CENTER) ; Text am unteren Rand
      GUICtrlSetFont(-1, 10, 800) ; Schriftgröße 10 und fett (800)
    EndFunc
    
    Func _MoveProgressBar()
        For $i = 1 To 100 Step 10;Bewegung Balken
            GUICtrlSendMsg($ProgressBar, $PBM_SETPOS, $i, 0)
            Sleep(500) ; Ändere die Schlafdauer je nach Fortschrittsgeschwindigkeit
        Next
    EndFunc
    
    Func _ErfolgsMSG()
        $sMessage = "Backup wurde vom Server geholt!"
        SplashTextOn("", $sMessage, 260, 40, @DesktopWidth - 280, @DesktopHeight - 50, $DLG_TEXTLEFT + $DLG_NOTITLE + $DLG_MOVEABLE, "Arial", 11, "")
        _Speak("Das Backup vom KOHA Server wurde gesichert")
        Sleep(9000)
        SplashOff()
    EndFunc
    
    Func _Speak($text)
        $oSp = ObjCreate("SAPI.SpVoice")
        $oSp.Speak($Text)
    EndFunc
    
    Func _checkDomain()
        ; Überprüfen, ob der Server 192.168.100.33 im LAN erreichbar ist
        If Ping("192.168.100.33", 1000) Then
            ToolTip("Der verwendete PC darf sich nicht in der Domäne befinden, bitte offenes LAN nutzen !!!", 0, 0)
            Sleep(2000) ; 2 Sekunden warten
            ToolTip("") ; Tooltip ausblenden
            SplashTextOn("", "Bitte offenes WLAN nutzen und noch mal probieren", 300, 110, @DesktopWidth - 320, @DesktopHeight - 80, $DLG_TEXTLEFT + $DLG_NOTITLE + $DLG_MOVEABLE, "Arial", 11, "")
            Sleep(3000) ; 3 Sekunden warten
            SplashOff()
            Exit ; Beenden Sie das Skript, wenn der DC erreichbar ist, da kein SSH
        EndIf
    EndFunc
    
    
    Func _checkBackVolume()
        Local $var = DriveGetDrive("all")
        If Not @error Then
            For $i = 1 To $var[0]
                Local $search = FileExists($var[$i] & "\backupmedium1.txt") ; Beachten Sie den Backslash "\"
                If $search Then
                    $usb = StringUpper(StringLeft($var[$i], 1)) ; Ersten Buchstaben des Laufwerks in Großbuchstaben
                    ExitLoop
                EndIf
            Next
    
            If $usb = '' Then
                SoundPlay("C:\Windows\Media\Windows-Hardwarefehler.wav") ; Warnton abspielen
                _Speak("Bitte schließen Sie das Backup-Medium an")
                MsgBox(16, "Fehler", "Kein Backup-Volume gefunden")
                Exit
            EndIf
        EndIf
        Return $usb
    EndFunc
    
    Func _CheckAndCreateBacksServerFolder()
        Local $sFolderPath = $usb & ":\linuxback\koha"
    
        ConsoleWrite("Überprüfe und erstelle Ordner: " & $sFolderPath & @CRLF)
    
        If Not FileExists($sFolderPath) Then
            DirCreate($sFolderPath)
            If Not FileExists($sFolderPath) Then
                ConsoleWrite("Fehler: Der Ordner konnte nicht erstellt werden: " & $sFolderPath & @CRLF)
                MsgBox(16, "Fehler", "Der Ordner konnte nicht erstellt werden: " & $sFolderPath)
                Exit
            EndIf
        EndIf
    EndFunc
    
    
    Func _Authcheck()
     Local $iPID = Run(@ComSpec & " /c " & 'C:\cygwin64\bin\bash.exe -l -c "/usr/bin/ssh.exe root@x.x.x.x"', @SystemDir, @SW_HIDE, $STDERR_MERGED) ; $STDERR_CHILD + $STDOUT_CHILD)
     Local $sOutput = ""
    
    Do
        $sOutput &= StdOutRead($iPID)
    Until @error
    
    ;MsgBox($MB_SYSTEMMODAL, "Stderr or stdout Read:", $sOutput)
       If StringInStr($sOutput, "failed") Then
        MsgBox($MB_SYSTEMMODAL, "Auth", "Überprüfen Sie denn SSH Host-key!")
        exit
        
       Else
        SplashTextOn("", "Authentifizierung ok", 150, 35, @DesktopWidth - 150, 10, $DLG_TEXTLEFT + $DLG_NOTITLE + $DLG_MOVEABLE, "Arial", 11)
         Sleep(2000) ; 2 Sekunden lang Popup anzeigen
         SplashOff()
       Endif
    EndFunc
    
    
    Func AbortScript() ; Abbruchfunktion
    
    Local $pidToClose = "bash.exe" ; Ersetze diese Zeile durch die PID, die du beenden möchtest
    
    If ProcessExists($pidToClose) Then
        ProcessClose($pidToClose)
    EndIf
    
        ; Beende das Skript
        Exit
    EndFunc
    Alles anzeigen

    Danke noch mal für die Anregungen und noch einen schönen Sonntag

  • SSH Passwort falsch

    • casi4712
    • 5. November 2023 um 13:10

    danke erstmal, wie gesagt die Prüfung hatte schon funktioniert, aber mit der Schleife funktioniert Run nicht sondern nur Runwait, ich persönlich vermute ja ein Timing Problem. Leider ist die Dokumentation was das korrekte Auslesen des Rückgabeweetes angeht leider mehr als rudimentät:(

    Also momentan läuft das Kopieren, aber nun liest er nur noch leere Werte aus:

    AutoIt
    Local $bashCommand = $bash & ' -l -c "rsync -azP --delete --progress -e /usr/bin/ssh.exe root@' & $serverIP & ':' & $sourcePath & ' ' & $targetPath & '"'
     ConsoleWrite("Bash-Befehl: " & $bashCommand & @CRLF) ; Konsolenausgabe
        Local $iPID = RunWait($bashCommand, "", @SW_show, $STDERR_CHILD + $STDOUT_CHILD)
    
    
    ;Check Authentifizierung
     While 1
         $sLine = StdoutRead($STDOUT_CHILD)
         If @error Then ExitLoop
         $strOut &= $sLine
     WEnd
    
    Sleep ( 700 )
    $strErr = StdoutRead($iPID)
      ;MsgBox(262144,"Title", $strErr)
       If StringInStr($strErr, "rec") Then
          SplashTextOn("", "Authentifizierung ok", 150, 35, @DesktopWidth - 150, 10, $DLG_TEXTLEFT + $DLG_NOTITLE + $DLG_MOVEABLE, "Arial", 11)
             Sleep(2000) ; 2 Sekunden lang Popup anzeigen
             SplashOff()
       Else
          MsgBox(16, '', 'Überprüfen Sie den SSL-Schlüssel !')
         exit
       EndIf
    
    
    
     ;_Authcheck($iPID)
     _MoveProgressBar()
     _ErfolgsMSG()
     _MoveProgressBar()
     _MoveProgressBar()
     _MoveProgressBar()
    GUIDelete()
    Alles anzeigen

    lg

    schönen Sonntag

  • SSH Passwort falsch

    • casi4712
    • 4. November 2023 um 11:07

    vielen Dank für den Hinweis, werde ich mal checken. Irgendwie scheint das Thema StdOut komplizierter als ich dachte. Das hatte ich schon verbeseert in

    AutoIt
    If StdOutRead($ipid,True) Then $rueckgabe &= StdoutRead($ipid)

    geht aber auch nichte gesagt mit Run bricht der Befehl sofort ab

    Also ich will es noch mal klarer formulieren, ist eigentlich ganz simpel was ich mcöhte. Es wird ein Kopierbefehl ausgeführt. Dieser läuft auch, sehe ich daran, dass Dateien kopiert werden. Als Kriterium dass etwas schief läuft nehme ich den Text der bei Beginn des bash Prozesses gezeigt wird, wenn ein SSH key vorliegt errscheint da Receiving File List. Woher ich dass weiss? ich habe den rsyncbefehl mit den richtigen Pfaden auf der Komanozeile abgesetzt. Wenn dieser Text erscheint soll er eine msg bringen Authentifizierung ok wenn nicht dann dass ein Fehler passiert ist. Hoffe ich habe mich jetzt klarer ausgedrückt;) Ich ging bislang davon aus, dass man das mit stdout speichern kann, aber dass bleibt bei mir immer leer.

    lg und schöne WE

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™