Jenkins PowerShell插件 - 返回Null

时间:2017-02-11 23:54:05

标签: powershell jenkins ms-word

我试图通过Jenkins插件运行PowerShell脚本,该插件会将Word文档转换为文本,但会出现Null类型错误。奴隶是Win 2008盒子,Jenkins作为服务运行,服务以管理员身份运行。我试过了:

  • 通过在本地运行命令来验证命令在远程复选框上是否有效。
  • 使用Windows批处理运行PowerShell脚本(相同的错误)。
  • 通过Jenkins插件运行命令。

脚本($Doc被设置为Null):

$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()
}

确认a)有一个文件,b)我有一个Word对象。同样,所有这一切在远程盒子上都能正常工作。

$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                : 
.
.
.

错误发生在收盘时因为$Doc从未设置过。当我在执行期间尝试打印$Doc时,没有显示任何内容。

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

更新:

根据Andreas M。建议更改脚本:

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

相同的错误,但奇怪的是,Word.Doc.Open调用没有报告错误。

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

1 个答案:

答案 0 :(得分:1)

尝试以下方法。首先检查Administrator是否有权在给定位置下打开文件。使用错误输出扩展脚本,检查$Word.Documents.Open($File.FullName)返回$null的原因。

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

也许您可以检索Open失败的其他信息。

更新:您可能需要更改您的Com / Dcom设置 - &gt;检查此link的答案。