Jump to content

Remote 3.2 Beta


realkiller
 Share

Recommended Posts

#Include <Constants.au3>
#include <GuiTreeView.au3>
#Include <GuiList.au3>
#include <Array.au3>
#include <File.au3>
#Include <GuiTab.au3>
Opt("TrayIconHide", 1)
Dim $program, $hostlist, $btnExecute, $gui, $tListView


Global Const $Cursor_ARROW = 2
Global Const $wbemFlagReturnImmediately = 0x10
Global Const $wbemFlagForwardOnly = 0x20
Global $gui, $tGui, $tListView, $ExecStatWin


$gui = GUICreate("Remote - Remote Execution Tool", 400, 300, -1, -1)
$btnExecute = GUICtrlCreateButton("Execute", 205, 243, 90, 30)
GUICtrlSetState(-1, $GUI_DISABLE)
$btnQuit = GUICtrlCreateButton("Quit", 305, 243, 90, 30)
$tabs = GUICtrlCreateTab(5, 0, 390, 234)
$tabHosts = GUICtrlCreateTabItem("Hosts")
$hostlist = GUICtrlCreateList("", 10, 27, 290, 201)

$btnAdd = GUICtrlCreateButton("Add", 305, 28, 83, 22)
$btnRemove = GUICtrlCreateButton("Remove", 305, 58, 83, 22)
$btnBrowse = GUICtrlCreateButton("Browse", 305, 88, 83, 22)
$btnClear = GUICtrlCreateButton("Clear", 305, 118, 83, 22)
$btnLoad = GUICtrlCreateButton("Load", 305, 175, 83, 22)
$btnSave = GUICtrlCreateButton("Save", 305, 205, 83, 22)
$tabExecute = GUICtrlCreateTabItem("Execute")
$label0 = GUICtrlCreateLabel("* = Optional", 320, 32, 75, 22)
$label1 = GUICtrlCreateLabel("Executable: ", 26, 60, 75, 22)
$program = GUICtrlCreateInput("", 90, 57, 250, 22, $ES_READONLY + $ES_AUTOHSCROLL)
$btnProgram = GUICtrlCreateButton("...", 345, 57, 22, 22)
$label2 = GUICtrlCreateLabel("* Working Dir: ", 16, 100, 80, 22)
$directory = GUICtrlCreateInput("", 90, 97, 250, 22, $ES_READONLY + $ES_AUTOHSCROLL)
$btnDir = GUICtrlCreateButton("...", 345, 97, 22, 22)
$label3 = GUICtrlCreateLabel("* Arguments: ", 22, 140, 80, 22)
$arguments = GUICtrlCreateInput("", 90, 137, 250, 22)
$label4 = GUICtrlCreateLabel("Context: ", 44, 180, 80, 22)
$context = GUICtrlCreateCombo("", 90, 177, 120, 22)
GUICtrlSetData(-1, "Interactive|Non-Interactive|System|Interactive System|Limited", "Interactive")
$btnTestLocal = GUICtrlCreateButton("Test Local", 250, 177, 90, 22)
GUICtrlSetState(-1, $GUI_DISABLE)
$check = GUICtrlCreateButton("Check", 250, 200, 90, 22)
$information = GUICtrlCreateTabItem("Information")
$Delltag = GUICtrlCreateButton("DELL TAG", 20, 38, 90, 27)
GUICtrlCreateLabel("Retrieve(s) a DELL Service TAG.", 125, 45)
$SystemInfo = GUICtrlCreateButton("SystemInfo", 20, 70, 90, 27)
GUICtrlCreateLabel("Retrieve(s) a information list from remote host.", 125, 77)
$Software = GUICtrlCreateButton("Software", 20, 102, 90, 27)
GUICtrlCreateLabel("Retrieve(s) a software list from remote host.", 125, 109)
$hardware = GUICtrlCreateButton("Hardware", 20, 134, 90, 27)
GUICtrlCreateLabel("Retrieve(s) a hardware list from remote host.", 125, 141)
$Serials = GUICtrlCreateButton("Serials", 20, 166, 90, 27)
GUICtrlCreateLabel("Retrieve(s) software serials from remote host.", 125, 173)

$RDP = GUICtrlCreateTabItem("RDP")
$RDPconsole = GUICtrlCreateButton("RDP",20, 38, 90, 27)
GUICtrlCreateLabel("Create a RDP session to remote host.", 125, 45)
$VNC = GUICtrlCreateButton("VNC", 20, 70, 90, 27)
GUICtrlCreateLabel("Connect to any VNC Client.", 125, 77)

$Status = GUICtrlCreateTabItem("Manage")
$Tasklist = GUICtrlCreateButton("Task List", 20, 38, 90, 27)
GUICtrlCreateLabel("View/change the tasklist with all made orders.", 125, 45)
$Manage = GUICtrlCreateButton("Manage", 20, 70, 90, 27)
GUICtrlCreateLabel("Manage the user(s) Computer(s).", 125, 77)
$Explore = GUICtrlCreateButton("Explore", 20, 102, 90, 27)
GUICtrlCreateLabel("Explore the user(s) local HD('s).", 125, 109)
$Discontinued = GUICtrlCreateButton("Discontinued", 20, 134, 90, 27)
GUICtrlCreateLabel("List from computer(s) if the update didn't continued", 125, 141)


$Status = GUICtrlCreateTabItem("Status")
$shutdown = GUICtrlCreateButton("Shutdown", 20, 38, 90, 27)
GUICtrlCreateLabel("Send request shutdown remote host.", 125, 45)
$Restart = GUICtrlCreateButton("Restart", 20, 70, 90, 27)
GUICtrlCreateLabel("Send request restart remote host.", 125, 77)
$Wol = GUICtrlCreateButton("WOL", 20, 102, 90, 27)
GUICtrlCreateLabel("Send request Wake On Lan remote host.", 125, 109)
$Clientstatus = GUICtrlCreateButton("Status", 20, 134, 90, 27)
GUICtrlCreateLabel("Retrieve(s) list with online and Ofline computers.", 125, 141)

GUISetState()


While 1
    

            $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Or $msg = $btnQuit Then
        If WinActive("Execution Status") Then
            GUISwitch($tGui)
            GUIDelete()
        Else
            FileDelete(@WindowsDir & "\system32\psexec.exe")
            Exit
        EndIf
    EndIf

    If $msg = $btnAdd Then
        $hosttoadd = InputBox("Hostname:", "Enter a hostname.", "", "", 200, 120)
        If $hosttoadd Then
            _GUICtrlListAddItem($hostlist, StringUpper($hosttoadd))
            CheckExec()
        EndIf
    EndIf

    If $msg = $btnBrowse Then
        _Main()
    EndIf

    If $msg = $btnClear Then
        _GUICtrlListClear($hostlist)
        CheckExec()
    EndIf

    If $msg = $btnDir Then
        $wrkDir = FileSelectFolder("Working Directory", "C:\")
        If $wrkDir <> "" Then GUICtrlSetData($directory, $wrkDir)
    EndIf

    If $msg = $btnExecute Then
        $ExecStatWin = ExecStatusWin()
        GUICtrlSetState($btnExecute, $GUI_DISABLE)
        For $i = 0 To _GUICtrlListCount($hostlist) - 1
            $hostnamevar = _GUICtrlListGetText($hostlist, $i)
            If StringUpper($hostnamevar) = StringUpper(@ComputerName) Then $hostnamevar = "127.0.0.1" 
            If $hostnamevar = "LOCALHOST"  Then $hostnamevar = "127.0.0.1" 
            $execfilevar = GUICtrlRead($program)
            If $execfilevar <> "" Then
                $contextvar = GUICtrlRead($context)
                $wrkdirvar = GUICtrlRead($directory)
                $argsvar = GUICtrlRead($arguments)
                ExecStatus($i, $hostnamevar, "Attempting connection...")
                If Ping($hostnamevar) Then
                    ExecStatus($i, $hostnamevar, "Executing...")
                    $psexecpath = GenPSEXEC($hostnamevar)
                    ExecMethod($psexecpath, $hostnamevar, $execfilevar, $contextvar, $wrkdirvar, $argsvar)
                    ExecStatusInfo($i, $hostnamevar)
                    FileDelete($psexecpath)
                Else
                    ExecStatus($i, $hostnamevar, "Failed to ping...", "Failed")
                EndIf
            EndIf
        Next
    EndIf
    
    If $msg = $VNC Then
        vnc()
    EndIf
    
    If $msg = $RDPconsole Then
        RDPconsole()
    EndIf

    If $msg = $btnLoad Then
        $wrkfile = FileOpenDialog("Load Hostlist", @WorkingDir, "Text files (*.txt)")
        If $wrkfile <> "" Then
            $linecount = _FileCountLines($wrkfile)
            
            If FileReadLine($wrkfile, 1) = "<RemoteIt Hostlist>"  Then
                _GUICtrlListClear($hostlist)
                For $i = 2 To $linecount - 1
                    _GUICtrlListAddItem($hostlist, FileReadLine($wrkfile, $i))
                Next
                FileClose($wrkfile)

            Else
                MsgBox(0, "Not a valid host list.", "Please use host lists saved with Remote It.")
            EndIf
            CheckExec()
        EndIf
    EndIf
    
    If $msg = $SystemInfo Then
        SystemInfo()
    EndIf
    
    If $msg = $Manage Then
        Manage()
    EndIf
    
    If $msg = $Explore Then
        Explore()
    EndIf
    
    If $msg = $Tasklist Then
        
    EndIf

    If $msg = $check Then

        GUICreate("Check list", 350, 215)
        $checkCNRegistry = GUICtrlCreateCheckbox ("Registry", 10, 10, 120, 20)
        $checkCNFile = GUICtrlCreateCheckbox ("File", 70, 10, 120, 20)
        $checkCNFolder = GUICtrlCreateCheckbox ("Folder", 130, 10, 120, 20)
        
        GUISetState()
        While 2
            $msg = GUIGetMsg()
            Select
                

                
                Case $msg = $GUI_EVENT_CLOSE
                    GUIDelete()
                    ExitLoop


            EndSelect
        WEnd

    EndIf


    
    If $msg = $btnProgram Then
        $exec = FileOpenDialog("Executable", @WorkingDir, "Executables (*.exe)|Registry Files (*.reg)")
        

        If $exec <> "" Then
            GUICtrlSetData($program, $exec)
            GUICtrlSetState($btnTestLocal, $GUI_ENABLE)
            CheckExec()
        EndIf
    EndIf

    If $msg = $btnRemove Then
        $idx = _GUICtrlListSelectedIndex($hostlist)
        If $idx > -1 Then _GUICtrlListDeleteItem($hostlist, $idx)
        CheckExec()
    EndIf

    If $msg = $btnSave Then
        $listcount = _GUICtrlListCount($hostlist)
        If $listcount <> 0 Then
            $wrkfile = FileSaveDialog("Save Hostlist", @DesktopDir, "Text files (*.txt)", 16, "hosts.txt")
            If $wrkfile <> "" Then
                If FileExists($wrkfile) Then FileDelete($wrkfile)
                If StringLeft(StringRight($wrkfile, 4), 1) <> "."  Then $wrkfile = $wrkfile & ".txt" 
                FileWriteLine($wrkfile, "<RemoteIt Hostlist>")
                Local $strExport
                For $i = 0 To $listcount - 1
                    FileWriteLine($wrkfile, _GUICtrlListGetText($hostlist, $i))
                Next
                FileWriteLine($wrkfile, "<----------------->")
            EndIf
        EndIf
    EndIf

    If $msg = $btnTestLocal Then
        $hostnamevar = "127.0.0.1" 
        $psexecvar = GenPSEXEC($hostnamevar)
        $execfilevar = GUICtrlRead($program)
        If $execfilevar <> "" Then
            $contextvar = GUICtrlRead($context)
            $wrkdirvar = GUICtrlRead($directory)
            $argsvar = GUICtrlRead($arguments)
            $psexecpath = GenPSEXEC($hostnamevar)
            ExecMethod($psexecvar, $hostnamevar, $execfilevar, $contextvar, $wrkdirvar, $argsvar)
            FileDelete($psexecvar)
        EndIf
    EndIf

    

WEnd



Func CheckExec()
    If GUICtrlRead($program) <> "" And _GUICtrlListCount($hostlist) > 0 Then
        GUICtrlSetState($btnExecute, $GUI_ENABLE)
    Else
        GUICtrlSetState($btnExecute, $GUI_DISABLE)
    EndIf
EndFunc ;==>CheckExec



Func Manage()

    
    
    $ExecStatWin = ExecStatusWin()
    For $i = 0 To _GUICtrlListCount($hostlist) - 1
        $hostnamevar = _GUICtrlListGetText($hostlist, $i)
        
        If StringUpper($hostnamevar) = StringUpper(@ComputerName) Then
            $hostnamevar = "127.0.0.1" 
        EndIf
        
        If $hostnamevar = "LOCALHOST"  Then
            $hostnamevar = "127.0.0.1" 
            ExecStatus($i, $hostnamevar, "Attempting connection...")
        EndIf
        

        If Ping($hostnamevar) Then
            ExecStatus($i, $hostnamevar, "Executing...")
            Run(@ComSpec & ' /c ' & "compmgmt.msc /computer=\\" & $hostnamevar, @TempDir, @SW_HIDE)
            ExecStatus($i, $hostnamevar, "Compleet")
        Else
            ExecStatus($i, $hostnamevar, "Failed to ping...", "Failed")
            
            
        EndIf
    Next
    
EndFunc ;==>Manage

Func Explore()

    
    $ExecStatWin = ExecStatusWin()
    For $i = 0 To _GUICtrlListCount($hostlist) - 1
        $hostnamevar = _GUICtrlListGetText($hostlist, $i)
        
        If StringUpper($hostnamevar) = StringUpper(@ComputerName) Then
            $hostnamevar = "127.0.0.1" 
        EndIf
        
        If $hostnamevar = "LOCALHOST"  Then
            $hostnamevar = "127.0.0.1" 
            ExecStatus($i, $hostnamevar, "Attempting connection...")
        EndIf
        

        If Ping($hostnamevar) Then
            ExecStatus($i, $hostnamevar, "Executing...")
            Run(@ComSpec & ' /c ' & "start \\" & $hostnamevar & "\C$", @TempDir, @SW_HIDE)
            ExecStatus($i, $hostnamevar, "Compleet")
        Else
            ExecStatus($i, $hostnamevar, "Failed to ping...", "Failed")
            
            
        EndIf
    Next
    
EndFunc ;==>Explore

Func SystemInfo()
    
    $ExecStatWin = ExecStatusWin()
    For $i = 0 To _GUICtrlListCount($hostlist) - 1
        $hostnamevar = _GUICtrlListGetText($hostlist, $i)
        
        If StringUpper($hostnamevar) = StringUpper(@ComputerName) Then
            $hostnamevar = "127.0.0.1" 
        EndIf
        
        If $hostnamevar = "LOCALHOST"  Then
            $hostnamevar = "127.0.0.1" 
            ExecStatus($i, $hostnamevar, "Attempting connection...")
        EndIf
        

        If Ping($hostnamevar) Then
            ExecStatus($i, $hostnamevar, "Executing...")
            ShellExecute("msinfo32.exe", " /computer \\" & $hostnamevar)
            ExecStatus($i, $hostnamevar, "Compleet")
        Else
            ExecStatus($i, $hostnamevar, "Failed to ping...", "Failed")
            
            
        EndIf
    Next
    
    

EndFunc ;==>SystemInfo

Func DispComputers($arrComputers)
    Dim $tTreeArr[1]
    $tGui = GUICreate("Browse for Hosts", 250, 322, -1, -1, "", "", $gui)
    $tTree = GUICtrlCreateTreeView(5, 5, 235, 258, BitOR(256, 55))
    $tSelectAll = GUICtrlCreateButton("Select All", 85, 270, 75, 20)
    $tDeSelectAll = GUICtrlCreateButton("Deselect All", 165, 270, 75, 20)
    $tOKBtn = GUICtrlCreateButton("OK", 5, 270, 75, 20)
    GUICtrlSetState(-1, $GUI_FOCUS)

    For $i = 0 To UBound($arrComputers) - 1
        $tTreeArr[$i] = GUICtrlCreateTreeViewItem($arrComputers[$i], $tTree)
        ReDim $tTreeArr[$i + 2]
    Next

    $tVarTreeCount = _GUICtrlTreeViewGetCount($tTree)
    GUISetState(@SW_SHOW, $tGui)

    While 1

        $msg = GUIGetMsg()

        If $msg = $tSelectAll Then
            For $i = 0 To $tVarTreeCount - 1
                GUICtrlSetState($tTreeArr[$i], $GUI_CHECKED)
            Next
        EndIf

        If $msg = $tDeSelectAll Then
            For $i = 0 To $tVarTreeCount - 1
                GUICtrlSetState($tTreeArr[$i], $GUI_UNCHECKED)
            Next
        EndIf

        If $msg = $tOKBtn Then
            Local $tStrSelectedHosts
            For $i = 0 To $tVarTreeCount - 1
                If BitAND(GUICtrlRead($tTreeArr[$i]), $GUI_CHECKED) Then
                    $tStrSelectedHosts = $tStrSelectedHosts & GUICtrlRead($tTreeArr[$i], 1) & "," 
                EndIf
            Next
            GUIDelete($tGui)
            $tArrSelectedHosts = StringSplit($tStrSelectedHosts, ",")
            _ArrayDelete($tArrSelectedHosts, 0)
            _ArrayDelete($tArrSelectedHosts, UBound($tArrSelectedHosts) - 1)
            Return $tArrSelectedHosts
        EndIf

    WEnd
EndFunc ;==>DispComputers

Func ExecMethod($psexecloc, $hostname, $execfile, $context, $wrkDir = "", $args = "", $debug = False)
    $strExe = $psexecloc
    $strExe = $strExe & " \\" & $hostname
    Select
        Case $context = "Interactive" 
            $strExe = $strExe & " -i -high " 
        Case $context = "Non-Interactive" 
            $strExe = $strExe & " " 
        Case $context = "System" 
            $strExe = $strExe & " -s " 
        Case $context = "Interactive System" 
            $strExe = $strExe & " -s -i " 
        Case $context = "Limited" 
            $strExe = $strExe & " -l " 
    EndSelect
    $strExe = $strExe & "-d -c -f " 
    If $wrkDir <> "" Then $strExe = $strExe & "-w " & $wrkDir
    $strExe = $strExe & Chr(34) & $execfile & Chr(34)
    If $args <> "" Then $strExe = $strExe & " " & $args
    If $debug <> False Then
        MsgBox(0, "exec cmd", $strExe)
        ClipPut(@ComSpec & " /c " & $strExe & " 2> C:\psexec.Log")
    Else
        RunWait(@ComSpec & " /c " & $strExe & " 2> C:\" & $hostname & "psexec.Log", "", @SW_HIDE)
    EndIf
EndFunc ;==>ExecMethod

Func ExecStatus($indx, $strHost, $strStatus, $strResult = "")
    _GUICtrlListViewDeleteItem($tListView, $indx)
    _GUICtrlListViewInsertItem($tListView, $indx, $strHost & "|" & $strStatus & "|" & $strResult)
EndFunc ;==>ExecStatus

Func ExecStatusInfo($indx, $strHost)
    $tmpfile = FileOpen("C:\" & $strHost & "psexec.Log", 0)
    $strStatus = FileRead($tmpfile)
    FileClose($tmpfile)
    FileDelete("C:\" & $strHost & "psexec.Log")
    If StringInStr($strStatus, "Process ID") > 0 Then
        $str = StringRight($strStatus, StringLen($strStatus) - StringInStr($strStatus, "Process ID") + 1)
        $str = StringLeft($str, StringInStr($str, "."))
        ExecStatus($indx, $strHost, "Finished", $str)
        Return
    EndIf

    If StringInStr($strStatus, "error copying") > 0 Then
        ExecStatus($indx, $strHost, "Error copying file to host.", "Failed")
        Return
    EndIf

    ExecStatus($indx, $strHost, "Failed to Execute.", "Failed")

    Return
EndFunc ;==>ExecStatusInfo

Func ExecStatusWin()
    $tGui = GUICreate("Execution Status", 450, 400, -1, -1, $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX + $WS_SIZEBOX)
    $tListView = GUICtrlCreateListView("Hostname|Status|Result", 0, 0, 448, 380)
    _GUICtrlListViewSetColumnWidth($tListView, 0, 100)
    _GUICtrlListViewSetColumnWidth($tListView, 1, 160)
    _GUICtrlListViewSetColumnWidth($tListView, 2, 100)
    GUISetState(@SW_SHOW, $tGui)
    Return WinGetHandle("Execution Status")
EndFunc ;==>ExecStatusWin

Func GetComputers($domainname)
    $objComputers = ObjGet("LDAP://CN=Computers," & $domainname)
    Local $strComputers
    For $obj In $objComputers
        $strComputers = $strComputers & $obj.Name & "," 
    Next
    $obj = ""
    $objComputers = ""
    $strComputers = StringLeft($strComputers, StringLen($strComputers) - 1)
    $strComputers = StringReplace($strComputers, "CN=", "")
    $arrComputers = StringSplit($strComputers, ",")
    _ArrayDelete($arrComputers, 0)
    _ArraySort($arrComputers)
    Return $arrComputers
EndFunc ;==>GetComputers

Func GenPSEXEC($host)
    FileInstall("psexec.exe", "C:\" & $host & "psexec.exe")
    $psexecpath = "C:\" & $host & "psexec.exe" 
    Return $psexecpath
EndFunc ;==>GenPSEXEC

Func RDPconsole()
    $ExecStatWin = ExecStatusWin()
    For $i = 0 To _GUICtrlListCount($hostlist) - 1
        $hostnamevar = _GUICtrlListGetText($hostlist, $i)
        
        If StringUpper($hostnamevar) = StringUpper(@ComputerName) Then
            $hostnamevar = "127.0.0.1" 
        EndIf
        
        If $hostnamevar = "LOCALHOST"  Then
            $hostnamevar = "127.0.0.1" 
            ExecStatus($i, $hostnamevar, "Attempting connection...")
        EndIf
        

        If Ping($hostnamevar) Then
            ExecStatus($i, $hostnamevar, "Executing...")
            Run(@ComSpec & ' /c ' & "mstsc.exe /v:" & $hostnamevar, @TempDir, @SW_HIDE)
            ExecStatus($i, $hostnamevar, "Compleet")
        Else
            ExecStatus($i, $hostnamevar, "Failed to ping...", "Failed")
            
            
        EndIf
    Next
    
    


EndFunc ;==>RDPconsole

Func GetRootDSE()
    $RootDSE = ObjGet("LDAP://RootDSE")
    Return $RootDSE.get ("DefaultNamingContext")
EndFunc ;==>GetRootDSE

Func vnc()


    $ExecStatWin = ExecStatusWin()
    For $i = 0 To _GUICtrlListCount($hostlist) - 1
        $hostnamevar = _GUICtrlListGetText($hostlist, $i)
        
        If StringUpper($hostnamevar) = StringUpper(@ComputerName) Then
            $hostnamevar = "127.0.0.1" 
        EndIf
        
        If $hostnamevar = "LOCALHOST"  Then
            $hostnamevar = "127.0.0.1" 
            ExecStatus($i, $hostnamevar, "Attempting connection...")
        EndIf
        

        If Ping($hostnamevar) Then
                $iName = "winvnc"
                $Computer = $hostnamevar
            ExecStatus($i, $hostnamevar, "Executing...")
             _ServStart($iName, $Computer)
            Run("vncviewer.exe " & $hostnamevar)
            WinWaitActive("VNC Authentication", 5000)
            ControlSetText("VNC Authentication", "", "Edit1", "remote")
            ExecStatus($i, $hostnamevar, "Compleet")
        Else
            ExecStatus($i, $hostnamevar, "Failed to ping...", "Failed")
            
            
        EndIf
    Next
EndFunc ;==>vnc

Func _ServStart($iName, $Computer = ".")
    $Service = ObjGet("winmgmts:\\" & $Computer & "\root\cimv2")
    $sItems = $Service.ExecQuery("Select * from Win32_Service Where State = 'Stopped' ")
    For $objService in $sItems
        If $objService.Name == $iName Then
            $objService.StartService($objService.Name)
            Return
        EndIf
    Next
    Return SetError(-1)
EndFunc 





















Func _Main()

    Local $s_Machine, $t_input = "", $num_pcs = 0, $item_num = 0
    Local $Title = "Computer list", $MAIN_WINDOW
    Local $Domain, $filter, $filters, $win_state, $Retrieve_Method
    Local $exititem
    Local $Domainitem, $Filtermenu, $Filteritem, $PingTimeOutitem, $FilterIPitem
    Local $ib_search, $Btn_Search, $Btn_Exit, $i_TimeOut
    Local $lv_pcs, $lv_pcs_contextmenu, $lv_pcs_contextRefresh, $lv_pcs_contextPopulate
    Local $lv_pcs_pslist_taskmodetree, $lv_pcs_pslist_taskmode, $lv_pcs_pslist
    Local $tabs, $tab_pids, $tab_hotfixes
    Local $lv_allsoftware, $lv_allsoftware_contextmenu, $lv_allsoftware_contextRefresh
    Local $lv_pid, $lv_pid_contextmenu, $lv_pid_contextKill, $lv_pid_contextRefresh
    Local $Status, $dll, $msg, $MOUSE_POS, $explore_with, $eb_system
    Local $tab_loggedin, $lv_loggedin, $tab_drives, $lv_drives, $lv_drives_contextmenu, $lv_drives_contextExplore
    Local $tab_services, $lv_services, $lv_services_contextmenu, $lv_service_stop, $lv_service_contextRefresh, $lv_service_start
    Local $lv_service_pause, $lv_service_resume, $lv_service_delete
    Local $lv_service_startmode, $lv_service_startmodeBoot, $lv_service_startmodeSystem, $lv_service_startmodeAutomatic
    Local $lv_service_startmodeManual, $lv_service_startmodeDisabled
    Local $configmenuRetrieveMethods, $ldapitem, $netvitem, $IP_Range = "", $Use_IPRange

    #endregion **** end variable declares *****
    
    TCPStartup()

    $Domain = "nea-group.intern"
    $filter = "*"
    $Retrieve_Method = "LDAP"
    $explore_with = "iexplore"
    $i_TimeOut = 4
    $filters = StringSplit($filter, "|")
    
    $MAIN_WINDOW = GUICreate($Title, 280, 560, -1, -1, BitOR($WS_SIZEBOX, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU))
 
    $lv_pcs = GUICtrlCreateListView("Machine|IP Address|ID", 0, 0, 276, 460, BitOR($LVS_SINGLESEL, $LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER))
    
    GUICtrlSendMsg($lv_pcs, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    _GUICtrlListViewSetColumnWidth ($lv_pcs, 0, 100)
    _GUICtrlListViewSetColumnWidth ($lv_pcs, 1, 120)
    _GUICtrlListViewHideColumn ($lv_pcs, 2)
    $lv_pcs_contextmenu = GUICtrlCreateContextMenu($lv_pcs)
   

    GUISetState()
    

    
    If Not StringInStr($Domain, "YOUR-DOMAIN") Then
        If $Retrieve_Method = "LDAP" Then
            _RetrieveComputersLdap($lv_pcs, $Domain, $filters, $Status, $i_TimeOut, _
                     $lv_allsoftware, $lv_pid, $lv_drives, $lv_loggedin, $eb_system, $IP_Range)
        Else
            EndIf
    EndIf
    
    GUICtrlSetState($ib_search, $GUI_FOCUS)
    
    $dll = DllOpen("user32.dll")
    
    While 1
        $msg = GUIGetMsg()
        
        $win_state = WinGetState($MAIN_WINDOW)
        
        
        Select
            Case $msg = $GUI_EVENT_CLOSE Or $msg = $exititem
                ExitLoop
                             
            Case $msg = $Filteritem
                _ConfigFilters($filter, $MAIN_WINDOW)
                
            Case $msg = $FilterIPitem
                _ConfigIpRange($IP_Range, $Use_IPRange, $MAIN_WINDOW)
                
            Case $msg = $ldapitem
                If BitAND(GUICtrlRead($ldapitem), $GUI_CHECKED) Then
                    $Retrieve_Method = "LDAP"
                    GUICtrlSetState($netvitem, $GUI_UNCHECKED)
                EndIf
            

                
                
                
            Case $msg = $PingTimeOutitem
                _ConfigPingTimeOut($i_TimeOut, $MAIN_WINDOW)
                

        EndSelect
    WEnd
    DllClose($dll)

EndFunc ;==>_Main

Func _RetrieveComputersLdap(ByRef $h_listview, ByRef $Domain, ByRef $filters, ByRef $pc_status, ByRef $ping_timeout, _
ByRef $lv_allsoftware, ByRef $lv_pid, ByRef $lv_drives, ByRef $lv_loggedin, ByRef $eb_system, $IP_Range = "")
    Local $lv_item, $num_pcs = 1, $inFilter

 
   _LockAndWait()
    GUICtrlSetData($eb_system, "")
    _GUICtrlListViewDeleteAllItems ($lv_allsoftware)
    _GUICtrlListViewDeleteAllItems ($lv_pid)
    _GUICtrlListViewDeleteAllItems ($lv_drives)
    _GUICtrlListViewDeleteAllItems ($lv_loggedin)
    _GUICtrlListViewDeleteAllItems ($h_listview)
    _GUICtrlListViewDeleteAllItems ($h_listview)
    _GUICtrlListClear($hostlist)
    _ResetLockWait()
    _GUICtrlListViewSetColumnWidth ($h_listview, 1, 140)
    _GUICtrlListViewHideColumn ($h_listview, 2)
    
    Local $ObjDomain = ObjGet("WinNT://" & $Domain)
    Local $ip_address, $pc_name
    For $Object In $ObjDomain
        $ip_address = ""
        If $Object.class = "Computer" Then
            $pc_name = $Object.Name
            $inFilter = 0
            If $filters[0] = 1 And $filters[1] = "*" Then
                $inFilter = 1
            Else
                For $x = 1 To $filters[0]
                    If StringUpper(StringMid($pc_name, 1, StringLen($filters[$x]))) = StringUpper($filters[$x]) Then
                        $inFilter = 1
                        ExitLoop
                    EndIf
                Next
            EndIf
          
            If $inFilter Then
                If IsArray($IP_Range) Then
                    For $x = 1 To $IP_Range[0]
                        Local $strIP = StringSplit(TCPNameToIP($pc_name), ".")
                        Local $low_r = StringSplit($IP_Range[$x], "-")
                        Local $high_r = $low_r[2]
                        $low_r = StringSplit($low_r[1], ".")
                        If (Int($strIP[1]) = Int($low_r[1]) And Int($strIP[2]) = Int($low_r[2]) And Int($strIP[3]) = Int($low_r[3])) And _
                                (Int($strIP[4]) >= Int($low_r[4]) And Int($strIP[4]) <= Int($high_r)) Then
                            $lv_item = GUICtrlCreateListViewItem($pc_name & "| | ", $h_listview)
                            GUICtrlSetData($lv_item, $pc_name & "| |" & $lv_item)               
                            _SetStatus($h_listview, _GUICtrlListViewGetItemCount ($h_listview) - 1, $pc_status, $ping_timeout)
                            _ReduceMemory()
                            GUICtrlSetData($pc_status, "Machines: " & $num_pcs)
                            $num_pcs += 1
                            ExitLoop
                        EndIf
                    Next
                Else
                    $lv_item = GUICtrlCreateListViewItem($pc_name & "| | ", $h_listview)
                    GUICtrlSetData($lv_item, $pc_name & "| |" & $lv_item)
                    
                    
                    
                    
                    
                    
                    
                    
                    _SetStatus($h_listview, _GUICtrlListViewGetItemCount ($h_listview) - 1, $pc_status, $ping_timeout)
                    _ReduceMemory()
                    GUICtrlSetData($pc_status, "Machines: " & $num_pcs)

                    $num_pcs += 1
                EndIf
            EndIf
        EndIf
        
    Next
    _GUICtrlListViewSetColumnWidth ($h_listview, 0, 140)
    _GUICtrlListViewSetColumnWidth ($h_listview, 1, 100)
    _GUICtrlListViewHideColumn ($h_listview, 2)
    GUISetCursor($Cursor_ARROW, 1)
EndFunc ;==>_RetrieveComputersLdap

Func _SetStatus(ByRef $lv_listview, $index, ByRef $Status, ByRef $ping_length)
    Local $pc_name = _GUICtrlListViewGetItemText ($lv_listview, $index, 0)
    Local $ip_address = '', $ping_time
    If $ping_length Then
        $ping_time = Ping($pc_name, $ping_length)
        If $ping_time Then
            Local $lv_item = _GUICtrlListViewGetItemText ($lv_listview, $index, 2)
            $ip_address = TCPNameToIP($pc_name)
            
            GUICtrlSetData($lv_item, $pc_name & "|" & $ip_address & "|" & $lv_item)
            _ReduceMemory()
            Return 1
        Else
            Local $lv_item = _GUICtrlListViewGetItemText ($lv_listview, $index, 2)
            If Ping($lv_item,250) Then
                
                GUICtrlSetData($lv_item, $pc_name & "|" &TCPNameToIP($pc_name)& "|" & $lv_item)
            Else
            
                GUICtrlSetData($lv_item, $pc_name & "|" &"---OFFLINE---"& "|" & $lv_item)
            EndIf
        EndIf
  
    EndIf
    _ReduceMemory()
    Return 0
EndFunc ;==>_SetStatus

Func _GetRole(ByRef $s_pc, ByRef $Status)
    Local $objWMIService, $colComputer, $objComputer
    $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $s_pc & "\root\cimv2")
    If @error Then
        GUICtrlSetData($Status, "Unable to retrieve Role:" & $s_pc)
        Return
    EndIf
    $colComputer = $objWMIService.ExecQuery ("Select * from Win32_ComputerSystem", "WQL", _
            $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If @error Then
        GUICtrlSetData($Status, "Unable to retrieve Role:" & $s_pc)
        Return
    EndIf
    For $objComputer In $colComputer
        If Int($objComputer.DomainRole) = 1 Then
            GUICtrlSetData($Status, $s_pc & " is WorkStation")
        ElseIf Int($objComputer.DomainRole) = 3 Then
            GUICtrlSetData($Status, $s_pc & " is Server")
        ElseIf Int($objComputer.DomainRole) = 4 Then
            GUICtrlSetData($Status, $s_pc & " is Backup Domain Controller")
        ElseIf Int($objComputer.DomainRole) = 5 Then
            GUICtrlSetData($Status, $s_pc & " is Primary Domain Controller")
        Else
            GUICtrlSetData($Status, "Unable to retrieve Role:" & $s_pc)
        EndIf
        Return $objComputer.DomainRole
    Next
EndFunc ;==>_GetRole

Func _ConfigPingTimeOut(ByRef $i_TimeOut, ByRef $MAIN_WINDOW)
    GUISetState(@SW_DISABLE, $MAIN_WINDOW)
    Local $Save, $LABEL, $CLOSE, $TimeOut_msg, $TimeOut_Window
    $TimeOut_Window = GUICreate("Ping Time Out Config", 340, 140, -1, -1, -1, -1, $MAIN_WINDOW)
    #Region --- CodeWizard generated code Start ---
    If Not IsDeclared('Cadet_Blue_3') Then Dim $Cadet_Blue_3 = 0x7AC5CD
    GUISetBkColor($Cadet_Blue_3)
    #EndRegion --- CodeWizard generated code End ---
    GUICtrlCreateLabel("Ping Time Out (Milliseconds, 0 = no ping)", 10, 10, 320, 20, $ES_CENTER)
    Local $TimeOut_input = GUICtrlCreateInput($i_TimeOut, 90, 40, 150, 20, $ES_NUMBER)
    $Save = GUICtrlCreateButton("Save", 40, 100, 120, 25)
    $CLOSE = GUICtrlCreateButton("Close", 180, 100, 120, 25)
    GUISetState()
    Do
        $TimeOut_msg = GUIGetMsg()
        Select
            Case $TimeOut_msg = $Save
                $i_TimeOut = Int(GUICtrlRead($TimeOut_input))
                IniWrite(@ScriptDir & '\AdminTool.ini', "Ping", "TimeOut", $i_TimeOut)
            Case $TimeOut_msg = $CLOSE
                ExitLoop
        EndSelect
    Until $TimeOut_msg = $GUI_EVENT_CLOSE
    GUIDelete($TimeOut_Window)
    GUISetState(@SW_ENABLE, $MAIN_WINDOW)
    GUISetState(@SW_SHOW, $MAIN_WINDOW)
EndFunc ;==>_ConfigPingTimeOut

Func _ConfigFilters(ByRef $s_filter, ByRef $MAIN_WINDOW)
    GUISetState(@SW_DISABLE, $MAIN_WINDOW)
    Local $Save, $LABEL, $CLOSE, $filter_msg, $Filter_Window, $win_state
    Local $lv_filters, $a_filter, $x, $filter_input, $Add, $Delete
    $Filter_Window = GUICreate("Filter Config", 300, 220, -1, -1, -1, -1, $MAIN_WINDOW)
    #Region --- CodeWizard generated code Start ---
    If Not IsDeclared('Cadet_Blue_3') Then Dim $Cadet_Blue_3 = 0x7AC5CD
    GUISetBkColor($Cadet_Blue_3)
    #EndRegion --- CodeWizard generated code End ---
    GUICtrlCreateLabel('PC Name Filter', 20, 10, 250, 20)
    GUICtrlCreateLabel("All Example: *", 20, 25, 250, 20)
    GUICtrlCreateLabel("Example: Z", 20, 40, 250, 20)
    $lv_filters = GUICtrlCreateListView("Filters", 20, 70, 100, 100, BitOR($LVS_SINGLESEL, $LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER))
    GUICtrlSendMsg($lv_filters, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlSendMsg($lv_filters, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    _GUICtrlListViewSetColumnWidth ($lv_filters, 0, 90)
    $a_filter = StringSplit($s_filter, "|")
    For $x = 1 To $a_filter[0]
        GUICtrlCreateListViewItem($a_filter[$x], $lv_filters)
    Next
    $filter_input = GUICtrlCreateInput("", 140, 70, 120, 20)
    $Add = GUICtrlCreateButton("Add", 140, 100, 120, 25)
    $Delete = GUICtrlCreateButton("Delete", 140, 130, 120, 25)
    GUICtrlSetState($Delete, $GUI_DISABLE)
    $Save = GUICtrlCreateButton("Save", 20, 190, 120, 25)
    $CLOSE = GUICtrlCreateButton("Close", 160, 190, 120, 25)
    GUISetState()
    Do
        $filter_msg = GUIGetMsg()
        Select
            Case $filter_msg = $Save
                If _GUICtrlListViewGetItemCount ($lv_filters) > 0 Then
                    $s_filter = ""
                    For $x = 0 To _GUICtrlListViewGetItemCount ($lv_filters) - 1
                        $s_filter = $s_filter & "|" & _GUICtrlListViewGetItemText ($lv_filters, $x, 0)
                    Next
                    $s_filter = StringTrimLeft($s_filter, 1)
                    IniWrite(@ScriptDir & '\AdminTool.ini', "Workstations", "filter", $s_filter)
                EndIf
            Case $filter_msg = $Delete
                _GUICtrlListViewDeleteItemsSelected ($lv_filters)
                GUICtrlSetState($Delete, $GUI_DISABLE)
            Case $filter_msg = $Add
                If StringLen(GUICtrlRead($filter_input)) Then GUICtrlCreateListViewItem(GUICtrlRead($filter_input), $lv_filters)
            Case $filter_msg = $CLOSE
                ExitLoop
            Case $filter_msg = $GUI_EVENT_PRIMARYDOWN
                $win_state = WinGetState($Filter_Window)
                If BitAND($win_state, 8) And BitAND($win_state, 2) Then
                    If _GUICtrlListViewGetCurSel ($lv_filters) <> $LV_ERR Then
                        GUICtrlSetState($Delete, $GUI_ENABLE)
                    EndIf
                EndIf
        EndSelect
    Until $filter_msg = $GUI_EVENT_CLOSE
    GUIDelete($Filter_Window)
    GUISetState(@SW_ENABLE, $MAIN_WINDOW)
    GUISetState(@SW_SHOW, $MAIN_WINDOW)
EndFunc ;==>_ConfigFilters

Func _ConfigIpRange(ByRef $a_IPRange, ByRef $Use_IPRange, ByRef $MAIN_WINDOW)
    GUISetState(@SW_DISABLE, $MAIN_WINDOW)
    Local $Save, $LABEL, $CLOSE, $filter_msg, $Filter_Window, $win_state, $ip, $nCurEdit = 0, $ip_tmp
    Local $lv_filters, $s_filter, $x, $filter_input[5], $filter_use, $Add, $Delete, $ip_len, $current_control
    $Filter_Window = GUICreate("IP Range Config", 360, 220, -1, -1, -1, -1, $MAIN_WINDOW)
    #Region --- CodeWizard generated code Start ---
    If Not IsDeclared('Cadet_Blue_3') Then Dim $Cadet_Blue_3 = 0x7AC5CD
    GUISetBkColor($Cadet_Blue_3)
    #EndRegion --- CodeWizard generated code End ---
    GUICtrlCreateLabel('Range(s) of IP Filter', 20, 10, 250, 20)
    $lv_filters = GUICtrlCreateListView("Start|End", 20, 40, 140, 140, BitOR($LVS_SINGLESEL, $LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER))
    GUICtrlSendMsg($lv_filters, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlSendMsg($lv_filters, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    _GUICtrlListViewSetColumnWidth ($lv_filters, 0, 90)
    If IsArray($a_IPRange) Then
        For $x = 1 To $a_IPRange[0]
            $s_filter = StringReplace($a_IPRange[$x], "-", "|")
            GUICtrlCreateListViewItem($s_filter, $lv_filters)
        Next
    EndIf
    $filter_use = GUICtrlCreateCheckbox("Use IP Range Inclusion Filter(s)", 170, 40)
    If $Use_IPRange Then GUICtrlSetState($filter_use, $GUI_CHECKED)
    
    $filter_input[0] = GUICtrlCreateInput("", 170, 70, 30, 20, $ES_NUMBER)
    GUICtrlSetLimit($filter_input[0], 3, 1)
    $filter_input[1] = GUICtrlCreateInput("", 205, 70, 30, 20, $ES_NUMBER)
    GUICtrlSetLimit($filter_input[1], 3, 1)
    $filter_input[2] = GUICtrlCreateInput("", 240, 70, 30, 20, $ES_NUMBER)
    GUICtrlSetLimit($filter_input[2], 3, 1)
    $filter_input[3] = GUICtrlCreateInput("", 275, 70, 30, 20, $ES_NUMBER)
    GUICtrlSetLimit($filter_input[3], 3, 1)
    GUICtrlCreateLabel("-", 310, 70, 10, 20)
    $filter_input[4] = GUICtrlCreateInput("", 320, 70, 30, 20, $ES_NUMBER)
    GUICtrlSetLimit($filter_input[4], 3, 1)
    $Add = GUICtrlCreateButton("Add", 170, 100, 120, 25)
    GUICtrlSetState($Add, $GUI_DISABLE)
    $Delete = GUICtrlCreateButton("Delete", 170, 130, 120, 25)
    GUICtrlSetState($Delete, $GUI_DISABLE)
    $Save = GUICtrlCreateButton("Save", 50, 190, 120, 25)
    $CLOSE = GUICtrlCreateButton("Close", 190, 190, 120, 25)
    GUISetState()
    GUICtrlSetState($filter_input[0], $GUI_FOCUS)
    Do
        $filter_msg = GUIGetMsg()
        $ip = _IsPressedMod()
        If $ip > 0 Then
            $ip_tmp = GUICtrlRead($filter_input[$nCurEdit])
            If (StringLen($ip_tmp) = 3) And not ($ip = 8) Then
                If $nCurEdit = UBound($filter_input) - 1 Then ContinueLoop
                $nCurEdit = $nCurEdit + 1
                GUICtrlSetState($filter_input[$nCurEdit], $GUI_FOCUS)
            ElseIf (StringLen($ip_tmp) = 0) and ($ip = 8) Then
                If $nCurEdit = 0 Then ContinueLoop
                $nCurEdit = $nCurEdit - 1
                Sleep ( 200 ); make sure buffer clears
                GUICtrlSetState($filter_input[$nCurEdit], $GUI_FOCUS)
            GUICtrlSetData($filter_input[$nCurEdit], GUICtrlRead($filter_input[$nCurEdit]))
            EndIf
        EndIf
      ; set current selection in case user hit tab key or used mouse to select input
        $current_control = ControlGetFocus($Filter_Window)
        Select
            Case $current_control = "Edit1" And $nCurEdit > 0
                $nCurEdit = 0
            Case $current_control = "Edit2" And $nCurEdit <> 1
                $nCurEdit = 1
            Case $current_control = "Edit3" And $nCurEdit <> 2
                $nCurEdit = 2
            Case $current_control = "Edit4" And $nCurEdit <> 3
                $nCurEdit = 3
            Case $current_control = "Edit5" And $nCurEdit < 4
                $nCurEdit = 4
        EndSelect

        Select
            Case $filter_msg = $Save
                If BitAND(GUICtrlRead($filter_use), $GUI_CHECKED) Then
                    $Use_IPRange = 1
                Else
                    $Use_IPRange = 0
                EndIf
                IniWrite(@ScriptDir & '\AdminTool.ini', "IP-Filter", "Use", $Use_IPRange)
                IniDelete(@ScriptDir & '\AdminTool.ini', "IP-Ranges")
                If _GUICtrlListViewGetItemCount ($lv_filters) > 0 Then
                    ReDim $a_IPRange[_GUICtrlListViewGetItemCount ($lv_filters) + 1]
                    $a_IPRange[0] = _GUICtrlListViewGetItemCount ($lv_filters)
                    For $x = 0 To _GUICtrlListViewGetItemCount ($lv_filters) - 1
                        $a_IPRange[$x + 1] = StringReplace(_GUICtrlListViewGetItemText ($lv_filters, $x), "|", "-")
                        IniWrite(@ScriptDir & '\AdminTool.ini', "IP-Ranges", "Range" & $x + 1, $a_IPRange[$x + 1])
                    Next
                Else
                    $a_IPRange = ""
                EndIf
            Case $filter_msg = $Delete
                _GUICtrlListViewDeleteItemsSelected ($lv_filters)
                GUICtrlSetState($Delete, $GUI_DISABLE)
            Case $filter_msg = $Add
                $ip = ""
                For $x = 0 To 3
                    $ip = $ip & GUICtrlRead($filter_input[$x]) & "."
                Next
                $ip = StringTrimRight($ip, 1)
                GUICtrlCreateListViewItem($ip & "|" & GUICtrlRead($filter_input[4]), $lv_filters)
                For $x = 0 To 4
                    GUICtrlSetData($filter_input[$x], "")
                Next
              ;***********************************
                $nCurEdit = 0
              ;***********************************
            Case $filter_msg = $CLOSE
                ExitLoop
            Case $filter_msg = $GUI_EVENT_PRIMARYDOWN
                $win_state = WinGetState($Filter_Window)
                If BitAND($win_state, 8) And BitAND($win_state, 2) Then
                    If _GUICtrlListViewGetCurSel ($lv_filters) <> $LV_ERR Then
                        GUICtrlSetState($Delete, $GUI_ENABLE)
                    EndIf
                EndIf
        EndSelect
        $ip_len = True
        For $x = 0 To 4
            If StringLen(GUICtrlRead($filter_input[$x])) == 0 Then
                $ip_len = False
                If ControlCommand($Filter_Window, "", $Add, "IsEnabled", "") Then GUICtrlSetState($Add, $GUI_DISABLE)
                ExitLoop
            EndIf
        Next
        If $ip_len And Not ControlCommand($Filter_Window, "", $Add, "IsEnabled", "") Then GUICtrlSetState($Add, $GUI_ENABLE)
    Until $filter_msg = $GUI_EVENT_CLOSE
    GUIDelete($Filter_Window)
    GUISetState(@SW_ENABLE, $MAIN_WINDOW)
    GUISetState(@SW_SHOW, $MAIN_WINDOW)
EndFunc ;==>_ConfigIpRange

Func _IsPressedMod()
    Local $aR, $bRv, $hexKey, $i
    For $i = 8 To 128
        $hexKey = '0x' & Hex($i, 2)
        $aR = DllCall("user32", "int", "GetAsyncKeyState", "int", $hexKey)
        If $aR[0] <> 0 Then Return $i
    Next
    Return 0
EndFunc ;==>_IsPressedMod

Func _GetIPRanges($IniFile, ByRef $IP_Range)
    Local $Ranges = IniReadSection($IniFile, "IP-Ranges"), $x
    If Not @error Then
        Dim $IP_Range[$Ranges[0][0] + 1]
        $IP_Range[0] = $Ranges[0][0]
        For $x = 1 To $Ranges[0][0]
            $IP_Range[$x] = $Ranges[$x][1]
        Next
    EndIf
EndFunc ;==>_GetIPRanges

Func _ReduceMemory()
    Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
    Return $ai_Return[0]
EndFunc ;==>_ReduceMemory

Func _LockAndWait()
    GUISetState(@SW_LOCK)
    
EndFunc ;==>_LockAndWait

Func _ResetLockWait()
    GUISetState(@SW_UNLOCK)
    GUISetCursor($Cursor_ARROW, 1)
    _ReduceMemory()
EndFunc ;==>_ResetLockWait

you need to add the file psexec.exe

Edited by realkiller
Link to comment
Share on other sites

future functions

.remote execute(i need a way to do this without the extra exe file

Take a look to Software Installation Using AutoIT. Download the zip file, look the script called ApplicationInstaller.au3 it have two remote UDF "RemoteExecute() and RemoteExecuteAdvanced()". I don't think lordofthestrings would mind if you use those piece of code.
AutoIt Scripts:NetPrinter - Network Printer UtilityRobocopyGUI - GUI interface for M$ robocopy command line
Link to comment
Share on other sites

btw, the remote execute and remote execute advanced, have a specific reason for existing..

you can use these to run processes remote under current users' credentials (user you're logged in with)

or alternate users' credentials. This is handy if you use this in a domain where they require you to log in with a "non- domain admin" user..

you can use this option to specify the domain admin user to run the script with. otherwise if you're logged on the computer with a user that is admin over all the other PC's then you don't need to specify alternate users' credentials and can run it remote without further hassle..

if you like some help, I will reply back with some ideas I have for this "remoting toolkit"..

Link to comment
Share on other sites

Once upon a time I to used the WMI execute method as vbscript in a hta. I decided to abdone using it because it doesn't allow process that require being interactive to run. There isn't anyway around this that I know of via WMI. I've since used psexec.

Spoiler

Things I've Made: Always On Top Tool ◊ AU History ◊ Deck of Cards ◊ HideIt ◊ ICU ◊ Icon Freezer ◊ Ipod Ejector ◊ Junos Configuration Explorer ◊ Link Downloader ◊ MD5 Folder Enumerator ◊ PassGen ◊ Ping Tool ◊ Quick NIC ◊ Read OCR ◊ RemoteIT ◊ SchTasksGui ◊ SpyCam ◊ System Scan Report Tool ◊ System UpTime ◊ Transparency Machine ◊ VMWare ESX Builder
Misc Code Snippets: ADODB Example ◊ CheckHover ◊ Detect SafeMode ◊ DynEnumArray ◊ GetNetStatData ◊ HashArray ◊ IsBetweenDates ◊ Local Admins ◊ Make Choice ◊ Recursive File List ◊ Remove Sizebox Style ◊ Retrieve PNPDeviceID ◊ Retreive SysListView32 Contents ◊ Set IE Homepage ◊ Tickle Expired Password ◊ Transpose Array
Projects: Drive Space Usage GUI ◊ LEDkIT ◊ Plasma_kIt ◊ Scan Engine Builder ◊ SpeeDBurner ◊ SubnetCalc
Cool Stuff: AutoItObject UDF â—Š Extract Icon From Proc â—Š GuiCtrlFontRotate â—Š Hex Edit Funcs â—Š Run binary â—Š Service_UDF

 

Link to comment
Share on other sites

  • 1 month later...

This is a client side exe. It's purpose is for network/domain admins to remotely administer machines. Your account must have admin rights on each machine working with.

Spoiler

Things I've Made: Always On Top Tool ◊ AU History ◊ Deck of Cards ◊ HideIt ◊ ICU ◊ Icon Freezer ◊ Ipod Ejector ◊ Junos Configuration Explorer ◊ Link Downloader ◊ MD5 Folder Enumerator ◊ PassGen ◊ Ping Tool ◊ Quick NIC ◊ Read OCR ◊ RemoteIT ◊ SchTasksGui ◊ SpyCam ◊ System Scan Report Tool ◊ System UpTime ◊ Transparency Machine ◊ VMWare ESX Builder
Misc Code Snippets: ADODB Example ◊ CheckHover ◊ Detect SafeMode ◊ DynEnumArray ◊ GetNetStatData ◊ HashArray ◊ IsBetweenDates ◊ Local Admins ◊ Make Choice ◊ Recursive File List ◊ Remove Sizebox Style ◊ Retrieve PNPDeviceID ◊ Retreive SysListView32 Contents ◊ Set IE Homepage ◊ Tickle Expired Password ◊ Transpose Array
Projects: Drive Space Usage GUI ◊ LEDkIT ◊ Plasma_kIt ◊ Scan Engine Builder ◊ SpeeDBurner ◊ SubnetCalc
Cool Stuff: AutoItObject UDF â—Š Extract Icon From Proc â—Š GuiCtrlFontRotate â—Š Hex Edit Funcs â—Š Run binary â—Š Service_UDF

 

Link to comment
Share on other sites

This is a client side exe. It's purpose is for network/domain admins to remotely administer machines. Your account must have admin rights on each machine working with.

And what do you use for server/viewer? And does it also work on extern networking?
Link to comment
Share on other sites

I can tell you that these mechanisims will probably not work over the net due to firewalls. Maybe it could be proxyd somehow.

Spoiler

Things I've Made: Always On Top Tool ◊ AU History ◊ Deck of Cards ◊ HideIt ◊ ICU ◊ Icon Freezer ◊ Ipod Ejector ◊ Junos Configuration Explorer ◊ Link Downloader ◊ MD5 Folder Enumerator ◊ PassGen ◊ Ping Tool ◊ Quick NIC ◊ Read OCR ◊ RemoteIT ◊ SchTasksGui ◊ SpyCam ◊ System Scan Report Tool ◊ System UpTime ◊ Transparency Machine ◊ VMWare ESX Builder
Misc Code Snippets: ADODB Example ◊ CheckHover ◊ Detect SafeMode ◊ DynEnumArray ◊ GetNetStatData ◊ HashArray ◊ IsBetweenDates ◊ Local Admins ◊ Make Choice ◊ Recursive File List ◊ Remove Sizebox Style ◊ Retrieve PNPDeviceID ◊ Retreive SysListView32 Contents ◊ Set IE Homepage ◊ Tickle Expired Password ◊ Transpose Array
Projects: Drive Space Usage GUI ◊ LEDkIT ◊ Plasma_kIt ◊ Scan Engine Builder ◊ SpeeDBurner ◊ SubnetCalc
Cool Stuff: AutoItObject UDF â—Š Extract Icon From Proc â—Š GuiCtrlFontRotate â—Š Hex Edit Funcs â—Š Run binary â—Š Service_UDF

 

Link to comment
Share on other sites

  • 2 weeks later...

Hi !

i've a problem with this script...

#423586

I am domain admin but i can't launch software on remote computer...

How can i do that ?

Otherwise, I can write in the registrery, the naviguation in the hdd work.

I am beginner in AutoIt, but if this project is always ongoing, I can can help you.

XcessiV

Edited by xcessiv
Link to comment
Share on other sites

  • 2 weeks later...

Hi !

i've a problem with this script...

#423586

I am domain admin but i can't launch software on remote computer...

WMI doesn't support running interactive processes. You have to use addtional software to remotely execute something that requires user intervention. It's also possible that if the remote machine is locked, some things will hang on this as well.

http://www.autoitscript.com/forum/index.ph...&pid=428991

Spoiler

Things I've Made: Always On Top Tool ◊ AU History ◊ Deck of Cards ◊ HideIt ◊ ICU ◊ Icon Freezer ◊ Ipod Ejector ◊ Junos Configuration Explorer ◊ Link Downloader ◊ MD5 Folder Enumerator ◊ PassGen ◊ Ping Tool ◊ Quick NIC ◊ Read OCR ◊ RemoteIT ◊ SchTasksGui ◊ SpyCam ◊ System Scan Report Tool ◊ System UpTime ◊ Transparency Machine ◊ VMWare ESX Builder
Misc Code Snippets: ADODB Example ◊ CheckHover ◊ Detect SafeMode ◊ DynEnumArray ◊ GetNetStatData ◊ HashArray ◊ IsBetweenDates ◊ Local Admins ◊ Make Choice ◊ Recursive File List ◊ Remove Sizebox Style ◊ Retrieve PNPDeviceID ◊ Retreive SysListView32 Contents ◊ Set IE Homepage ◊ Tickle Expired Password ◊ Transpose Array
Projects: Drive Space Usage GUI ◊ LEDkIT ◊ Plasma_kIt ◊ Scan Engine Builder ◊ SpeeDBurner ◊ SubnetCalc
Cool Stuff: AutoItObject UDF â—Š Extract Icon From Proc â—Š GuiCtrlFontRotate â—Š Hex Edit Funcs â—Š Run binary â—Š Service_UDF

 

Link to comment
Share on other sites

  • 2 weeks later...

I have last version of Autoit(3.2.10),and your code cannot be compiled or executed beacause in last version some UDFs are changed,for example GuiList (used in that program) now the funcions in GuiList are in other new UDF (GuiListBox.au3,GuiListView.au3,GuitreeView)

I tried to recompile that code changing functions with new UDFs but dont work...

I used the old Udf GuiList.au3 and dont work...

Are you sure that your code is right?Can you post a compiled version of your program?

Thanks

Noob but ethical

Link to comment
Share on other sites

  • 8 months later...

hi all. i copied the code and execute it but i got error. it points me on this code

If $msg = $btnAdd Then

$hosttoadd = InputBox("Hostname:", "Enter a hostname.", "", "", 200, 120)

If $hosttoadd Then

_GUICtrlListAddItem($hostlist, StringUpper($hosttoadd))

CheckExec()

EndIf

can someone post the working code.

thanks.

Link to comment
Share on other sites

  • 8 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...