Jump to content

Powershell Assembly nicht geladen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

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” 
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...