CrissGross 0 Geschrieben 12. Mai 2017 Melden Teilen Geschrieben 12. Mai 2017 Hi zusammen, ich habe ein Problem.Via Powershell ISE habe ich ein Script programmiert, welches ein Word Template von einem Netzlaufwerk in den Pfad AppData\Roaming\Microsoft\Signatures kopiert. Platzhalter in dem Template werden mit User Daten aus dem Active Directory gefüttert.Danach wird das Word Template via: #HTML $saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatHTML"); $path = $LocalSignaturePath+'\'+$SignatureName+".htm" $MSWord.ActiveDocument.saveas([ref]$path, [ref]$saveFormat) unter anderem in eine HTML Datei gewandelt.Das funktioniert soweit auch alles problemlos im Powershell ISE.Allerdings nicht in der Konsole. Ich verknüpfe das Script um dieses via Doppelklick zu starten, bzw. über den Aufgabenplaner zu starten. Die Fehlermeldung seht ihr im Anhang. Ich habe bereits versucht das Assembly nachzuladen, allerdings ist das glaube ich der falsche Ansatz. #$path = 'C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.Office.Tools.Word.Implementation.resources\v4.0_10.0.0.0_de_b03f5f7f11d50a3a\Microsoft.Office.Tools.Word.Implementation.resources.dll' #Add-Type -Path $path Würdet ihr mir hierbei bitte helfen? Der gesamte Code lautet: #variablen $SignatureName = 'Standard - VSI' $SignatureSource = "\\DE-S-0154797\DEASJ-Projects\Angebote\Z_Trigger\Templates2\Signatures\*.docx" #Pfad zu dem Template" $SignatureVersion = "1.1" #Versionsnummer, muss mit jeder Änderung an Signatur um 0.1 erhöht werden. $SignatureForce = '0' #Verhindert das manuelle ändern/ löschen/ erstellen einer Signatur, wenn auf 1 steht. #variablen programmierumgebung $AppData=(Get-Item env:appdata).value $SignaturePath = '\Microsoft\Signatures' $LocalSignaturePath = $AppData+$SignaturePath $RemoteSignaturePathFull = $SignatureSource #kopiert / erstellt den Versionsordner If (-not(Test-Path -Path $LocalSignaturePath\$SignatureVersion)) { New-Item -Path $LocalSignaturePath\$SignatureVersion -ItemType Directory } Elseif (Test-Path -Path $LocalSignaturePath\$SignatureVersion) { Write-Output "Ihre Signaturen sind auf dem aktuellsten Stand..." break } #Prüft ob der Signaturpfad vorhanden ist. Wichtig für neue Rechner auf denen noch nie eine Signatur angelegt war. if (-not(Test-Path -path $LocalSignaturePath)) { New-Item $LocalSignaturePath -Type Directory } #Kontaktiert Active Directory und ruft definierte LDAP Felder ab. $UserName = $env:username $Filter = "(&(objectCategory=User)(samAccountName=$UserName))" $Searcher = New-Object System.DirectoryServices.DirectorySearcher $Searcher.Filter = $Filter $ADUserPath = $Searcher.FindOne() $ADUser = $ADUserPath.GetDirectoryEntry() $ADDisplayName = $ADUser.DisplayName #Kopiert Template vom Netzwerk auf den lokalen Rechner. Write-Output "Signaturen werden kopiert..." Copy-Item "$SignatureSource" $LocalSignaturePath -Recurse -Force $ReplaceAll = 2 $FindContinue = 1 $MatchCase = $False $MatchWholeWord = $True $MatchWildcards = $False $MatchSoundsLike = $False $MatchAllWordForms = $False $Forward = $True $Wrap = $FindContinue $Format = $False #Erstellt ein temporäres docx Dokument zur Vorbereitung. LDAP Felder / Variablen Write-Output "Temporäres Dokument wird erstellt..." $MSWord = New-Object -ComObject word.application $fullPath = $LocalSignaturePath+'\'+$SignatureName+'.docx' $MSWord.Documents.Open($fullPath) $ADCustomAttribute1 = 'test' #DisplayName wird durch das LDAP Feld 'DisplayName' ersetzt. $FindText = "DisplayName" $Designation = $ADCustomAttribute1.ToString() #custom attribute 1 in Exchange Version If ($Designation -ne '') { $Name = $ADDisplayName.ToString() $ReplaceText = $Name+', '+$Designation } Else { $ReplaceText = $ADDisplayName.ToString() } $MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll ) #Wandelt DocX Dokument in HTML, RTF und TXT um. Write-Output "Signatur wird umgewandelt und gespeichert..." #HTML $saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatHTML"); $path = $LocalSignaturePath+'\'+$SignatureName+".htm" $MSWord.ActiveDocument.saveas([ref]$path, [ref]$saveFormat) #RTF $saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatRTF"); $path = $LocalSignaturePath+'\'+$SignatureName+".rtf" $MSWord.ActiveDocument.SaveAs([ref]$path, [ref]$saveFormat) #TXT $saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatText"); $path = $LocalSignaturePath+'\'+$SignatureName+".txt" $MSWord.ActiveDocument.SaveAs([ref]$path, [ref]$SaveFormat) $MSWord.ActiveDocument.Close() $MSWord.Quit() #Prüft ob eine OFFICE2013 Version vorliegt. Falls ja wird Variable $SignatureForce beachtet. If (Test-Path HKCU:Software\Microsoft\Office\15.0) { Write-Output "Einstellungen für Signatur in Office 2013 werden geändert..." If ($SignatureForce -eq '0') { Write-Output "Änderungen der Einstellungen in Office 2013 sind möglich." $MSWord = New-Object -ComObject word.application $EmailOptions = $MSWord.EmailOptions $EmailSignature = $EmailOptions.EmailSignature $EmailSignatureEntries = $EmailSignature.EmailSignatureEntries } If ($SignatureForce -eq '1') { Write-Output "Einstellungen von Office 2013 werden geändert. Es sind keine manuellen Änderungen der Signatur möglich." If (Get-ItemProperty -Name 'NewSignature' -Path HKCU:'\Software\Microsoft\Office\15.0\Common\MailSettings') { } Else { New-ItemProperty HKCU:'\Software\Microsoft\Office\15.0\Common\MailSettings' -Name 'NewSignature' -Value $SignatureName -PropertyType 'String' -Force } If (Get-ItemProperty -Name 'ReplySignature' -Path HKCU:'\Software\Microsoft\Office\15.0\Common\MailSettings') { } Else { New-ItemProperty HKCU:'\Software\Microsoft\Office\15.0\Common\MailSettings' -Name 'ReplySignature' -Value $SignatureName -PropertyType 'String' -Force } } } Write-Output "Ihre Signatur ist auf dem neusten Stand!" Fehler gelöst, es lag doch am fehlenden Assembly. Konnte diesen mit folgender Scriptzeile nachladen: add-type -AssemblyName “Microsoft.Office.Interop.Word” Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 12. Mai 2017 Melden Teilen Geschrieben 12. Mai 2017 Prima :) Ein Tipp noch: Wir hängen alle viel zu sehr an Text-Massage... $LocalSignaturePath = $AppData+$SignaturePath - schau Dir mal Join-Path an. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.