2017-02-11 2 views
1

Ich versuche, ein PowerShell-Skript über das Jenkins-Plugin zu starten, das Word-Dokumente in Text konvertiert, aber Null-Typ-Fehler bekommen. Der Slave ist eine Win 2008-Box, Jenkins läuft als Dienst darauf und der Dienst läuft als Administrator. Ich habe versucht:Jenkins PowerShell Plugin - Returning Null

  • Überprüfen, dass die Befehle auf der Remote-Box funktionieren, indem Sie sie lokal ausführen.
  • Ausführen des PowerShell-Skripts mit Windows-Batch (gleicher Fehler).
  • Ausführen der Befehle über Jenkins-Plugin.

Script ($Doc auf Null gesetzt wird):

$Files = Get-ChildItem 'PTX*.docx' 
$Files 
$Word = New-Object -ComObject Word.Application 
$Word 

foreach ($File in $Files) { 
    # open document in Word 
    $File.FullName 
    $Doc = $Word.Documents.Open($File.FullName) 
    $Doc 
    Start-Sleep -s 10 
    # swap out RTF for TXT in the filename 
    #$Name = ($Doc.FullName).Replace("docx", "txt") 
    #$Doc.SaveAs([ref] $Name, [ref] 2) 

    $Doc.Close() 
} 

bestätigt, dass a) eine Datei war und b), die ich habe ein Word-Objekt. Auch das funktioniert auf der Remote-Box.

$Word:

Application     : Microsoft.Office.Interop.Word.ApplicationClass 
Creator      : 1297307460 
Parent      : Microsoft.Office.Interop.Word.ApplicationClass 
Name       : Microsoft Word 
Documents      : System.__ComObject 
Windows      : System.__ComObject 
ActiveDocument    : 
. 
. 
.

Der Fehler tritt in der Nähe, weil $Doc wurde nie eingestellt. Als ich versuchte, die $Doc während der Ausführung zu drucken, wurde nichts angezeigt.

C:\jenkins\workspace\eggplant-Test\DVA.docx 
You cannot call a method on a null-valued expression. 
At C:\Users\PENDAN~1.MDZ\AppData\Local\Temp\hudson1097244472905940013.ps1:19 char:12 
+  $Doc.Close <<<<() 
    + CategoryInfo   : InvalidOperation: (close:String) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull

Aktualisiert:

Changed Skript wie von Andreas M .: vorgeschlagen

Foreach ($File in $Files) { 
    # open document in Word 
    echo File: $File.fullname 
    $Error.Clear() # Clear all other errors 
    $Doc = $Word.Documents.Open($File.FullName) 
    echo "Error count:" $Error.Count # Dump number of errors 
    $Error # Dump errors  
     echo "Doc:" $Doc 

gleichen Fehler, aber merkwürdigerweise keine Fehler vom Word.Doc.Open Anruf gemeldet.

File: 
C:\jenkins\workspace\eggplant-Test\DVA.docx 
Error count: 
0 
Doc: 
You cannot call a method on a null-valued expression. 
At C:\Users\PENDAN~1.MDZ\AppData\Local\Temp\hudson3349169014447704754.ps1:23 ch 
ar:12 
+  $Doc.close <<<<() 
    + CategoryInfo   : InvalidOperation: (close:String) [], RuntimeExce 
    ption 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

Antwort

1

Versuchen Sie Folgendes. Überprüfen Sie zunächst, ob Administrator die Rechte hat, Dateien unter dem angegebenen Speicherort zu öffnen. Erweitern Sie das Skript mit Fehlerausgabe, und überprüfen Sie, warum $Word.Documents.Open($File.FullName)$null zurückgibt.

$Error.Clear() # Clear all other errors 
$Doc = $Word.Documents.Open($File.FullName) 
$Error.Count # Dump number of errors 
$Error # Dump errors 

Vielleicht können Sie zusätzliche Informationen abrufen, warum Open ausfällt.

UPDATE: Sie müssen vielleicht Ihre Com/Dcom Einstellungen ändern -> überprüfen Sie die Antwort dieser link.

+0

Aktualisierte erste Frage mit Fehlerausgabe. Ich habe mich mit dem gleichen Benutzernamen und Passwort wie Jenkins in die Remote-Box eingeloggt und kann das Skript ohne Probleme ausführen. – stackbacker

+0

Vielen Dank für den Link. Ich bin zu 99% zuversichtlich, dass ich niemals alleine in diese Richtung geschaut hätte. Es war zwar nicht das DCOM-Problem, aber es wurde Desktop zum SysWow-Verzeichnis hinzugefügt (das in diesem Link erwähnt wird), das es behoben hat. Nochmals vielen Dank. – stackbacker

+0

Freut mich hier. Bitte. – Moerwald