Tool für Helpdesk zum starten von Remote Assistance

  • 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
    [autoit]


    #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

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

    #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>

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

    Global $BVtmp = @TempDir & '\RA-Helper\'
    DirCreate($BVtmp)

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

    #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

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

    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

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

    Global $aCheckBoxArray[UBound($aFarm)]

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Tasks that should run before the GUI section
    ;----------------------------------------------------------------------------------------------------------------------
    _ServerSort()

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

    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

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    Func _ClearListview()
    Local $aTmpUser
    _Array2DDblDel($aTmpUser)
    _GUICtrlListView_DeleteAllItems($listview)
    _ProgressMarquee_Stop($iProgressBar)
    EndFunc ; _ClearListview()

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

    ; #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

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

    ; #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

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

    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()

    [/autoit]

    bv_File.au3 (_FileWriteLog ohne Datum und Uhrzeit)

    Spoiler anzeigen
    [autoit]


    #include-once

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

    ; #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 &lt;&gt; -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

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

    Local $sMsg = $sLogMsg

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

    If $iFlag <> -1 Then
    $sMsg &= @CRLF & FileRead($sLogPath)
    $iOpenMode = $FO_OVERWRITE
    EndIf

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

    ; 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

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

    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

    [/autoit]

    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 ?(