itallrounder
Goto Top

FTP Passwörter automatisch per Mail am Monatsanfang versenden

Hallo,

ich bin auf der Suche nach einem Skript oder ähnlichem, welches FTP Zugangsdaten per Mail versendet.

Ich habe eine Excel Tabelle mit E-Mailadressen drinne, an die gehen jeden Monat unterschiedliche E-Mails mit Zugangsdaten für meinen FTP-Server

FTP Software: Filezilla Server
Server OS: Windows Server 2012 R2

Bisher ändere ich die Kennwörter immer am Monatsende manuell und sende diese dann auch per Hand an ca 30 Leute.
Eine sehr aufwendige Arbeit, welche ich gerne automatisieren würde.

Gruß

Content-Key: 221587

Url: https://administrator.de/contentid/221587

Ausgedruckt am: 19.03.2024 um 08:03 Uhr

Mitglied: wiesi200
wiesi200 10.11.2013 um 09:15:42 Uhr
Goto Top
Hallo,

da der Filezilla Server soweit ich weiß keine Möglichkeit hat ihn über Command Line zu steuern wird's schwer bis unmöglich.
Wenn du den internen FTP Server vom Microsoft verwenden würdest. Könnte man sicher über z.B. PowerShell ein Script schreiben.
Mitglied: IceAge
IceAge 10.11.2013 um 11:16:44 Uhr
Goto Top
mhmm, mit ein bissl Skriptarbeit sollte das doch wenigstens das Zusenden per Batch mit Blat automatisiert werden können...
Mitglied: Rudbert
Rudbert 10.11.2013 um 12:10:53 Uhr
Goto Top
Mitglied: colinardo
colinardo 10.11.2013, aktualisiert am 08.05.2014 um 09:46:09 Uhr
Goto Top
Hallo Marius,
dazu hatte ich mal ein VB-Script geschrieben welches genau dies automatisiert. Es öffnet ein Excel-File generiert für die User die darin stehen ein neues Passwort(hier ein Passwort mit 15 Zeichen), dann sucht es in der FileZilla-Config nach dem entsprechenden User, setzt das Passwort als MD5 Hash, speichert die Config, führt einen Config-Reload durch und versendet im Anschluss Mails an alle User (Im Script ist im das Moment mit Outlook gelöst, dies lässt sich aber einfach via "Blat" anpassen s. ganz unten im Beitrag). Das Script geht außerdem davon aus das der Username die E-Mail-Adresse ist.
Wichtig: Bitte die Hinweise zum Excel-File und zum Aufruf des Scripts weiter unten beachten !
GenerateNewPasswords

Sub GenerateNewPasswords()
    Const CONFIGFILE = "C:\Program Files (x86)\FileZilla Server\FileZilla Server.xml"  
    Const EXCELFILE = "C:\DeinExcelFile.xlsx"  
    
    Set objShell = CreateObject("WScript.Shell")  
    Set fso = CreateObject("Scripting.Filesystemobject")  
    Set objExcel = CreateObject("Excel.Application")  
    Set objDoc = objExcel.Workbooks.Open(EXCELFILE)
    Set hash = New hashing
    objExcel.Visible = False
    objExcel.DisplayAlerts = False
    
    'Remove ReadOnly Attribute of Config File  
    Set objConfigFile = fso.GetFile(CONFIGFILE)
    objConfigFile.Attributes = 0
    Set objConfigFile = Nothing
    '---------------------  
    
    Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")  
    xmlDoc.Load CONFIGFILE
    Set userNodes = xmlDoc.selectNodes("/FileZillaServer/Users/User")  
    
    Set sheet = objDoc.Worksheets(1)
    Set rngEmails = sheet.Range("A2", sheet.Range("A2").End(-4121))  
    For Each cell In rngEmails
        strNewPass = newPass(15)
        cell.Offset(0, 1).value2 = strNewPass
        For Each userNode In userNodes
            strUserName = userNode.attributes.getNamedItem("Name").Text  
            If cell.Value = strUserName Then
                'setze das neue Passwort im Configfile (MD5-Codiert)  
                userNode.selectSingleNode("Option[@Name='Pass']").Text = hash.MD5(strNewPass)  
                'erstelle eine E-Mail mit dem neuen Passwort  
                sendNewMailViaOutlook strUserName, strNewPass
                'sendNewMailViaBlat strUserName, strNewPass  
            End If
        Next
    Next
    objDoc.Save
    xmlDoc.Save CONFIGFILE
    objExcel.DisplayAlerts = True
    objExcel.Quit
    objShell.Run """C:\Program Files (x86)\FileZilla Server\FileZilla Server.exe"" /reload-config"  
    Set xmlDoc = Nothing
    Set objExcel = Nothing
    Set objDoc = Nothing
    Set objShell = Nothing
    Set fso = Nothing
End Sub

Function newPass(intLength)
    chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"  
    pass = ""  
    For z = 1 To intLength
        Randomize
        randomPos = Int((Len(chars) * Rnd) + 1)
        pass = pass & Mid(chars, randomPos, 1)
    Next
    newPass = pass
End Function

Function sendNewMailViaOutlook(strEmailAddress, strNewPassword)
    Set objOutlook = CreateObject("Outlook.Application")  
    Set objMail = objOutlook.CreateItem(0)
    With objMail
        .To = strEmailAddress
        .Subject = "Ihr neues Passwort für den FTP-Server"  
        .Body = "Ihr neues Passwort für den FTP-Server lautet: " & strNewPassword  
        .Display
        .Send
    End With
    Set objOutlook = Nothing
End Function

Function sendNewMailViaBlat(strEmailAddress, strNewPassword)
    Set objShell = CreateObject("WScript.Shell")  
    path_blat = "[PFAD ZUR BLAT.EXE]"  
    mail_from = "[DEINE MAIL-ADRESSE]"  
    mail_to = strEmailAddress
    smtp_server = "[SMTPSERVER]"  
    smtp_user = "[USERNAME]"  
    smtp_pass = "[PASSWORT]"  
    subject = "Ihre neuen FTP-Server Zugangsdaten"  
    body = "Ihr neues FTP-Server Passwort lautet: " & strNewPassword  
    objShell.Run """" & path_blat & """" & " -subject """ & subject & """ -body """ & body & """ -to " & mail_to & " -f " & mail_from & " -server " & smtp_server & " -u """ & smtp_user & """ -pw """ & smtp_pass & """"  
    set objShell = Nothing
End Function

'---------------------------------  
' 	MD5 Function  
'----------------------------------------------------------------  
' Original-Source: http://chayoung.tistory.com/entry/VBScript-MD5  
' converted to a class by @colinardo (Administrator.de)  
'----------------------------------------------------------------  

Class hashing
	Private BITS_TO_A_BYTE
	Private BYTES_TO_A_WORD
	Private BITS_TO_A_WORD
	Private m_lOnBits(30)
	Private m_l2Power(30)
	
	Private Sub Class_Initialize
		BITS_TO_A_BYTE = 8
		BYTES_TO_A_WORD = 4
		BITS_TO_A_WORD = 32
     	m_lOnBits(0) = CLng(1)
		m_lOnBits(1) = CLng(3)
		m_lOnBits(2) = CLng(7)
		m_lOnBits(3) = CLng(15)
		m_lOnBits(4) = CLng(31)
		m_lOnBits(5) = CLng(63)
		m_lOnBits(6) = CLng(127)
		m_lOnBits(7) = CLng(255)
		m_lOnBits(8) = CLng(511)
		m_lOnBits(9) = CLng(1023)
		m_lOnBits(10) = CLng(2047)
		m_lOnBits(11) = CLng(4095)
		m_lOnBits(12) = CLng(8191)
		m_lOnBits(13) = CLng(16383)
		m_lOnBits(14) = CLng(32767)
		m_lOnBits(15) = CLng(65535)
		m_lOnBits(16) = CLng(131071)
		m_lOnBits(17) = CLng(262143)
		m_lOnBits(18) = CLng(524287)
		m_lOnBits(19) = CLng(1048575)
		m_lOnBits(20) = CLng(2097151)
		m_lOnBits(21) = CLng(4194303)
		m_lOnBits(22) = CLng(8388607)
		m_lOnBits(23) = CLng(16777215)
		m_lOnBits(24) = CLng(33554431)
		m_lOnBits(25) = CLng(67108863)
		m_lOnBits(26) = CLng(134217727)
		m_lOnBits(27) = CLng(268435455)
		m_lOnBits(28) = CLng(536870911)
		m_lOnBits(29) = CLng(1073741823)
		m_lOnBits(30) = CLng(2147483647)
		
		m_l2Power(0) = CLng(1)
		m_l2Power(1) = CLng(2)
		m_l2Power(2) = CLng(4)
		m_l2Power(3) = CLng(8)
		m_l2Power(4) = CLng(16)
		m_l2Power(5) = CLng(32)
		m_l2Power(6) = CLng(64)
		m_l2Power(7) = CLng(128)
		m_l2Power(8) = CLng(256)
		m_l2Power(9) = CLng(512)
		m_l2Power(10) = CLng(1024)
		m_l2Power(11) = CLng(2048)
		m_l2Power(12) = CLng(4096)
		m_l2Power(13) = CLng(8192)
		m_l2Power(14) = CLng(16384)
		m_l2Power(15) = CLng(32768)
		m_l2Power(16) = CLng(65536)
		m_l2Power(17) = CLng(131072)
		m_l2Power(18) = CLng(262144)
		m_l2Power(19) = CLng(524288)
		m_l2Power(20) = CLng(1048576)
		m_l2Power(21) = CLng(2097152)
		m_l2Power(22) = CLng(4194304)
		m_l2Power(23) = CLng(8388608)
		m_l2Power(24) = CLng(16777216)
		m_l2Power(25) = CLng(33554432)
		m_l2Power(26) = CLng(67108864)
		m_l2Power(27) = CLng(134217728)
		m_l2Power(28) = CLng(268435456)
		m_l2Power(29) = CLng(536870912)
		m_l2Power(30) = CLng(1073741824)
   	End Sub
	
	Private Function LShift(lValue, iShiftBits)
	    If iShiftBits = 0 Then
	        LShift = lValue
	        Exit Function
	    ElseIf iShiftBits = 31 Then
	        If lValue And 1 Then
	            LShift = &H80000000
	        Else
	            LShift = 0
	        End If
	        Exit Function
	    ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
	        Err.Raise 6
	    End If
	
	    If (lValue And m_l2Power(31 - iShiftBits)) Then
	        LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000
	    Else
	        LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))
	    End If
	End Function
	
	Private Function RShift(lValue, iShiftBits)
	    If iShiftBits = 0 Then
	        RShift = lValue
	        Exit Function
	    ElseIf iShiftBits = 31 Then
	        If lValue And &H80000000 Then
	            RShift = 1
	        Else
	            RShift = 0
	        End If
	        Exit Function
	    ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
	        Err.Raise 6
	    End If
	   
	    RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits)
	
	    If (lValue And &H80000000) Then
	        RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))
	    End If
	End Function
	
	Private Function RotateLeft(lValue, iShiftBits)
	    RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits))
	End Function
	
	Private Function AddUnsigned(lX, lY)
	    Dim lX4
	    Dim lY4
	    Dim lX8
	    Dim lY8
	    Dim lResult
	 
	    lX8 = lX And &H80000000
	    lY8 = lY And &H80000000
	    lX4 = lX And &H40000000
	    lY4 = lY And &H40000000
	 
	    lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)
	 
	    If lX4 And lY4 Then
	        lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
	    ElseIf lX4 Or lY4 Then
	        If lResult And &H40000000 Then
	            lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
	        Else
	            lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
	        End If
	    Else
	        lResult = lResult Xor lX8 Xor lY8
	    End If
	 
	    AddUnsigned = lResult
	End Function
	
	Private Function F(x, y, z)
	    F = (x And y) Or ((Not x) And z)
	End Function
	
	Private Function G(x, y, z)
	    G = (x And z) Or (y And (Not z))
	End Function
	
	Private Function H(x, y, z)
	    H = (x Xor y Xor z)
	End Function
	
	Private Function I(x, y, z)
	    I = (y Xor (x Or (Not z)))
	End Function
	
	Private Sub FF(a, b, c, d, x, s, ac)
	    a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac))
	    a = RotateLeft(a, s)
	    a = AddUnsigned(a, b)
	End Sub
	
	Private Sub GG(a, b, c, d, x, s, ac)
	    a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac))
	    a = RotateLeft(a, s)
	    a = AddUnsigned(a, b)
	End Sub
	
	Private Sub HH(a, b, c, d, x, s, ac)
	    a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac))
	    a = RotateLeft(a, s)
	    a = AddUnsigned(a, b)
	End Sub
	
	Private Sub II(a, b, c, d, x, s, ac)
	    a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac))
	    a = RotateLeft(a, s)
	    a = AddUnsigned(a, b)
	End Sub
	
	Private Function ConvertToWordArray(sMessage)
	    Dim lMessageLength
	    Dim lNumberOfWords
	    Dim lWordArray()
	    Dim lBytePosition
	    Dim lByteCount
	    Dim lWordCount
	   
	    Const MODULUS_BITS = 512
	    Const CONGRUENT_BITS = 448
	   
	    lMessageLength = Len(sMessage)
	   
	    lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)
	    ReDim lWordArray(lNumberOfWords - 1)
	   
	    lBytePosition = 0
	    lByteCount = 0
	    Do Until lByteCount >= lMessageLength
	        lWordCount = lByteCount \ BYTES_TO_A_WORD
	        lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
	        lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)
	        lByteCount = lByteCount + 1
	    Loop
	
	    lWordCount = lByteCount \ BYTES_TO_A_WORD
	    lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
	
	    lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)
	
	    lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)
	    lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)
	   
	    ConvertToWordArray = lWordArray
	End Function
	
	Private Function WordToHex(lValue)
	    Dim lByte
	    Dim lCount
	   
	    For lCount = 0 To 3
	        lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1)
	        WordToHex = WordToHex & Right("0" & Hex(lByte), 2)  
	    Next
	End Function
	
	Public Function MD5(sMessage)
	    Dim x
	    Dim k
	    Dim AA
	    Dim BB
	    Dim CC
	    Dim DD
	    Dim a
	    Dim b
	    Dim c
	    Dim d
	   
	    Const S11 = 7
	    Const S12 = 12
	    Const S13 = 17
	    Const S14 = 22
	    Const S21 = 5
	    Const S22 = 9
	    Const S23 = 14
	    Const S24 = 20
	    Const S31 = 4
	    Const S32 = 11
	    Const S33 = 16
	    Const S34 = 23
	    Const S41 = 6
	    Const S42 = 10
	    Const S43 = 15
	    Const S44 = 21
	
	    x = ConvertToWordArray(sMessage)
	   
	    a = &H67452301
	    b = &HEFCDAB89
	    c = &H98BADCFE
	    d = &H10325476
	
	    For k = 0 To UBound(x) Step 16
	        AA = a
	        BB = b
	        CC = c
	        DD = d
	   
	        FF a, b, c, d, x(k + 0), S11, &HD76AA478
	        FF d, a, b, c, x(k + 1), S12, &HE8C7B756
	        FF c, d, a, b, x(k + 2), S13, &H242070DB
	        FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE
	        FF a, b, c, d, x(k + 4), S11, &HF57C0FAF
	        FF d, a, b, c, x(k + 5), S12, &H4787C62A
	        FF c, d, a, b, x(k + 6), S13, &HA8304613
	        FF b, c, d, a, x(k + 7), S14, &HFD469501
	        FF a, b, c, d, x(k + 8), S11, &H698098D8
	        FF d, a, b, c, x(k + 9), S12, &H8B44F7AF
	        FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1
	        FF b, c, d, a, x(k + 11), S14, &H895CD7BE
	        FF a, b, c, d, x(k + 12), S11, &H6B901122
	        FF d, a, b, c, x(k + 13), S12, &HFD987193
	        FF c, d, a, b, x(k + 14), S13, &HA679438E
	        FF b, c, d, a, x(k + 15), S14, &H49B40821
	   
	        GG a, b, c, d, x(k + 1), S21, &HF61E2562
	        GG d, a, b, c, x(k + 6), S22, &HC040B340
	        GG c, d, a, b, x(k + 11), S23, &H265E5A51
	        GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA
	        GG a, b, c, d, x(k + 5), S21, &HD62F105D
	        GG d, a, b, c, x(k + 10), S22, &H2441453
	        GG c, d, a, b, x(k + 15), S23, &HD8A1E681
	        GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8
	        GG a, b, c, d, x(k + 9), S21, &H21E1CDE6
	        GG d, a, b, c, x(k + 14), S22, &HC33707D6
	        GG c, d, a, b, x(k + 3), S23, &HF4D50D87
	        GG b, c, d, a, x(k + 8), S24, &H455A14ED
	        GG a, b, c, d, x(k + 13), S21, &HA9E3E905
	        GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8
	        GG c, d, a, b, x(k + 7), S23, &H676F02D9
	        GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A
	           
	        HH a, b, c, d, x(k + 5), S31, &HFFFA3942
	        HH d, a, b, c, x(k + 8), S32, &H8771F681
	        HH c, d, a, b, x(k + 11), S33, &H6D9D6122
	        HH b, c, d, a, x(k + 14), S34, &HFDE5380C
	        HH a, b, c, d, x(k + 1), S31, &HA4BEEA44
	        HH d, a, b, c, x(k + 4), S32, &H4BDECFA9
	        HH c, d, a, b, x(k + 7), S33, &HF6BB4B60
	        HH b, c, d, a, x(k + 10), S34, &HBEBFBC70
	        HH a, b, c, d, x(k + 13), S31, &H289B7EC6
	        HH d, a, b, c, x(k + 0), S32, &HEAA127FA
	        HH c, d, a, b, x(k + 3), S33, &HD4EF3085
	        HH b, c, d, a, x(k + 6), S34, &H4881D05
	        HH a, b, c, d, x(k + 9), S31, &HD9D4D039
	        HH d, a, b, c, x(k + 12), S32, &HE6DB99E5
	        HH c, d, a, b, x(k + 15), S33, &H1FA27CF8
	        HH b, c, d, a, x(k + 2), S34, &HC4AC5665
	   
	        II a, b, c, d, x(k + 0), S41, &HF4292244
	        II d, a, b, c, x(k + 7), S42, &H432AFF97
	        II c, d, a, b, x(k + 14), S43, &HAB9423A7
	        II b, c, d, a, x(k + 5), S44, &HFC93A039
	        II a, b, c, d, x(k + 12), S41, &H655B59C3
	        II d, a, b, c, x(k + 3), S42, &H8F0CCC92
	        II c, d, a, b, x(k + 10), S43, &HFFEFF47D
	        II b, c, d, a, x(k + 1), S44, &H85845DD1
	        II a, b, c, d, x(k + 8), S41, &H6FA87E4F
	        II d, a, b, c, x(k + 15), S42, &HFE2CE6E0
	        II c, d, a, b, x(k + 6), S43, &HA3014314
	        II b, c, d, a, x(k + 13), S44, &H4E0811A1
	        II a, b, c, d, x(k + 4), S41, &HF7537E82
	        II d, a, b, c, x(k + 11), S42, &HBD3AF235
	        II c, d, a, b, x(k + 2), S43, &H2AD7D2BB
	        II b, c, d, a, x(k + 9), S44, &HEB86D391
	   
	        a = AddUnsigned(a, AA)
	        b = AddUnsigned(b, BB)
	        c = AddUnsigned(c, CC)
	        d = AddUnsigned(d, DD)
	    Next
	   
	    MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
	End Function
End Class
Das Excel File sollte so aufgebaut sein damit es mit dem obigen Script funktioniert:

91ac21d23ea0e3466cb287284291b870

Das Script muss als Administrator folgendermaßen ausgeführt werden:
(Ein Admin-Konto deswegen, da das Script die Berechtigungen haben muss um das Config-File zu speichern)
wscript.exe //NOLOGO script.vbs

Um "Blat" zum verschicken von Mails zu verwenden musst du in Zeile 37 das Kommentar entfernen, und Zeile 36 löschen oder auskommentieren.
Zusätzlich musst du die Variablen in der Funktion sendNewMailViaBlat (Zeile 77-89) welche in eckigen Klammern stehen an deine Umgebung anpassen.

p.s. das das Verschicken von Passwörtern via Mail keine gute Idee ist weist du hoffentlich selber ....

Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Mitglied: ITAllrounder
ITAllrounder 10.11.2013 um 15:26:34 Uhr
Goto Top
Mahlzeit,

besten Dank für eure Antworten!
@colinardo TOP!!! Das habe ich gesucht vielen Dank.

Ja Kennwörter über E-Mails zu versenden ist eigentlich doof, aber es bleibt alles auf einem Mailserver.

Es geht darum, ich habe die Domain xzy-gaming.net, dort habe ich Mitglieder die VIP's sind und jeder hat 20GB FTP Speicher
Da man ja die Kennwörter öfters aktualisieren sollte....mach ich das so.
Die Mitglieder haben je eine Adresse mit mail.xzy-gaming.net.
Beide "Domains" liegen auf dem selben Mailserver.

Schönen Sonntag noch!
Mitglied: ITAllrounder
ITAllrounder 10.11.2013 um 20:12:21 Uhr
Goto Top
Jut habe alles angepasst und nun mal nen Test gestartet, leider erhalte ich eine Windows Script Host Fehlermeldung.

Skript: P:\Serverseitig\Daten\Skripts\vbs\ftp_passwörter.vbs
Zeile: 9
Zeichen: 5
Fehler: ActiveX-Komponenten kann kein Objekt erstellen: 'Excel.Application'
Code: 800A01AD
Quelle: Laufzeitfehler in Microsoft VBScript

Office ist auf dem Serversystem nicht installiert!
Mitglied: colinardo
colinardo 11.11.2013 aktualisiert um 17:14:11 Uhr
Goto Top
Zitat von @ITAllrounder:
Office ist auf dem Serversystem nicht installiert!
hatte auch nicht gesagt das es komplett ohne Voraussetzungen läuft. Das Script lief vorher auf einer Windows 7 Kiste mit installiertem Office. Um Excel lesen und beschreiben zu können ist ein installiertes Excel nun mal Voraussetzung.
Du hast nun aber zwei Möglichkeiten, wenn du kein Excel auf dem Server installieren willst (ist auch verständlich):
  • Du lagerst das Script auf deine Workstation aus und baust im Script den Remote-Befehl zum aktualisieren der FileZilla Config mit psexec ein und gibst das Verzeichnis in dem die Config steht für die WS frei.
  • Die bessere Lösung, da das Script dann autark auf dem Server laufen kann: Du nutzt anstatt Excel als Datenquelle für die E-Mail-Adressen und Passwörter eine einfache Textdatei, in dem diese dann in folgendem Format stehen [USERNAME]=[PASSWORD]
Beispiel:
user@domain.com=hhsdkhfoiewuri34
user2@domain.com=773hjj234jhds8f9z
Wenn du es so wie in Variante 2 machen möchtest tauschst du oben im Script die Funktion GenerateNewPasswords durch diese äquivalente Variante aus, und passt den Pfad zur Textdatei in Zeile 3 an :
Sub GenerateNewPasswords()
    Const CONFIGFILE = "C:\Program Files (x86)\FileZilla Server\FileZilla Server.xml"  
    Const TEXTFILE = "C:\Scripts\users.txt"  
    
    Set objShell = CreateObject("WScript.Shell")  
    Set fso = CreateObject("Scripting.Filesystemobject")  
    Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")  
    Set hash = New hashing
    
    'Remove ReadOnly Attribute of Config File  
    Set objConfigFile = fso.GetFile(CONFIGFILE)
    objConfigFile.Attributes = 0
    Set objConfigFile = Nothing
    '---------------------  
    
    xmlDoc.Load CONFIGFILE
    Set userNodes = xmlDoc.selectNodes("/FileZillaServer/Users/User")  
	
	'Textdatei einlesen und in Array splittem   
    Set txtRead = fso.OpenTextFile(TEXTFILE,1)
    arrTextFile = Split(txtRead.ReadAll(),vbCrLf)
    txtRead.Close
    
 	txtNewContent = ""  
    For k = 0 To UBound(arrTextFile)
    	If arrTextFile(k) <> "" Then  
    		arrParts = Split(arrTextFile(k),"=")  
    		strEmail = Trim(arrParts(0))
	        strNewPass = newPass(15)
	        
	        For Each userNode In userNodes
	            strUserName = userNode.attributes.getNamedItem("Name").Text  
	            If strEmail = strUserName Then
	                'setze das neue Passwort im Configfile (MD5-Kodiert)  
	                userNode.selectSingleNode("Option[@Name='Pass']").Text = hash.MD5(strNewPass)  
	                'erstelle eine E-Mail mit dem neuen Passwort  
	                sendNewMailViaBlat strUserName, strNewPass
	                txtNewContent = txtNewContent & strEmail & "=" & strNewPass & vbCrLf  
	            End If
	        Next
	     End If
    Next
    'Speichere Datei mit den neuen Passwörtern  
    Set txtWrite = fso.OpenTextFile(TEXTFILE,2)
    txtWrite.Write(txtNewContent)
    txtWrite.Close
    'Speichere FileZilla Config  
    xmlDoc.Save CONFIGFILE
    objShell.Run """C:\Program Files (x86)\FileZilla Server\FileZilla Server.exe"" /reload-config"  
    Set objShell = Nothing
    Set fso = Nothing
End Sub
Grüße Uwe
Mitglied: rziemke
rziemke 11.11.2013 um 12:05:30 Uhr
Goto Top
Hi, mal auch eine doofe Frage. Bekommt damit jeder die selbe Excel Tabelle mit allen Passwörtern?
Gruß
Mitglied: colinardo
colinardo 11.11.2013 aktualisiert um 12:09:23 Uhr
Goto Top
Zitat von @rziemke:
Hi, mal auch eine doofe Frage. Bekommt damit jeder die selbe Excel Tabelle mit allen Passwörtern?
Die Frage ist wirklich doof ....
Quatsch, natürlich nicht, jeder bekommt nur sein eigenes Passwort zugesendet !

Grüße Uwe
Mitglied: ITAllrounder
ITAllrounder 11.11.2013 um 17:13:11 Uhr
Goto Top
Ok besten dank.
Ja ich werde dann wohl mal Excel 2013 aufm Server installieren.
Schönen Abend noch!