Hallo zusammen,
ich habe für den Helpdesk ein Tool geschrieben, welches die Benutzer der jeweiligen Citrix Farm ausliest und den gesuchten dann auch findet.
(hat sicher noch viel Optimierungspotential)
Zuerst hatte das Programm problemlos funktioniert, jetzt hängt es sich öfter auf (reagiert einfach nicht mehr)
Vielleicht kann sich mal jemand meine Scripts durchschauen, zwecks Optimierung, Problemfindung, etc.
Spoiler anzeigen
#Region
#AutoIt3Wrapper_Icon=baloise.ico
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Description=Remote Assistance Helper C-IT
#AutoIt3Wrapper_Res_Fileversion=1.0.0.46
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=Support
#AutoIt3Wrapper_Res_SaveSource=y
#EndRegion
#include <SendMessage.au3>
#include <ProgressConstants.au3>
#Include <WinAPI.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <ArrayMore.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <string.au3>
#include <Array.au3>
#include <File.au3>
#include <bv_File.au3>
#include <GuiListView.au3>
Global $BVtmp = @TempDir & '\RA-Helper\'
DirCreate($BVtmp)
#Region ### START Variables
Global $AdminFarm = 'TSADM'
Global $VarConfigServer = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment','CONFIGSERVER') ; \\domain\profile\Config\farm (UNC path to the Server files)
Global $fConfig = $VarConfigServer & '\RA-Helper\farm-cfg.ini'
Global $fError = $BVtmp & '$error'
Global $fUser = $BVtmp & '$user'
Global $lAD_TS_Serverlist = $VarConfigServer & '\RA-Helper\ad-ts-srvlist.txt'
Global $aTS_Server
Global $item
Global $B_Key
Global $aUser[1]
Global $Checkbox
#EndRegion ### END Variables
Global $aSection = IniReadSection($fConfig, 'Farm'), $val
[/autoit] [autoit][/autoit] [autoit]Global $aFarm[$aSection[0][0]][10]
For $i = 1 To UBound($aSection) -1
$aFarm[$i-1][0] = $aSection[$i][0]
$val = StringSplit($aSection[$i][1], ';')
For $j = 1 To UBound($val) -1
$aFarm[$i-1][$j] = $val[$j]
Next
Next
Global $aCheckBoxArray[UBound($aFarm)]
[/autoit] [autoit][/autoit] [autoit];----------------------------------------------------------------------------------------------------------------------
; Tasks that should run before the GUI section
;----------------------------------------------------------------------------------------------------------------------
_ServerSort()
If StringInStr(@ComputerName, $AdminFarm) Or StringInStr(@ComputerName, '-vadm01') > 0 Then
#Region ### START Koda GUI section ### Form=E:\AutoIt3\koda\Forms\Remote-Assistance-Helper.kxf
$Form1 = GUICreate("Remote Assistance Helper C-IT", 640, 430, 200, 200)
$menu1 = GUICtrlCreateMenu('File')
$menu2 = GUICtrlCreateMenu('Edit Farm Names', $menu1)
$menu3 = GUICtrlCreateMenu('Edit Path', $menu1)
$help1 = GUICtrlCreateMenu('Help')
$help2 = GUICtrlCreateMenuItem('Help', $help1)
$help3 = GUICtrlCreateMenuItem('About', $help1)
For $f = 0 To UBound($aFarm)-1 ;Gui füllen
$aCheckBoxArray[$f]=GUICtrlCreateCheckbox($aFarm[$f][1], 20+100*Int($f/3), 100+Mod($f,3)*30)
Next
$Input1 = GUICtrlCreateInput("", 20, 40, 177, 21)
$Label1 = GUICtrlCreateLabel("Username", 20, 20, 80, 17)
$Label2 = GUICtrlCreateLabel("Select Farm(s)", 20, 80, 80, 17)
$Label3 = GUICtrlCreateLabel("Search process", 260, 190, 205, 25)
$Button1 = GUICtrlCreateButton("Search", 180, 210, 75, 25)
$Button2 = GUICtrlCreateButton("Exit", 20, 210, 75, 25)
$Button3 = GUICtrlCreateButton("Start Remote Assistance", 470, 210, 150, 25)
$Button4 = GUICtrlCreateButton("Clear List", 100, 210, 75, 25)
$listview = GUICtrlCreateListView("Server | User | Status | Logon Time | Session ID ", 20, 240, 600, 150);,$LVS_SORTDESCENDING)
$iProgressBar = GUICtrlCreateProgress(260, 210, 205, 25,$PBS_MARQUEE)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Button1 ; Search
_ClearListview()
If GUICtrlRead($Input1) = '' Or StringLen(GUICtrlRead($Input1)) < 7 Then
MsgBox (0, 'Username', 'Username : "' & GUICtrlRead($Input1) & '" is empty or to short (' & StringLen(GUICtrlRead($Input1)) & ' Charachters)' & @CRLF & @CRLF & 'Username must have 7 characters - no more - no less')
ElseIf StringLen(GUICtrlRead($Input1)) > 7 Then
MsgBox (0, 'Username', 'Username : "' & GUICtrlRead($Input1) & '" is to long (' & StringLen(GUICtrlRead($Input1)) & ' Charachters)' & @CRLF & @CRLF & 'Username must have 7 characters - no more - no less')
Else
If FileExists($fUser) Then FileMove($fUser, $fUser & '_' & @YEAR & '-' & @MON & '-' & @MDAY & '_' & @HOUR & '-' & @MIN & '-' & @SEC, 1)
For $au = UBound($aUser)-1 To 1 Step -1
_ArrayDelete($aUser, $au)
Next
$B_Key = GUICtrlRead($Input1)
Local $sum = 0
For $g = 0 To UBound($aFarm)-1
$sum = $sum + BitAND(GUICtrlRead($aCheckBoxArray[$g]), $GUI_CHECKED)
ConsoleWrite($sum & ' ' & $g & BitAND(GUICtrlRead($aCheckBoxArray[$g]), $GUI_CHECKED) & @CRLF)
Next
If $sum = 0 Then
$wSize = WinGetPos('Remote Assistance Helper C-IT')
ToolTip('Please select at least one farm', $wSize[0]+100, $wSize[1]+120)
Else
_ProgressMarquee_Start($iProgressBar)
For $g = 0 To UBound($aFarm)-1
ToolTip('')
If BitAND(GUICtrlRead($aCheckBoxArray[$g]), $GUI_CHECKED) Then
_UserSearchOverAllServers()
_CreateConnectedListview()
EndIf
Next
EndIf
_ProgressBarEnd($iProgressBar)
EndIf
Case $help2
MsgBox(0, 'Farm selection', 'Normaly ...')
Case $help3
MsgBox(0, 'About', 'Remote Assistance Helper v1.00')
Case $Button3 ; Start Remote Assistance
_StartRemoteAssistance()
Case $Button4 ; Clear List
_ClearListview()
Case $Button2 ; Exit
Exit
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Else
;_ArrayDisplay($aFarm, @ComputerName & ' - $aFarm - ' & UBound($aFarm))
#Region ### START Koda GUI section ### Form=E:\AutoIt3\koda\Forms\Remote-Assistance-Helper.kxf
$Form1 = GUICreate("Remote Assistance Helper C-IT", 640, 430, 200, 200)
$menu1 = GUICtrlCreateMenu('File')
$menu2 = GUICtrlCreateMenu('Edit Farm Names', $menu1)
$menu3 = GUICtrlCreateMenu('Edit Path', $menu1)
$help1 = GUICtrlCreateMenu('Help')
$help2 = GUICtrlCreateMenuItem('Help', $help1)
$help3 = GUICtrlCreateMenuItem('About', $help1)
For $f = 0 To UBound($aFarm)-1 ;Gui füllen
If StringInStr(@ComputerName, $aFarm[$f][2]) > 0 Then
$Label2a = GUICtrlCreateLabel($aFarm[$f][1], 120, 80, 80, 17)
$SingleFarm = $aFarm[$f][0]
EndIf
Next
;_ArrayDisplay($aCheckBoxArray)
$Input1 = GUICtrlCreateInput("", 20, 40, 177, 21)
$Label1 = GUICtrlCreateLabel("Username", 20, 20, 80, 17)
$Label2 = GUICtrlCreateLabel("Selected Farm", 20, 80, 80, 17)
$Label3 = GUICtrlCreateLabel("Search process", 260, 190, 205, 25)
$Button1 = GUICtrlCreateButton("Search", 180, 210, 75, 25)
$Button2 = GUICtrlCreateButton("Exit", 20, 210, 75, 25)
$Button3 = GUICtrlCreateButton("Start Remote Assistance", 470, 210, 150, 25)
$Button4 = GUICtrlCreateButton("Clear List", 100, 210, 75, 25)
$listview = GUICtrlCreateListView("Server | User | Status | Logon Time | Session ID ", 20, 240, 600, 150);,$LVS_SORTDESCENDING)
$iProgressBar = GUICtrlCreateProgress(260, 210, 205, 25,$PBS_MARQUEE)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Button1 ; Search
_ClearListview()
If GUICtrlRead($Input1) = '' Or StringLen(GUICtrlRead($Input1)) < 7 Then
MsgBox (0, 'Username', 'Username : "' & GUICtrlRead($Input1) & '" is empty or to short (' & StringLen(GUICtrlRead($Input1)) & ' Charachters)' & @CRLF & @CRLF & 'Username must have 7 characters - no more - no less')
ElseIf StringLen(GUICtrlRead($Input1)) > 7 Then
MsgBox (0, 'Username', 'Username : "' & GUICtrlRead($Input1) & '" is to long (' & StringLen(GUICtrlRead($Input1)) & ' Charachters)' & @CRLF & @CRLF & 'Username must have 7 characters - no more - no less')
Else
If FileExists($fUser) Then FileMove($fUser, $fUser & '_' & @YEAR & '-' & @MON & '-' & @MDAY & '_' & @HOUR & '-' & @MIN & '-' & @SEC, 1)
For $au = UBound($aUser)-1 To 1 Step -1
_ArrayDelete($aUser, $au)
Next
$B_Key = GUICtrlRead($Input1)
For $g = 0 To UBound($aFarm)-1 ; Select Farm on which the tool is running
ConsoleWrite($aFarm[$g][1] & ' -_- ' & $aFarm[$g][2] & @CRLF)
If StringInStr(@ComputerName, $aFarm[$g][2]) > 0 Then
_UserSearchOverSingleFarm()
_CreateConnectedListview()
Else
; do nothing
EndIf
Next
_ProgressBarEnd($iProgressBar)
EndIf
Case $help2
MsgBox(0, 'Farm selection', 'Normaly ...')
Case $help3
MsgBox(0, 'About', 'Remote Assistance Helper v1.00')
Case $Button3 ; Start Remote Assistance
_StartRemoteAssistance()
Case $Button4 ; Clear List
_ClearListview()
Case $Button2 ; Exit
Exit
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
EndIf
Func _ServerSort()
FileDelete($BVtmp & '$farm*')
_FileReadToArray($lAD_TS_Serverlist, $aTS_Server)
_ArraySort($aTS_Server, 0, 1)
For $x = 1 To $aTS_Server[0]
For $c = 0 to UBound($aFarm)-1
If StringInStr($aTS_Server[$x], $aFarm[$c][2]) > 0 Then
$atmp = StringSplit($aTS_Server[$x], ',')
If StringInStr($atmp[1], 'DC0') > 0 Then
_FileWriteLog($fError, ' This a DataCollector -> ' & StringTrimLeft($atmp[1], 4))
Else
_bv_FileWriteLog($BVtmp & $aFarm[$c][0], StringTrimLeft($atmp[1], 4))
EndIf
EndIf
Next
Next
EndFunc ; _ServerSort()
Func _CreateConnectedListview()
Local $aTmpUser
Local $tItem
_FileReadToArray($fUser, $aTmpUser)
_Array2DDblDel($aTmpUser)
_GUICtrlListView_DeleteAllItems($listview)
For $u = 1 To UBound($aTmpUser)-1
$tItem = $item & $u
$tItem = GUICtrlCreateListViewItem($aTmpUser[$u], $listview)
Next
_GUICtrlListView_SetColumnWidth($listview, 0, $LVSCW_AUTOSIZE)
GUISetState()
EndFunc ; _CreateConnectedListview()
Func _UserSearchOverSingleFarm()
Local $aTempServer
Local $aXXXX
$tNr = $aCheckBoxArray[$g]-9
_FileReadToArray($BVtmp & $SingleFarm, $aTempServer)
For $x = 1 To UBound($aTempServer)-1
Local $PID = Run(@ComSpec & ' /c ' & 'query user /server:' & $aTempServer[$x], '', @SW_HIDE, 0x2)
Local $Line = ''
While 1
$Line &= StdoutRead($PID)
If @error Then ExitLoop
Wend
_FileWriteLog($BVtmp & $SingleFarm & $x & '_chk.log', $aTempServer[$x] & @CRLF & $line)
Do
_ArrayDelete($aXXXX, 0)
Until UBound($aXXXX) = 0
_FileReadToArray($BVtmp & $SingleFarm & $x & '_chk.log', $aXXXX)
For $z = 1 To $aXXXX[0]
If StringInStr($aXXXX[$z], $B_Key) > 0 Then
$t01 = ''
$t01 = StringReplace(StringLeft($aXXXX[$z], StringInStr($aXXXX[$z], ' ', 0, 1)-1), ' ', '') ; Username
$t02 = StringReplace(StringLeft(StringTrimLeft($aXXXX[$z], 45), StringInStr(StringTrimLeft($aXXXX[$z], 45), ' ')), ' ', '') ; Status
$t03 = StringTrimLeft($aXXXX[$z], StringInStr($aXXXX[$z], '.', 0, -2)-3) ; Logon time
$t04 = StringReplace(StringTrimLeft(StringTrimRight($aXXXX[$z], StringLen($aXXXX[$z]) - 44), 38), ' ', '') ; Session ID
_bv_FileWriteLog($fUser, $aTempServer[$x] & '|' & $t01 & '|' & $t02 & '|' & $t03 & '|' & $t04)
EndIf
Next
Next
EndFunc ; _UserSearchOverSingleFarm()
Func _UserSearchOverAllServers()
Local $aTempServer
Local $aXXXX
$tNr = $aCheckBoxArray[$g]-9
_FileReadToArray($BVtmp & $aFarm[$tNr][0], $aTempServer)
For $x = 1 To UBound($aTempServer)-1
Local $PID = Run(@ComSpec & ' /c ' & 'query user /server:' & $aTempServer[$x], '', @SW_HIDE, 0x2)
Local $Line = ''
While 1
$Line &= StdoutRead($PID)
If @error Then ExitLoop
Wend
_FileWriteLog($BVtmp & $aFarm[$tNr][0] & $x & '_chk.log', $aTempServer[$x] & @CRLF & $line)
Do
_ArrayDelete($aXXXX, 0)
Until UBound($aXXXX) = 0
_FileReadToArray($BVtmp & $aFarm[$tNr][0] & $x & '_chk.log', $aXXXX)
For $z = 1 To $aXXXX[0]
If StringInStr($aXXXX[$z], $B_Key) > 0 Then
$t01 = ''
$t01 = StringReplace(StringLeft($aXXXX[$z], StringInStr($aXXXX[$z], ' ', 0, 1)-1), ' ', '') ; Username
$t02 = StringReplace(StringLeft(StringTrimLeft($aXXXX[$z], 45), StringInStr(StringTrimLeft($aXXXX[$z], 45), ' ')), ' ', '') ; Status
$t03 = StringTrimLeft($aXXXX[$z], StringInStr($aXXXX[$z], '.', 0, -2)-3) ; Logon time
$t04 = StringReplace(StringTrimLeft(StringTrimRight($aXXXX[$z], StringLen($aXXXX[$z]) - 44), 38), ' ', '') ; Session ID
_bv_FileWriteLog($fUser, $aTempServer[$x] & '|' & $t01 & '|' & $t02 & '|' & $t03 & '|' & $t04)
EndIf
Next
Next
EndFunc ; _UserSearchOverAllServers()
Func _StartRemoteAssistance()
Local $StartRA
Local $aStartRA
$StartRA = GUICtrlRead(GUICtrlRead($listview))
$aStartRA = StringSplit($StartRA, '|')
If FileExists('c:\Program Files (x86)\RA-Helper\msra.exe') Then
RunWait(@ComSpec & " /c " & '"c:\Program Files (x86)\RA-Helper\msra.exe" /offerRA ' & $aStartRA[1]) ; don't forget " " before "/c"
Else
MsgBox(16, '! ! ! E R R O R ! ! !', 'Remote Assistance is not installed on this machine: ' & @CRLF & @ComputerName & @CRLF & @CRLF & 'Please contact ...')
EndIf
EndFunc ; _StartRemoteAssistance()
Func _ClearListview()
Local $aTmpUser
_Array2DDblDel($aTmpUser)
_GUICtrlListView_DeleteAllItems($listview)
_ProgressMarquee_Stop($iProgressBar)
EndFunc ; _ClearListview()
; #FUNCTION# ====================================================================================================================
; Name ..........: _ProgressMarquee_Start
; Description ...: Start the marquee effect.
; Syntax ........: _ProgressMarquee_Start($iControlID)
; Parameters ....: $iControlID - ControlID of a progressbar using the $PBS_MARQUEE style.
; Return values .: Success - True
; Failure - False
; Author ........: guinness
; Example .......: Yes
; ===============================================================================================================================
Func _ProgressMarquee_Start($iControlID)
Return GUICtrlSendMsg($iControlID, $PBM_SETMARQUEE, True, 50) = True
EndFunc ;==>_ProgressMarquee_Start
; #FUNCTION# ====================================================================================================================
; Name ..........: _ProgressMarquee_Stop
; Description ...: Stop the marquee effect.
; Syntax ........: _ProgressMarquee_Stop($iControlID[, $iReset = 0])
; Parameters ....: $iControlID - ControlID of a progressbar using the $PBS_MARQUEE style.
; $fReset - [optional] Reset the progressbar, True - Reset or False - Don't reset. Default is False.
; Return values .: Success - True
; Failure - False
; Author ........: guinness
; Example .......: Yes
; ===============================================================================================================================
Func _ProgressMarquee_Stop($iControlID, $fReset = False)
Local $fReturn = GUICtrlSendMsg($iControlID, $PBM_SETMARQUEE, False, 50) = True
If $fReset Then
GUICtrlSetStyle($iControlID, $PBS_MARQUEE)
GUICtrlSetLimit($iControlID, 100, 0)
GUICtrlSetData($iControlID, 100)
EndIf
Return $fReturn
EndFunc ;==>_ProgressMarquee_Stop
Func _ProgressBarEnd($iControlID)
_SendMessage(GUICtrlGetHandle($iControlID),$PBM_SETMARQUEE, False, 0)
$iControlID = GUICtrlCreateProgress(260, 210, 205, 25)
GUICtrlSetLimit($iControlID, 100, 0)
GUICtrlSetData($iControlID, 100)
EndFunc ; _ProgressBarEnd()
bv_File.au3 (_FileWriteLog ohne Datum und Uhrzeit)
Spoiler anzeigen
#include-once
; #FUNCTION# ====================================================================================================================
; Name...........: _bv_FileWriteLog
; Description ...: Writes the specified text to a log file.
; Syntax.........: _bv_FileWriteLog($sLogPath, $sLogMsg[, $iFlag = -1])
; Parameters ....: $sLogPath - Path and filename of the file to be written to
; $sLogMsg - Message to be written to the log file
; $iFlag - [Optional] - Flag that defines if $sLogMsg will be written to the end of file, or to the begining.
; |If $iFlag = -1 (default) $sLogMsg will be written to the end of file.
; |If $iFlag <> -1 $sLogMsg will be written to begining of file.
; Return values .: Success - Returns a 1
; Failure - Returns a 0
; @Error - 0 = No error.
; |1 = Error opening specified file
; |2 = File could not be written to
; Author ........:
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func _bv_FileWriteLog($sLogPath, $sLogMsg, $iFlag = -1)
Local $hOpenFile = $sLogPath, $iOpenMode = $FO_APPEND
Local $sMsg = $sLogMsg
[/autoit] [autoit][/autoit] [autoit]If $iFlag <> -1 Then
$sMsg &= @CRLF & FileRead($sLogPath)
$iOpenMode = $FO_OVERWRITE
EndIf
; Open output file for appending to the end/overwriting, or use input file handle if passed
If IsString($sLogPath) Then
$hOpenFile = FileOpen($sLogPath, $iOpenMode)
If $hOpenFile = -1 Then
Return SetError(1, 0, 0)
EndIf
EndIf
Local $iReturn = FileWriteLine($hOpenFile, $sMsg)
[/autoit] [autoit][/autoit] [autoit]; Close file only if specified by a string path
If IsString($sLogPath) Then
$iReturn = FileClose($hOpenFile)
EndIf
If $iReturn <= 0 Then
Return SetError(2, $iReturn, 0)
EndIf
Return $iReturn
EndFunc ;==>_bv_FileWriteLog
farm-cfg.ini (damit wird die GUI konfiguriert - einfach erweitert)
Spoiler anzeigen
[Farm]
$farm1=IT;TSADM
$farm2=Dep1;CH-TSSO
$farm3=Dep2;W-BE-
$farm4=Shared;TSSH
ad-ts-srvlist.txt (Server Liste der Citrix Xenapp Server)
Spoiler anzeigen
"CN=server01,OU=production,OU=abteilung,OU=department-P,DC=domain,DC=com"
"CN=server02,OU=production,OU=abteilung,OU=department-P,DC=domain,DC=com"
"CN=server03,OU=production,OU=abteilung,OU=department-P,DC=domain,DC=com"
"CN=server04,OU=production,OU=abteilung,OU=department-P,DC=domain,DC=com"
"CN=server05,OU=production,OU=abteilung,OU=department-P,DC=domain,DC=com"
"CN=server06,OU=production,OU=abteilung,OU=department-P,DC=domain,DC=com"
"CN=server07,OU=production,OU=abteilung,OU=department-P,DC=domain,DC=com"
"CN=server08,OU=production,OU=abteilung,OU=department-P,DC=domain,DC=com"
"CN=server09,OU=production,OU=abteilung,OU=department-P,DC=domain,DC=com"
"CN=server10,OU=production,OU=abteilung,OU=department-P,DC=domain,DC=com"
ich hoffe ich habe nichts wichtiges vergessen