Umbenennen von Dateien in %AppData%\Microsoft\Signature

  • VBScript

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von alphabw1981.

    Umbenennen von Dateien in %AppData%\Microsoft\Signature

    Hallo,

    ich bin derzeit damit beschäftigt, allen Mitarbeitern einheitliche Signaturen zu erstellen. Wir verwenden MS Outlook 2010 und die Erstellung der Signaturen funktioniert auch. Wir nutzen hierzu das Tool OutlookSignature Vers. 1.9, welches die Signatur mit AD-Attributen befüllt. Das Tool erstellt jedem Mitarbeiter die jeweils 3 notwendigen Dateien (.htm, .rtf. & .txt) im Signaturenordner.

    Mein Problem ist nun, dass die Signaturen mehrere Variablen haben, die unter Umständen nicht befüllt werden, die dafür vorgesehen AD-Attribute leer sind / sein sollen (z.B. Fax, etc.).

    Diesbezüglich hab ich ein VBS-Script geschrieben, dass alle Zeilen in der Signaturdatei löscht, die noch die Variablen enthalten. Dies funktioniert auch.
    Hierzu wird die jeweilige Signatur-Datei eingelesen, jede Zeile, die keine Variable sondern den Wert enthält, in eine entsprechende Datei mit dem Präfix "temp_" geschrieben. Abschließend wird die Datei mit dem Präfix "temp_" kopiert und mit dem Originalnamen versehen sowie die Datei mit dem Präfix gelöscht.

    Visual Basic-Quellcode

    1. OPTION EXPLICIT
    2. Dim Username
    3. Dim objUsername
    4. Dim objFS
    5. Dim objFS1
    6. Dim objTextFile
    7. Dim objTextFile2
    8. Dim strFile
    9. Dim strLine
    10. Set objFS = CreateObject("Scripting.FileSystemObject")
    11. Set objUsername = WScript.CreateObject("WScript.Shell")
    12. Username = objUsername.ExpandEnvironmentStrings("%Username%")
    13. Set objTextFile = objFS.OpenTextFile("c:\users\" & UserName & "\APPDATA\Roaming\Microsoft\Signatures\bbw_extern.htm")
    14. Set objFS1 = objFS.CreateTextFile("c:\users\" & UserName & "\APPDATA\Roaming\Microsoft\Signatures\temp_bbw_extern.htm",true)
    15. objFS1.close
    16. set objTextFile2 = objFS.OpenTextFile("c:\users\" & UserName & "\APPDATA\Roaming\Microsoft\Signatures\temp_bbw_extern.htm",8)
    17. strFile = ("c:\users\" & UserName & "\APPDATA\Roaming\Microsoft\Signatures\bbw_extern.htm")
    18. Do Until objTextFile.AtEndOfStream
    19. strLine = objTextFile.ReadLine
    20. If Not(InStr(strLine,"@USERDEF3@")= 0 xor InStr(strLine,"@STREET@")= 0 xor InStr(strLine,"@POSTCODE@")= 0 xor InStr(strLine,"@CITY@")= 0 xor InStr(strLine,"@PHONE@")= 0 xor InStr(strLine,"@FAX@")=0) Then
    21. objTextFile2.writeline strLine
    22. End If
    23. Loop
    24. set objTextFile = nothing
    25. set objTextFile2 = nothing
    26. objFS.copyFile "c:\users\" & UserName & "\APPDATA\Roaming\Microsoft\Signatures\temp_bbw_extern.htm", "c:\users\" & UserName & "\APPDATA\Roaming\Microsoft\Signatures\bbw_extern.htm", true
    27. objfs.DeleteFile "c:\users\" & UserName & "\APPDATA\Roaming\Microsoft\Signatures\temp_bbw_extern.htm"
    28. set objfs = nothing
    29. set objfs1 = nothing


    Der nächste Schritt wäre nun, dieses Script auf alle Dateien anzuwenden, die im Ordner %AppData%\Raoming\Micrsoft\Signatures liegen, um so auch zukünfige bzw. alle Signaturen abzudecken und nicht für jede neue Signatur ein eigenes Script zu schreiben.
    Und genau hier komme ich aufgrund meiner beschränkten VBS-Kenntnisse nicht weiter.

    Visual Basic-Quellcode

    1. set fso = CreateObject("Scripting.FileSystemObject")
    2. Set objFS = CreateObject("Scripting.FileSystemObject")
    3. Set objAppdata = WScript.CreateObject("WScript.Shell")
    4. AppData = objAppData.ExpandEnvironmentStrings("%AppData%")
    5. Signature_Path = Appdata & "\Microsoft\Signatures"
    6. TempName = "temp_" & FileName
    7. Set objFS2 = fso.GetFolder(Signature_Path)
    8. set objFolder = objFS2.Files
    9. For Each objFile In objFolder
    10. Set objTextFile = objFS.OpenTextfile(Filename)
    11. Set objFS1 = objFS.CreateTextFile(Signature_Path & "\" & TempName,true)
    12. objFS1.close
    13. setobjTextFile2 = objFS.OpenTextFile(Signature_Path & "\" & TempName,8)
    14. strFile = (Signature_Path.Files)
    15. Next
    16. Do Until objTextFile.AtEndOfStream
    17. strLine = objTextFile.ReadLine
    18. If Not(InStr(strLine,"@USERDEF3@")= 0 xor InStr(strLine,"@STREET@")= 0 xor InStr(strLine,"@POSTCODE@")= 0 xor InStr(strLine,"@CITY@")= 0 xor InStr(strLine,"@PHONE@")= 0 xor InStr(strLine,"@FAX@")=0) Then
    19. objTextFile2.writeline strLine
    20. End If
    21. Loop
    22. set objTextFile = nothing
    23. set objTextFile2 = nothing
    24. objFS.copyFile Signature_Path & "\" & TempName, Signature_Path & "\" & FileName, true
    25. objfs.DeleteFile Signature_Path & "\" & TempName
    26. set objfs = nothing
    27. set objfs1 = nothing


    Über jeden Lösungsansatz oder Schlag mit dem Zaunpfahl auf den Hinterkopf wäre ich euch sehr dankbar.
    Danke für den Hinweis, den Fehler hab ich gleich behoben, jedoch bekomme ich noch immer eine Fehlermeldung.

    Visual Basic-Quellcode

    1. OPTION EXPLICIT
    2. Dim AppData
    3. Dim objAppData
    4. Dim objFS
    5. Dim objFS1
    6. Dim objFS2
    7. Dim objTextFile
    8. Dim objTextFile2
    9. Dim strFile
    10. Dim strLine
    11. Dim objFile
    12. Dim objFolder
    13. Dim Signature_Path
    14. Dim FileName
    15. Dim TempName
    16. Dim fso
    17. set fso = CreateObject("Scripting.FileSystemObject")
    18. Set objFS = CreateObject("Scripting.FileSystemObject")
    19. Set objAppdata = WScript.CreateObject("WScript.Shell")
    20. AppData = objAppData.ExpandEnvironmentStrings("%AppData%")
    21. Signature_Path = Appdata & "\Microsoft\Signatures"
    22. 'FileName = WScript.Arguments(0)
    23. TempName = "temp_" & FileName
    24. Set objFS2 = fso.GetFolder(Signature_Path)
    25. set objFolder = objFS2.Files
    26. For Each objFile In objFolder
    27. Set objTextFile = objFS.OpenTextfile(FileName)
    28. Set objFS1 = objFS.CreateTextFile(Signature_Path & "\" & TempName,true)
    29. objFS1.close
    30. setobjTextFile2 = objFS.OpenTextFile(Signature_Path & "\" & TempName,8)
    31. strFile = (Signature_Path.Files)
    32. Do Until objTextFile.AtEndOfStream
    33. strLine = objTextFile.ReadLine
    34. If Not(InStr(strLine,"@USERDEF3@")= 0 xor InStr(strLine,"@STREET@")= 0 xor InStr(strLine,"@POSTCODE@")= 0 xor InStr(strLine,"@CITY@")= 0 xor InStr(strLine,"@PHONE@")= 0 xor InStr(strLine,"@FAX@")=0) Then
    35. objTextFile2.writeline strLine
    36. End If
    37. Loop
    38. Next
    39. set objTextFile = nothing
    40. set objTextFile2 = nothing
    41. objFS.copyFile Signature_Path & "\" & TempName, Signature_Path & "\" & FileName, true
    42. objfs.DeleteFile Signature_Path & "\" & TempName
    43. set objfs = nothing
    44. set objfs1 = nothing


    Zeile: 28
    Zeichen: 2
    Fehler: Ungültiger Prozeduraufruf oder ungültiges Argument
    Code: 800A005
    Quelle: Laufzeitfehler in Microsoft VBScript
    Danke für die Hilfe,

    wir haben es jetzt hinbekommen und noch erweitert. Das Sript entfernt jetzt alle leeren Variablen aus allen Dateien in einem Ordner und ist in der Lage anhand von definierten Zeichen Zeilenumbrüche in die Signaturdateien einzufügen.