Jump to content
Melde dich an, um diesen Inhalt zu abonnieren  
CrissGross

Powershell Assembly nicht geladen

Empfohlene Beiträge

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” 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Prima :)

 

Ein Tipp noch: Wir hängen alle viel zu sehr an Text-Massage... $LocalSignaturePath = $AppData+$SignaturePath - schau Dir mal Join-Path an.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
Melde dich an, um diesen Inhalt zu abonnieren  

×