我是Powershell脚本的新手。我正在尝试运行一个脚本将 Excel 电子表格转换为 PDF 文件。这是我正在使用的脚本:
$excelInputPath = <Path1>;
$pdfOutputPath = <Path2>;
$xlFixedFormat = "Microsoft.Office.Interop.Excel.xlFixedFormatType" -As [type];
$objExcel = New-Object -ComObject excel.application;
$objExcel.visible = $False;
$workbook = $objExcel.workbooks.open($excelInputPath, 3);
$workbook.ExportAsFixedFormat($xlFixedFormat::xlTypePDF, $pdfOutputPath);
$objExcel.Workbooks.close();
$objExcel.Quit()
就其本身而言,它可以完美地执行。我现在希望添加超时,因此我正在尝试将其作为作业运行。但是,此作业会抛出一个执行错误,我通过接收作业命令捕获该错误:
$excelInputPath = <Path1>;
$pdfOutputPath = <Path2>;
$xlFixedFormat = "Microsoft.Office.Interop.Excel.xlFixedFormatType" -As [type];
$objExcel = New-Object -ComObject excel.application;
$objExcel.visible = $False;
$workbook = $objExcel.workbooks.open($excelInputPath, 3);
$job = Start-Job -ScriptBlock {$workbook.ExportAsFixedFormat($xlFixedFormat::xlTypePDF, $pdfOutputPath);}
$job | Wait-Job -Timeout 10;
If ($job.State -eq 'Running')
{$job.StopJob();
$objExcel.Workbooks.close();
$objExcel.Quit()
throw "Error encountered: Operation timed out"}
else
{if($job.Childjobs[0].Error)
{$objExcel.Workbooks.close();
$objExcel.Quit()
$job | Receive-Job}
else
{$job | Receive-Job;
$objExcel.Workbooks.close();
$objExcel.Quit()}
}
我收到的输出引用如下。该消息是德语的,大致翻译为:"无法对具有 NULL 的表达式执行方法"。
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
57 Job57 BackgroundJob Completed True localhost $workbook.ExportAsFixe...
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
+ PSComputerName : localhost
这里另一个令人困惑的事情是,即使作业状态不执行转换并引发此错误消息,也会反映为已完成。
谢谢!除了解释为什么会发生这种情况之外,我将不胜感激任何关于如何更好地执行这项任务的意见。
脚本块不知道变量$workbook
、$xlFixedFormat::xlTypePDF
和$pdfOutputPath
。 您需要使用-ArgumentList
参数将这些作为参数发送。
尝试:
$scriptBlock = {
param($workbook, $format, $outPath)
$workbook.ExportAsFixedFormat($format, $outPath)
}
$job = Start-Job -ScriptBlock $scriptBlock -ArgumentList $workbook, $xlFixedFormat::xlTypePDF, $pdfOutputPath