我试图通过Jenkins插件运行PowerShell脚本,该插件会将Word文档转换为文本,但会出现Null类型错误。奴隶是Win 2008盒子,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
答案 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的答案。