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

  • sortieren nach IP

    • casi4712
    • 10. Juli 2024 um 20:28

    ok dachte das kommt sich vielelicht in der Funktion in die Quere aber wie kann ich in der besagten Spalte die Inhalte des LInks auslesen, bei meinen Versuchen hat er leider imemr nur den Link der ersten Zeile genommen, egal ich welcher Zeiel ich geklickt habe.


    Schönen guten Abend noch

    lg

  • sortieren nach IP

    • casi4712
    • 10. Juli 2024 um 10:59

    Hallo nochmal,


    ich gehe davon aus dass es nicht möglich ist die GUICtrlSetOnEvent zusätzlich dazu zu bringen die Links auszulesen und diese dann zu öffnen. Wahrscheinlich kommt sich das dann in die Quere?


    lg

    und schöne Restwoche

  • sortieren nach IP

    • casi4712
    • 8. Juli 2024 um 13:06

    So mit dem vergessenen ctrl in GUISetOnEvent hab ich inzwichen bemerkt, wenn man zulange über em selben Script brütet lach

  • sortieren nach IP

    • casi4712
    • 8. Juli 2024 um 09:14

    supi es hat wunderbar geklappt, besser als mit wmNotify. Frage ist dieser Markierungsbalken gewünscht, kann man den irgendwo ausschalten oder anpassen ?

    Eine Masterfrage hätte ich aber noch, irgendwie kamm da bei mir auch nur Murx raus. Wie man sieht ist in meinem Script ne Spalte mit \\PCName\c$ das sollte man mir Shelexecute drauf zugreifen können, gibt es eine Möglichkeit dieses noch einzubinden? Mein Script sieht nun folgendermaßen aus: Also ich bräuchte ne Funktion die gezielt den Spaltenwert ausliesst (n). Leider FUnktioniert auch der AktualisierenButton nicht mehr.

    AutoIt
    #include "ArrayPlus.au3"
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <ListViewConstants.au3>
    #include <Constants.au3>
    #include <MsgBoxConstants.au3>
    #include "GIFAnimation.au3"
    HotKeySet("{ESC}", "ExitScript")
    FileInstall("C:\SC\ICO\Spinner-3.gif", @TempDir & "\GIFS\Spinner-3.gif", 1)
    
    ;only one Instance
    	$g_szVersion = "My NetworkBrowser"
    	If WinExists($g_szVersion) Then
    		Exit
    	EndIf
    	AutoItWinSetTitle($g_szVersion)
    
    ;-----------------------------------------------------------------------------------------------------------------------------
    Global $sFilePath = "\\share\windows\logfile.txt"
    Global $csvFilePath = "\\share\Summary_Short.csv"
    ;-----------------------------------------------------------------------------------------------------------------------------
    Global $aLines, $iLines
    Global $csvData
    Global $loggedInPCs[1][6] ; Anpassen der Dimension, um die neue Spalte aufzunehmen
    Global $sortOrder = True
    Global $lastSortedColumn = -1
    Global $g_iCurCol = -1, _
           $g_iSortDir = 1, _
           $g_bSet = False, _
           $g_iCol = -1
    
    
    ; GUI erstellen
    Global $hGUI = GUICreate("LARCH-Network Browser", 600, 400)
    Global $btnCheckPCs = GUICtrlCreateButton("Aktualisieren", 10, 320, 100, 30)
    Global $hListView = GUICtrlCreateListView("PC Name|MAC Address|IP Address|Bezeichnung|Share Path", 10, 10, 580, 300, $LVS_REPORT) ; Hinzufügen der neuen Spalte
    
    ; GUI-Ctrl Events (was passiert wenn man mit den Controls interagiert)
    GUICtrlSetOnEvent($hListView, _cb_lv_clicked)
    
    ; GUI Events (hier OnEvent-Modus im Gegensatz zum 2. GUI)
    Opt("GUIOnEventMode", 1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "raus")
    
    GUICtrlRegisterListViewSort(-1, _myCompare)
    ; Display the GUI.
    GUISetState(@SW_SHOW)
    
    _LoadCSVData()
    _UpdateListView()
    _SortListViewByColumn($hListView, 0, True)
    _CheckAndPingOnlinePCs() ; Check beim Start ausführen
    
    ; Haupt-Event-Loop
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $btnCheckPCs
                _RescanLog()
                _CheckAndPingOnlinePCs()
        EndSwitch
    WEnd
    
    Func _LoadCSVData()
        If Not FileExists($csvFilePath) Then
            MsgBox(0, "Error", "CSV file not found: " & $csvFilePath)
            Exit
        EndIf
        If Not _FileReadToArray($csvFilePath, $csvData) Then
            MsgBox(0, "Error", "Failed to read CSV file: " & $csvFilePath)
            Exit
        EndIf
    EndFunc
    
    Func _UpdateListView()
        ReDim $loggedInPCs[1][6] ; Anpassen der Dimension, um die neue Spalte aufzunehmen
        $loggedInPCs[0][0] = ""
        $loggedInPCs[0][1] = ""
        $loggedInPCs[0][2] = ""
        $loggedInPCs[0][3] = ""
        $loggedInPCs[0][4] = ""
        $loggedInPCs[0][5] = False
    
        If Not FileExists($sFilePath) Then
            MsgBox(0, "Error", "File not found: " & $sFilePath)
            Return
        EndIf
    
        If Not _FileReadToArray($sFilePath, $aLines) Then
            MsgBox(0, "Error", "Failed to read file: " & $sFilePath)
            Return
        EndIf
        $iLines = UBound($aLines)
    
        For $i = 1 To $iLines - 1 ; jede Zeile im CSV Array ausgenommen erste Zeile
            If StringInStr($aLines[$i], "action=login") Then
                Local $pcname = _GetParameter($aLines[$i], "pcname")
                Local $mac = _FormatMAC(_GetParameter($aLines[$i], "mac"))
                Local $ip = _GetParameter($aLines[$i], "ip")
                _SetPCStatus($pcname, $mac, $ip, True)
            ElseIf StringInStr($aLines[$i], "action=logout") Then
                Local $pcname = _GetParameter($aLines[$i], "pcname")
                _SetPCStatus($pcname, "", "", False)
            EndIf
        Next
        _GenerateOnlineStatus()
    EndFunc
    
    Func _GetParameter($sLine, $sParam)
        Local $iStart = StringInStr($sLine, $sParam & "=")
        If $iStart = 0 Then Return ""
        $iStart += StringLen($sParam) + 1
        Local $iEnd = StringInStr($sLine, " ", 0, 1, $iStart)
        If $iEnd = 0 Then $iEnd = StringLen($sLine) + 1
        Return StringMid($sLine, $iStart, $iEnd - $iStart)
    EndFunc
    
    Func _FormatMAC($mac)
        $mac = StringReplace($mac, "-", ":")
        $mac = StringRegExpReplace($mac, "(..)(..)(..)(..)(..)(..)", "\1:\2:\3:\4:\5:\6")
        Return $mac
    EndFunc
    
    Func _SetPCStatus($pcname, $mac, $ip, $status)
        For $i = 0 To UBound($loggedInPCs) - 1
            If $loggedInPCs[$i][0] = $pcname Then
                $loggedInPCs[$i][1] = $mac
                $loggedInPCs[$i][2] = $ip
                $loggedInPCs[$i][5] = $status
                Return
            EndIf
        Next
        If $loggedInPCs[0][0] = "" Then
            $loggedInPCs[0][0] = $pcname
            $loggedInPCs[0][1] = $mac
            $loggedInPCs[0][2] = $ip
            $loggedInPCs[0][3] = ""
            $loggedInPCs[0][4] = "\\ " & $pcname & "\c$" ; Hinzufügen des Share Path
            $loggedInPCs[0][5] = $status
        Else
            ReDim $loggedInPCs[UBound($loggedInPCs) + 1][6] ; Anpassen der Dimension, um die neue Spalte aufzunehmen
            $loggedInPCs[UBound($loggedInPCs) - 1][0] = $pcname
            $loggedInPCs[UBound($loggedInPCs) - 1][1] = $mac
            $loggedInPCs[UBound($loggedInPCs) - 1][2] = $ip
            $loggedInPCs[UBound($loggedInPCs) - 1][3] = ""
            $loggedInPCs[UBound($loggedInPCs) - 1][4] = "\\ " & $pcname & "\c$" ; Hinzufügen des Share Path
            $loggedInPCs[UBound($loggedInPCs) - 1][5] = $status
        EndIf
    EndFunc
    
    Func _GenerateOnlineStatus()
        _GUICtrlListView_DeleteAllItems($hListView)
    	;_ArrayDisplay($loggedInPCs)
        For $i = 0 To UBound($loggedInPCs) - 1
            If $loggedInPCs[$i][5] Then
                Local $bezeichnung = _GetBezeichnung($loggedInPCs[$i][0])
                GUICtrlCreateListViewItem($loggedInPCs[$i][0] & "|" & $loggedInPCs[$i][1] & "|" & $loggedInPCs[$i][2] & "|" & $bezeichnung & "|" & $loggedInPCs[$i][4], $hListView) ; Hinzufügen der neuen Spalte
            EndIf
        Next
    EndFunc
    
    Func _GetBezeichnung($pcname)
        For $i = 1 To UBound($csvData) - 1
            Local $csvLine = StringSplit($csvData[$i], ";", 1)
            Local $csvPCName = StringStripWS($csvLine[1], 3)
            If StringReplace($csvPCName, '"', '') = $pcname Then
                Local $csvBezeichnung = StringStripWS($csvLine[2], 3)
                Return StringReplace($csvBezeichnung, '"', '')
            EndIf
        Next
        Return ""
    EndFunc
    
    Func _SortListViewByColumn($hListView, $iColumn, $bAscending)
        _GUICtrlListView_SimpleSort($hListView, Not $bAscending, $iColumn)
    EndFunc
    
    Func _CheckAndPingOnlinePCs()
        Local $aPCToPing[1]
        For $i = 0 To UBound($loggedInPCs) - 1
            If $loggedInPCs[$i][5] Then
                _ArrayAdd($aPCToPing, $loggedInPCs[$i][0])
            EndIf
        Next
        If UBound($aPCToPing) > 1 Then
            ;MsgBox(64, "Ping PCs", "Pinging PCs: " & _ArrayToString($aPCToPing, ", ", 1))
        EndIf
    
        _Recall()
    EndFunc
    
    Func _RescanLog()
        _UpdateListView()
        _GenerateOnlineStatus()
    EndFunc
    
    Func _Recall()
        Local $aListViewItems = _GUICtrlListView_GetItemCount($hListView)
        Local $aItemsToRemove[1]
    
        Local $sMessage = "Pinge folgende PCs:" & @CRLF
        For $i = 0 To $aListViewItems - 1
            Local $pcName = _GUICtrlListView_GetItemText($hListView, $i, 0)
            $sMessage &= $pcName & @CRLF
        Next
    
    _LoadingGUI() ; Zeige Ladebildschirm während des Pings
    
        ; Parallelisieren der Pings für angemeldete PCs
        For $i = 0 To $aListViewItems - 1
            Local $pcName = StringStripWS(_GUICtrlListView_GetItemText($hListView, $i, 0), 3)
            If $pcName <> "" Then
                If Not _PingPCName($pcName) Then
                    _ArrayAdd($aItemsToRemove, $i)
                EndIf
            EndIf
        Next
    
        For $j = UBound($aItemsToRemove) - 1 To 1 Step -1  ; Entfernen der nicht erreichbaren PCs
            _GUICtrlListView_DeleteItem($hListView, $aItemsToRemove[$j])
        Next
        GUIDelete($hGui) ; Ladebildschirm schließen
    EndFunc
    
    Func _PingPCName($pcName)
        Local $iPID = Run(@ComSpec & ' /c ping ' & $pcName & ' -n 1', "", @SW_HIDE, $STDOUT_CHILD)
        Local $sOutput = ""
        While 1
            $sOutput &= StdoutRead($iPID)
            If @error Then ExitLoop
        WEnd
        If StringInStr($sOutput, "TTL=") Then
            Return True
        Else
            Return False
        EndIf
    EndFunc
    
    Func _LoadingGUI()
        Global $sTempFolder = @TempDir & "\GIFS"
        DirCreate($sTempFolder)
    
        Global $sFile = $sTempFolder & "\Spinner-3.gif"
    
        Global $aGIFDimension = _GIF_GetDimension($sFile)
        Global $hGUI = GUICreate("GIF Animation", $aGIFDimension[0], $aGIFDimension[1], -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
        Global $hGIF = _GUICtrlCreateGIF($sFile, "", 0, 0)
        GUICtrlSetTip(-1, "ESC to exit")
        GUISetBkColor(0xABCDEF) ; Hintergrundfarbe ändern
        _WinAPI_SetLayeredWindowAttributes($hGUI, 0xABCDEF, 255)
        _WinAPI_SetParent($hGUI, 0)
        GUISetState(@SW_SHOW)
    EndFunc
    
    Func raus()
    	Exit
    EndFunc
    
    ; wird ausgeführt wenn man mit dem ListView interagiert
    Func _cb_lv_clicked()
    	$g_bSet = False
    	$g_iCurCol = $g_iCol
    	GUICtrlSendMsg($hListView, $LVM_SETSELECTEDCOLUMN, GUICtrlGetState($hListView), 0)
    EndFunc
    
    ; eigene Vergleichsfunktion für die ListView-Sortierung
    Func _myCompare($iControlID, $iA, $iB, $iColumn)
    	; Switch the sorting direction
    	If $iColumn = $g_iCurCol Then
    		If Not $g_bSet Then
    			$g_iSortDir *= -1
    			$g_bSet = True
    		EndIf
    	Else
    		$g_iSortDir = 1
    	EndIf
    	$g_iCol = $iColumn	
    
    	; Werte der aktuellen Listviewelemente holen
    	Local $sA = GetSubItemText($iControlID, $iA, $iColumn)
    	Local $sB = GetSubItemText($iControlID, $iB, $iColumn)
    
    	; Größenvergleich zweier Elemente per Natural Compare
    	Return __ap_cb_comp_Natural($sA, $sB) * $g_iSortDir
    EndFunc
    
    
    ; Retrieve the text of a listview item in a specified column
    Func GetSubItemText($idCtrl, $idItem, $iColumn)
    	Local $tLvfi = DllStructCreate("uint;ptr;int;int[2];int")
    	DllStructSetData($tLvfi, 1, $LVFI_PARAM)
    	DllStructSetData($tLvfi, 3, $idItem)
    	Local $tBuffer = DllStructCreate("char[260]")
    	Local $iIndex = GUICtrlSendMsg($idCtrl, $LVM_FINDITEM, -1, DllStructGetPtr($tLvfi));
    	Local $tLvi = DllStructCreate("uint;int;int;uint;uint;ptr;int;int;int;int")
    	DllStructSetData($tLvi, 1, $LVIF_TEXT)
    	DllStructSetData($tLvi, 2, $iIndex)
    	DllStructSetData($tLvi, 3, $iColumn)
    	DllStructSetData($tLvi, 6, DllStructGetPtr($tBuffer))
    	DllStructSetData($tLvi, 7, 260)
    	GUICtrlSendMsg($idCtrl, $LVM_GETITEMA, 0, DllStructGetPtr($tLvi));
    	Local $sItemText = DllStructGetData($tBuffer, 1)
    Return $sItemText
    EndFunc   ;==>GetSubItemText
    Alles anzeigen

    Vielen Dannk noch mal


    lg

  • sortieren nach IP

    • casi4712
    • 8. Juli 2024 um 08:29

    okidoki, dann ist schon klar dass ich da auf Probleme gestossen bin, dann schau ich mir das mal an


    herzlichen Dank und eine

    schöne Woche

  • sortieren nach IP

    • casi4712
    • 7. Juli 2024 um 18:09

    So wollte mich mal wieder melden, bin leider noch nicht so ganz weitergekommen, werde noch wahnsinnig darüber;) Vielen Dank noch mal für die vielen Ansätzte.

    @Aspirin: Das mit der plus udf finde ich ganz interessant, das Problem ist nur wo und an welcher Stelle sollte ich dies einabuen, die Listview kann ich ja anscheinend nicht damit auslesen. Brauche ich dazu noch die Standard Array.udf? Oder soltle ich besser die Sortierfunktionalitär in ie WM Notify eibauen? oder behindert das wieder die normale Funktionalität mit dem Sortieren auf den Spaltenkopf?

    Ich habe noch mal mein Script was nun sonst 99%ig funktioniert zusammengestellt.

    AutoIt
    ;#include <Array.au3>
    #include "ArrayPlus.au3"
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <ListViewConstants.au3>
    #include <Constants.au3>
    #include <MsgBoxConstants.au3>
    #include "GIFAnimation.au3"
    HotKeySet("{ESC}", "ExitScript")
    FileInstall("C:\SC\ICO\Spinner-3.gif", @TempDir & "\GIFS\Spinner-3.gif", 1)
    
    ;only one Instance
    	$g_szVersion = "My NetworkBrowser"
    	If WinExists($g_szVersion) Then
    		Exit
    	EndIf
    	AutoItWinSetTitle($g_szVersion)
    
    
    Global $sFilePath = "\\share\logs\logfile.txt"
    Global $csvFilePath = "\\share\logs\Summary_Short.csv"
    Global $aLines, $iLines
    Global $csvData
    Global $loggedInPCs[1][6] ; Anpassen der Dimension, um die neue Spalte aufzunehmen
    Global $sortOrder = True
    Global $lastSortedColumn = -1
    
    ; GUI erstellen
    Global $hGUI = GUICreate("LARCH-Network Browser", 600, 400)
    Global $hListView = GUICtrlCreateListView("PC Name|MAC Address|IP Address|Bezeichnung|Share Path", 10, 10, 580, 300, $LVS_REPORT) ; Hinzufügen der neuen Spalte
    Global $btnCheckPCs = GUICtrlCreateButton("Aktualisieren", 10, 320, 100, 30)
    GUISetState(@SW_SHOW)
    
    _LoadCSVData()
    _UpdateListView()
    _SortListViewByColumn($hListView, 0, True)
    _CheckAndPingOnlinePCs() ; Check beim Start ausführen
    
    ; Haupt-Event-Loop
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY_Handler")
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $btnCheckPCs
                _RescanLog()
                _CheckAndPingOnlinePCs()
        EndSwitch
    WEnd
    
    Func _LoadCSVData()
        If Not FileExists($csvFilePath) Then
            MsgBox(0, "Error", "CSV file not found: " & $csvFilePath)
            Exit
        EndIf
        If Not _FileReadToArray($csvFilePath, $csvData) Then
            MsgBox(0, "Error", "Failed to read CSV file: " & $csvFilePath)
            Exit
        EndIf
    EndFunc
    
    Func _UpdateListView()
    ;_LoadingGUI()
        ReDim $loggedInPCs[1][6] ; Anpassen der Dimension, um die neue Spalte aufzunehmen
        $loggedInPCs[0][0] = ""
        $loggedInPCs[0][1] = ""
        $loggedInPCs[0][2] = ""
        $loggedInPCs[0][3] = ""
        $loggedInPCs[0][4] = ""
        $loggedInPCs[0][5] = False
    
        If Not FileExists($sFilePath) Then
            MsgBox(0, "Error", "File not found: " & $sFilePath)
            Return
        EndIf
    
        If Not _FileReadToArray($sFilePath, $aLines) Then
            MsgBox(0, "Error", "Failed to read file: " & $sFilePath)
            Return
        EndIf
        $iLines = UBound($aLines)
    
        For $i = 1 To $iLines - 1 ; jede Zeile im CSV Array ausgenommen erste Zeile
            If StringInStr($aLines[$i], "action=login") Then
                Local $pcname = _GetParameter($aLines[$i], "pcname")
                Local $mac = _FormatMAC(_GetParameter($aLines[$i], "mac"))
                Local $ip = _GetParameter($aLines[$i], "ip")
                _SetPCStatus($pcname, $mac, $ip, True)
            ElseIf StringInStr($aLines[$i], "action=logout") Then
                Local $pcname = _GetParameter($aLines[$i], "pcname")
                _SetPCStatus($pcname, "", "", False)
            EndIf
        Next
        _GenerateOnlineStatus()
    EndFunc
    
    Func _GetParameter($sLine, $sParam)
        Local $iStart = StringInStr($sLine, $sParam & "=")
        If $iStart = 0 Then Return ""
        $iStart += StringLen($sParam) + 1
        Local $iEnd = StringInStr($sLine, " ", 0, 1, $iStart)
        If $iEnd = 0 Then $iEnd = StringLen($sLine) + 1
        Return StringMid($sLine, $iStart, $iEnd - $iStart)
    EndFunc
    
    Func _FormatMAC($mac)
        $mac = StringReplace($mac, "-", ":")
        $mac = StringRegExpReplace($mac, "(..)(..)(..)(..)(..)(..)", "\1:\2:\3:\4:\5:\6")
        Return $mac
    EndFunc
    
    Func _SetPCStatus($pcname, $mac, $ip, $status)
        For $i = 0 To UBound($loggedInPCs) - 1
            If $loggedInPCs[$i][0] = $pcname Then
                $loggedInPCs[$i][1] = $mac
                $loggedInPCs[$i][2] = $ip
                $loggedInPCs[$i][5] = $status
                Return
            EndIf
        Next
        If $loggedInPCs[0][0] = "" Then
            $loggedInPCs[0][0] = $pcname
            $loggedInPCs[0][1] = $mac
            $loggedInPCs[0][2] = $ip
            $loggedInPCs[0][3] = ""
            $loggedInPCs[0][4] = "\\ " & $pcname & "\c$" ; Hinzufügen des Share Path
            $loggedInPCs[0][5] = $status
        Else
            ReDim $loggedInPCs[UBound($loggedInPCs) + 1][6] ; Anpassen der Dimension, um die neue Spalte aufzunehmen
            $loggedInPCs[UBound($loggedInPCs) - 1][0] = $pcname
            $loggedInPCs[UBound($loggedInPCs) - 1][1] = $mac
            $loggedInPCs[UBound($loggedInPCs) - 1][2] = $ip
            $loggedInPCs[UBound($loggedInPCs) - 1][3] = ""
            $loggedInPCs[UBound($loggedInPCs) - 1][4] = "\\ " & $pcname & "\c$" ; Hinzufügen des Share Path
            $loggedInPCs[UBound($loggedInPCs) - 1][5] = $status
        EndIf
    EndFunc
    
    Func _GenerateOnlineStatus()
        _GUICtrlListView_DeleteAllItems($hListView)
    	;_ArrayDisplay($loggedInPCs)
        For $i = 0 To UBound($loggedInPCs) - 1
            If $loggedInPCs[$i][5] Then
                Local $bezeichnung = _GetBezeichnung($loggedInPCs[$i][0])
                GUICtrlCreateListViewItem($loggedInPCs[$i][0] & "|" & $loggedInPCs[$i][1] & "|" & $loggedInPCs[$i][2] & "|" & $bezeichnung & "|" & $loggedInPCs[$i][4], $hListView) ; Hinzufügen der neuen Spalte
            EndIf
        Next
    	;GUIDelete($hGui) ; Ladebildschirm schließen
    EndFunc
    
    Func _GetBezeichnung($pcname)
        For $i = 1 To UBound($csvData) - 1
            Local $csvLine = StringSplit($csvData[$i], ";", 1)
            Local $csvPCName = StringStripWS($csvLine[1], 3)
            If StringReplace($csvPCName, '"', '') = $pcname Then
                Local $csvBezeichnung = StringStripWS($csvLine[2], 3)
                Return StringReplace($csvBezeichnung, '"', '')
            EndIf
        Next
        Return ""
    EndFunc
    
    Func _SortListViewByColumn($hListView, $iColumn, $bAscending)
        _GUICtrlListView_SimpleSort($hListView, Not $bAscending, $iColumn)
    EndFunc
    
    Func _CheckAndPingOnlinePCs()
        Local $aPCToPing[1]
        For $i = 0 To UBound($loggedInPCs) - 1
            If $loggedInPCs[$i][5] Then
                _ArrayAdd($aPCToPing, $loggedInPCs[$i][0])
            EndIf
        Next
        If UBound($aPCToPing) > 1 Then
            ;MsgBox(64, "Ping PCs", "Pinging PCs: " & _ArrayToString($aPCToPing, ", ", 1))
        EndIf
    
        _Recall()
    EndFunc
    
    Func _RescanLog()
        _UpdateListView()
        _GenerateOnlineStatus()
    EndFunc
    
    Func _Recall()
        Local $aListViewItems = _GUICtrlListView_GetItemCount($hListView)
        Local $aItemsToRemove[1]
    
        Local $sMessage = "Pinge folgende PCs:" & @CRLF
        For $i = 0 To $aListViewItems - 1
            Local $pcName = _GUICtrlListView_GetItemText($hListView, $i, 0)
            $sMessage &= $pcName & @CRLF
        Next
        ;MsgBox(64, "Ping Vorbereitung", $sMessage)
        ;Local $hProgress = SplashTextOn("Ping Fortschritt", "Ich aktualisiere...", 300, 100, -1, -1, 1, "", 16)
    _LoadingGUI() ; Zeige Ladebildschirm während des Pings
        ; Parallelisieren der Pings für angemeldete PCs
        For $i = 0 To $aListViewItems - 1
            Local $pcName = StringStripWS(_GUICtrlListView_GetItemText($hListView, $i, 0), 3)
            If $pcName <> "" Then
                If Not _PingPCName($pcName) Then
                    _ArrayAdd($aItemsToRemove, $i)
                EndIf
            EndIf
        Next
        ;SplashOff()
    
        For $j = UBound($aItemsToRemove) - 1 To 1 Step -1  ; Entfernen der nicht erreichbaren PCs
            _GUICtrlListView_DeleteItem($hListView, $aItemsToRemove[$j])
        Next
        GUIDelete($hGui) ; Ladebildschirm schließen
    EndFunc
    
    Func _PingPCName($pcName)
        Local $iPID = Run(@ComSpec & ' /c ping ' & $pcName & ' -n 1', "", @SW_HIDE, $STDOUT_CHILD)
        Local $sOutput = ""
        While 1
            $sOutput &= StdoutRead($iPID)
            If @error Then ExitLoop
        WEnd
        If StringInStr($sOutput, "TTL=") Then
            Return True
        Else
            Return False
        EndIf
    EndFunc
    
    Func _LoadingGUI()
        Global $sTempFolder = @TempDir & "\GIFS"
        DirCreate($sTempFolder)
    
        Global $sFile = $sTempFolder & "\Spinner-3.gif"
    
        Global $aGIFDimension = _GIF_GetDimension($sFile)
        Global $hGUI = GUICreate("GIF Animation", $aGIFDimension[0], $aGIFDimension[1], -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
        Global $hGIF = _GUICtrlCreateGIF($sFile, "", 0, 0)
        GUICtrlSetTip(-1, "ESC to exit")
        GUISetBkColor(0xABCDEF) ; Hintergrundfarbe ändern
        _WinAPI_SetLayeredWindowAttributes($hGUI, 0xABCDEF, 255)
        _WinAPI_SetParent($hGUI, 0)
        GUISetState(@SW_SHOW)
    EndFunc
    
    Func WM_NOTIFY_Handler($hWnd, $iMsg, $iwParam, $ilParam)
        Local $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
        Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        Local $iCode = DllStructGetData($tNMHDR, "Code")
    
        If $hWndFrom = GUICtrlGetHandle($hListView) And $iCode = $LVN_COLUMNCLICK Then
            Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
            Local $iColumn = DllStructGetData($tInfo, "SubItem")
    
            If $iColumn = $lastSortedColumn Then  ; Toggle sort order if clicking the same column, otherwise reset to ascending
                $sortOrder = Not $sortOrder
            Else
                $sortOrder = True
            EndIf
    
            $lastSortedColumn = $iColumn
            _SortListViewByColumn($hListView, $iColumn, $sortOrder)
        EndIf
    
        Return $GUI_RUNDEFMSG
    EndFunc
    Alles anzeigen

    Vielen Dank noch mal und

    einen schönen Rest Sonntag

  • sortieren nach IP

    • casi4712
    • 26. Juni 2024 um 13:25

    Also ich habs mal durchlaufne lassen und hab in der Logdef mal eine IP auf 192.168.100.5 gesetzt, diese würde ich bei der IP Sortierung aufsteigend auch oben erwarten und nicht unten, denke wir haben uns da missverstanden;)


    lg


    1. For sorting: 11000000101010001011001000010110
    1. LogDate: 2024/06/23
    1. LogTime: 18:02:36
    1. Action: login
    1. PCName: N210708_b
    1. Mac: 5C61994A3157
    1. IP: 192.168.178.22
    1. Time: 18:02:36
    2. For sorting: 11000000101010001011001000010110
    2. LogDate: 2024/06/23
    2. LogTime: 18:06:55
    2. Action: logout
    2. PCName: N210708_B
    2. Mac: 5C61994A3157
    2. IP: 192.168.178.22
    2. Time: 18:06:55
    3. For sorting: 11000000101010001011001000010110
    3. LogDate: 2024/06/23
    3. LogTime: 18:10:30
    3. Action: login
    3. PCName: N210708_B
    3. Mac: 5C61994A3157
    3. IP: 192.168.178.22
    3. Time: 18:10:30
    4. For sorting: 11000000101010001011001000000101
    4. LogDate: 2024/06/23
    4. LogTime: 18:13:50
    4. Action: logout
    4. PCName: N210708_B
    4. Mac: 5C61994A3157
    4. IP: 192.168.178.5
    4. Time: 18:13:50

  • sortieren nach IP

    • casi4712
    • 26. Juni 2024 um 13:17

    also nur noch mal zum Verständnis von Lösung A, im Grunde macht das aber nichst anders wie meine Lösung, Einzelspalten, den String sortieren, mein Problem wird jetzt also sein die IP Spalte erst mal auf 4 Einzelstrings zu teilen, vor dem sortieren udn dannn weider zusammenzusetzten, richtig? Und dann solte mein Sortieralgorhitmus ja auch funktionieren


    ich schau mir mal deinen zweiten Vorschlag an @Kana;)


    Danke noch mal

  • sortieren nach IP

    • casi4712
    • 26. Juni 2024 um 11:08

    das stimmt, hatte ich ganz übersehen, danke;)

  • sortieren nach IP

    • casi4712
    • 26. Juni 2024 um 10:52

    okidoki, suoper danke, dann kann ich ja im Prinzip meine bisherige Sortfunktion rausschmeissen, denk ich mal


    recht herzlichen Dank noch mal


    lg

  • sortieren nach IP

    • casi4712
    • 26. Juni 2024 um 09:54

    Ähm ich hab das gerade versucht auf mein Script anzuwenden, aber habe gesehen du ersgtellst ja ein Array, wo die NUmmern schon von vornherein getrennt sind, [192, 168, 23, 145, "Büro 101"], _ , bei mir sind es ja komplette IPs im Logfile, also 192.168.100.10 usw. Kann die Funktion damit auch umgehen?

  • sortieren nach IP

    • casi4712
    • 26. Juni 2024 um 09:26

    okidoki danke für das Feedback Leudde, Moombas, das klingt nach nem Plan das hatte ich auch schon versucht, weil ich das schon von Excel her kenne, kam aber nicht so recht weiter. Dann schaue ich mir mal Deinen Ansatz an.


    Danke noch mal und

    schönen Tag noch

  • sortieren nach IP

    • casi4712
    • 25. Juni 2024 um 21:02

    Hallo allerseits, ich habe ein kleines script was mir ein Logfile auswerten soll, dieses Logfile hat folgende Struktur:

    Code
    2024/06/23 18:02:36 - Client connected
    2024/06/23 18:02:36 - action=login pcname=N210708_b mac=5C61994A3157 ip=192.168.178.22 time=18:02:36
    2024/06/23 18:06:55 - Client connected
    2024/06/23 18:06:55 - action=logout pcname=N210708_B mac=5C61994A3157 ip=192.168.178.22 time=18:06:55
    2024/06/23 18:10:30 - Client connected
    2024/06/23 18:10:30 - action=login pcname=N210708_B mac=5C61994A3157 ip=192.168.178.22 time=18:10:30
    2024/06/23 18:13:50 - Client connected
    2024/06/23 18:13:50 - action=logout pcname=N210708_B mac=5C61994A3157 ip=192.168.178.22 time=18:13:50
    2024/06/23 18:18:20 - Server started and listening on port 8085

    Mir ist es inzwischen geglückt die Sortierfunktion zum Laufen zu bringen. Das einzige Problem was ich habe ist die Sortierung der IPS, hat da jemand ne Idee? Für sachdienliche Hinweise wär ich sehr dankbar

    AutoIt
    #include <Array.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <ListViewConstants.au3>
    
    
    ;only one Instance
    $g_szVersion = "My OnlineReader"
    If WinExists($g_szVersion) Then
        Exit
    EndIf
    AutoItWinSetTitle($g_szVersion)
    
    Global $sFilePath = "\\192.168.100.166\C$\windows\logfile.txt"
    Global $csvFilePath = "\\cms.lch-bln.de\freigaben\inv2\Summary_Short.csv"
    Global $aLines, $iLines
    Global $csvData
    Global $loggedInPCs[1][5] ; 2d Array initialisieren
    Global $sortOrder = True ; True = Ascending, False = Descending
    Global $lastSortedColumn = -1
    
    ; Create the GUI
    Global $hGUI = GUICreate("Online PCs", 600, 400)
    Global $hListView = GUICtrlCreateListView("PC Name|MAC Address|IP Address|Bezeichnung", 10, 10, 580, 300, $LVS_REPORT)
    Global $hButton = GUICtrlCreateButton("Update", 250, 320, 100, 30)
    GUISetState(@SW_SHOW)
    
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]
    
    
    ; CSV dazuladen
    _LoadCSVData()
    
    ; Listview erzeugen
    _UpdateListView()
    
    ; Register WM_NOTIFY handler
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY_Handler")
    
    ; Event loop
    While True
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $hButton
                ; Clear and update the ListView when the button is clicked
                _GUICtrlListView_DeleteAllItems($hListView)
                _UpdateListView()
        EndSwitch
    WEnd
    
    Func _LoadCSVData()
        ; Check if the CSV file exists
        If Not FileExists($csvFilePath) Then
            MsgBox(0, "Error", "CSV file not found: " & $csvFilePath)
            Exit
        EndIf
    
        ; Read the CSV file into an array
        If _FileReadToArray($csvFilePath, $csvData) = 0 Then
            MsgBox(0, "Error", "Failed to read CSV file: " & $csvFilePath)
            Exit
        EndIf
    EndFunc
    
    Func _UpdateListView()
        ; Reset the loggedInPCs array
        ReDim $loggedInPCs[1][5]
        $loggedInPCs[0][0] = ""
        $loggedInPCs[0][1] = ""
        $loggedInPCs[0][2] = ""
        $loggedInPCs[0][3] = ""
        $loggedInPCs[0][4] = False
    
        ; Check if the file exists
        If Not FileExists($sFilePath) Then
            MsgBox(0, "Error", "File not found: " & $sFilePath)
            Return
        EndIf
    
        ; Read the file into an array
        If _FileReadToArray($sFilePath, $aLines) = 0 Then
            MsgBox(0, "Error", "Failed to read file: " & $sFilePath)
            Return
        EndIf
    
        $iLines = UBound($aLines)
    
        ; jede Zeile im log durchgehen
        For $i = 1 To $iLines - 1
            ; Check "action=login"
    			If StringInStr($aLines[$i], "action=login") Then
    				Local $pcname = _GetParameter($aLines[$i], "pcname")
    				Local $mac = _FormatMAC(_GetParameter($aLines[$i], "mac"))
    				Local $ip = _GetParameter($aLines[$i], "ip")
    				_SetPCStatus($pcname, $mac, $ip, True)
    			ElseIf StringInStr($aLines[$i], "action=logout") Then
    				Local $pcname = _GetParameter($aLines[$i], "pcname")
    				; PC logged out
    				_SetPCStatus($pcname, "", "", False)
    			EndIf
        Next
    
        ; Liste von Onlien PC erstellen
        For $i = 0 To UBound($loggedInPCs) - 1
            If $loggedInPCs[$i][4] Then
                ; Bezeichnung von externer CSV einlesen
                Local $bezeichnung = _GetBezeichnung($loggedInPCs[$i][0])
                GUICtrlCreateListViewItem($loggedInPCs[$i][0] & "|" & $loggedInPCs[$i][1] & "|" & $loggedInPCs[$i][2] & "|" & $bezeichnung, $hListView)
            EndIf
        Next
    EndFunc
    
    Func _GetParameter($sLine, $sParam)
        Local $iStart = StringInStr($sLine, $sParam & "=")
        If $iStart = 0 Then Return ""
        $iStart += StringLen($sParam) + 1
        Local $iEnd = StringInStr($sLine, " ", 0, 1, $iStart)
        If $iEnd = 0 Then $iEnd = StringLen($sLine) + 1
        Return StringMid($sLine, $iStart, $iEnd - $iStart)
    EndFunc
    
    Func _FormatMAC($mac)
        $mac = StringReplace($mac, "-", ":")
        $mac = StringRegExpReplace($mac, "(..)(..)(..)(..)(..)(..)", "\1:\2:\3:\4:\5:\6")
        Return $mac
    EndFunc
    
    Func _SetPCStatus($pcname, $mac, $ip, $status)
    		For $i = 0 To UBound($loggedInPCs) - 1
    			If $loggedInPCs[$i][0] = $pcname Then
    				$loggedInPCs[$i][1] = $mac
    				$loggedInPCs[$i][2] = $ip
    				$loggedInPCs[$i][4] = $status
    				Return
    			EndIf
    		Next
    	
    ;neuen PC hinzufügen
    		If $loggedInPCs[0][0] = "" Then
    			$loggedInPCs[0][0] = $pcname
    			$loggedInPCs[0][1] = $mac
    			$loggedInPCs[0][2] = $ip
    			$loggedInPCs[0][3] = ""
    			$loggedInPCs[0][4] = $status
    		Else
    			ReDim $loggedInPCs[UBound($loggedInPCs) + 1][5]
    			$loggedInPCs[UBound($loggedInPCs) - 1][0] = $pcname
    			$loggedInPCs[UBound($loggedInPCs) - 1][1] = $mac
    			$loggedInPCs[UBound($loggedInPCs) - 1][2] = $ip
    			$loggedInPCs[UBound($loggedInPCs) - 1][3] = ""
    			$loggedInPCs[UBound($loggedInPCs) - 1][4] = $status
    		EndIf
    EndFunc
    
    Func _GetBezeichnung($pcname)
        For $i = 1 To UBound($csvData) - 1 ; Kopfpalte überspringen
            Local $csvLine = StringSplit($csvData[$i], ";", 1)
            Local $csvPCName = StringStripWS($csvLine[1], 3) ; 
            If StringReplace($csvPCName, '"', '') = $pcname Then
                Local $csvBezeichnung = StringStripWS($csvLine[2], 3) 
                Return StringReplace($csvBezeichnung, '"', '')
            EndIf
        Next
        Return ""
    EndFunc
    
    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $hListView
    		If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    		$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    		$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    		$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    		$iCode = DllStructGetData($tNMHDR, "Code")
    		If ($hWndFrom = $hWndListView) And ($iCode = $LVN_COLUMNCLICK) Then
    		$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    		_GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
    		EndIf
    EndFunc ;==>WM_NOTIFY
    
    Func _SortListView($iCol)
        Local $aListViewData[0]
        Local $iItemCount = _GUICtrlListView_GetItemCount($hListView)
    
        ; Listview in Array lesen
        For $i = 0 To $iItemCount - 1
            Local $sRow = ""
            For $j = 0 To _GUICtrlListView_GetColumnCount($hListView) - 1
                $sRow &= _GUICtrlListView_GetItemText($hListView, $i, $j)
                If $j < _GUICtrlListView_GetColumnCount($hListView) - 1 Then $sRow &= "|"
            Next
            _ArrayAdd($aListViewData, $sRow)
        Next
    
        ; Array sortieren
        _ArraySort($aListViewData, $sortOrder, $iCol)
    
        ; Liste löschen und neu befüllen
        _GUICtrlListView_DeleteAllItems($hListView)
        For $i = 0 To UBound($aListViewData) - 1
            Local $aRow = StringSplit($aListViewData[$i], "|")
            GUICtrlCreateListViewItem($aRow[1] & "|" & $aRow[2] & "|" & $aRow[3] & "|" & $aRow[4], $hListView)
        Next
    
        ; Umschalten Sortierreihenfolge
        If $lastSortedColumn = $iCol Then
            $sortOrder = Not $sortOrder
        Else
            $sortOrder = True ; Start with ascending order for new column
        EndIf
        $lastSortedColumn = $iCol
    EndFunc
    Alles anzeigen

    lg und eine schöne Woche noch

  • eingebundenes Powershell macht plötzlich Probleme

    • casi4712
    • 18. Juni 2024 um 10:25

    möchte ich ja gar nicht unbeding (bin mit Sicherheit kein PD Fetischist, ja ich weiss es gibt ne udf Multiping aber das hinft mir nicht viel weiter, damit erden leider viele Rechner im unserem Netz nicht angezeigt, weil das ICMP Protokoll ausgeschaltet ist. Was ich innerhalb von Autoit bräuchte wär eine ARP Ping Unterstützung, ich weiss aber nicht ob man diese mit Autoit entsprechend nachbilden kann.


    lg und schönen Tag noch

  • eingebundenes Powershell macht plötzlich Probleme

    • casi4712
    • 16. Juni 2024 um 13:53

    Okay ich kann schon verstehen, dass mir hier in Puncto eingebundene Powershellscripten keiner so richtig weiterhelfen mag, ist ja schliesslich ein Autoit Forum;), Ich nehme mal an es lag an den Jobs im alten Script, was dazu führte dass die Rückmeldung nicht korrekt abgefangen wird, ich habe dieses jetzt durch folgendes ersetzt, was dazu noch wesentlich schneller ist:


    AutoIt
              Local $sScript = _
    						'$ComputersA = Get-ADComputer -Filter "Name -like ''A*''"' & @CRLF & _
    						'$ComputersN = Get-ADComputer -Filter "Name -like ''N*''"' & @CRLF & _
    						'$Computers = $ComputersA + $ComputersN' & @CRLF & _
    						'function ping2 {' & @CRLF & _
    						'    param(' & @CRLF & _
    						'        $Computers,' & @CRLF & _
    						'        $TimeOut = 800 )' & @CRLF & _
    						'    $Tasks = [System.Collections.Generic.List[Object]]::new()' & @CRLF & _
    						'    foreach ($address in $Computers) {' & @CRLF & _
    						'        $Tasks.Add(' & @CRLF & _
    						'            [pscustomobject]@{' & @CRLF & _
    						'                Target = $address.Name' & @CRLF & _
    						'                Timestamp = [DateTimeOffset]::Now.ToUnixTimeMilliseconds()' & @CRLF & _
    						'                pingTask = [System.Net.NetworkInformation.Ping]::new().SendPingAsync($address.Name, $TimeOut)} ) }' & @CRLF & _
    						'    $Results = foreach ($Task in $Tasks) {' & @CRLF & _
    						'        try {' & @CRLF & _
    						'            $Task.pingTask.Wait()  # Warte auf das Ende der Ping-Task' & @CRLF & _
    						'            $Status = $Task.pingTask.Result.Status' & @CRLF & _
    						'            $IPAddress = if ($Task.pingTask.Result.Address) { $Task.pingTask.Result.Address.IPAddressToString } else { "N/A" }' & @CRLF & _
    						'            $Latency = $Task.pingTask.Result.RoundTripTime ; $Bytes = $Task.pingTask.Result.Buffer.Length }' & @CRLF & _
    						'        catch {$Status = "Error" ; $IPAddress = "N/A" ; $Latency = 0 ; }' & @CRLF & _
    						'        [pscustomobject]@{Timestamp = $Task.Timestamp; Target = $Task.Target; Status = $Status; IPAddress = $IPAddress; Latency = $Latency; Bytes = $Bytes} }' & @CRLF & _
    						'    return $Results }' & @CRLF & _
    						'$PingResults = ping2 -Computers $Computers' & @CRLF & _
    						'$PingResults | ForEach-Object {if ($_.Status -eq "Success") {Write-Output $_.Target}}'
    Alles anzeigen

    Eine Frage bleibt aber noch, das script ist autark nach ca 5 Sekunden fertig, aus Autoit gestartet braucht es ca 3 - 4 mal so lange, hat einer eine Erklärung dafür? Kann man das beschleunigen?


    lg und schönen Sonntag noch

  • eingebundenes Powershell macht plötzlich Probleme

    • casi4712
    • 14. Juni 2024 um 15:42

    So ich habs jetzt noch mal vereinfacht geschrieben, das temporäre PS funktioniert und gibt eine Liste der erreichbaren PCs aus. Leider schaffe ich es nicht dass die in das entsprechende txt file geschrieben werden, was ,mache ich falsch?


    so sieht das Ganze aus:

    AutoIt
    #include <FileConstants.au3>
    #include <Array.au3>
    
    #include <FileConstants.au3>
    #include <Array.au3>
    
    Local $FileName = "AllActivPC.txt"
    Local $TempDir = @TempDir ; Benutzer-Temp-Verzeichnis
    Local $ScriptDir = @ScriptDir & "\scripts" ; Scripts-Verzeichnis
    
    ; PowerShell-Skript als Zeichenkette mit zusätzlichen Write-Output-Anweisungen
    Local $sScript = _
        '$ComputersA = Get-ADComputer -Filter "Name -like ''A*''"' & @CRLF & _
        '$ComputersN = Get-ADComputer -Filter "Name -like ''N*''"' & @CRLF & _
        '$Computers = $ComputersA + $ComputersN' & @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 & _
        'if ($OnlineComputers) {' & @CRLF & _
        '    $OnlineComputers | ForEach-Object { Write-Output $_ }' & @CRLF & _
        '} else {' & @CRLF & _
        '}'
    ShowDomPCs($sScript, $FileName)
    
    
    ; Funktion in AutoIt zum Ausführen des PowerShell-Skripts und Speichern des Ergebnisses
    Func ShowDomPCs($script, $fileName)
        Local $tempPsFile = $TempDir & "\tempScript.ps1"
        Local $sFilePathScripts = $ScriptDir & "\" & $fileName
        Local $hFile = FileOpen($tempPsFile, $FO_OVERWRITE + $FO_CREATEPATH)
    
    		If $hFile = -1 Then
    			ConsoleWrite("Fehler beim Erstellen der temporären PowerShell-Datei." & @CRLF)
    			Return
    		EndIf
        FileWrite($hFile, $script)
        FileClose($hFile)
    
        Local $sCmd = 'powershell.exe -ExecutionPolicy Bypass -File "' & $tempPsFile & '"'
        Local $iPID = Run(@ComSpec & ' /c ' & $sCmd, "", @SW_SHOW, $STDOUT_CHILD + $STDERR_CHILD)
    
        ; Warten, bis der PowerShell-Prozess beendet ist
        ProcessWait($iPID)
    
        ; Überprüfen, ob die Datei erfolgreich erstellt wurde
    		If FileExists($sFilePathScripts) Then
    			ConsoleWrite("Ergebnis wurde erfolgreich in '" & $sFilePathScripts & "' gespeichert." & @CRLF)
    		Else
    			ConsoleWrite("Fehler beim Speichern des Ergebnisses." & @CRLF)
    		EndIf
    EndFunc
    Alles anzeigen

    Sieht einer den Fehler? Vielen Dank noch mal


    lg und schöes WE

  • parameter parsen mit Leerzeichen im Pfad

    • casi4712
    • 12. Juni 2024 um 09:53

    super Mombi, hat wieder mal geklappt, mit dem StringFormat werde ich mir mal ansschauen, inwiefern kann mir Strinformat bei solchen Aufggaben helfen?


    lg und schönen Tag noch

  • parameter parsen mit Leerzeichen im Pfad

    • casi4712
    • 12. Juni 2024 um 09:34

    jo danke, also aus auto it halt nur parameter und ZParameter, dieser wird aus einer Bedingung gewonndne ist entweder " /fs" oder eben nichts "" , versuche ich mal


    lg und schönen Tag noch

  • parameter parsen mit Leerzeichen im Pfad

    • casi4712
    • 11. Juni 2024 um 16:08

    ok hatte ich übersehen, sorry dass mit den vielen '"''" kann einen schon wahnsinnig machen, ich versuche gerade am ende nach Batchfile noch eine Variable aus Autoit reinzunehmen, die ans ende gehört, aber breche mir da wieder die Ohren bei. Wo fehlt denn jetzt was:

    AutoIt
    '$psexecArgs = "-u " + $username + " -p " + $password + " \\" + $computer + "' & $parameter & '""" + $batchFilePath + ''" + "' & $Zparams & '''"'' & @CRLF & _


    lg und schöne Woche noch

  • parameter parsen mit Leerzeichen im Pfad

    • casi4712
    • 3. Juni 2024 um 18:29

    Donnerwetter, das war ja eine Zangengeburt lach, es funz jetzt, nur komisch dass die anderen Dateitypen funktioniert hatten.


    lg und schönen Abend noch an alle Helfer

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™