Function 如何将COM对象参数传递给PowerShell函数?

Function 如何将COM对象参数传递给PowerShell函数?,function,powershell,parameters,com,Function,Powershell,Parameters,Com,我有一个PowerShell脚本,可以打开几个Excel电子表格并写入每个电子表格中的一个单元格。我想把代码打开每个电子表格,写入它,并保存在一个函数中。我不想为每个电子表格创建Excel.ApplicationCOM对象的新实例,而是想向函数传递一个实例,以便可以重用该实例 以下是我的功能: function InsertBlurb { param([Object[]]$xl, [string]$filename, [string]$blurb) $WorkBook = $xl

我有一个PowerShell脚本,可以打开几个Excel电子表格并写入每个电子表格中的一个单元格。我想把代码打开每个电子表格,写入它,并保存在一个函数中。我不想为每个电子表格创建
Excel.Application
COM对象的新实例,而是想向函数传递一个实例,以便可以重用该实例

以下是我的功能:

function InsertBlurb
{
    param([Object[]]$xl, [string]$filename, [string]$blurb)
    $WorkBook = $xl.Workbooks.Open($filename)
    $WorkSheet = $WorkBook.Sheets.Item("Print Out")
    $WorkSheet.Cells.Item(12, "A") = $blurb
    $WorkBook.Save()
    $WorkBook.Close()
}

# Call looks like this
InsertBlurb($objExcel, $dsBook, $blurb)
尝试运行该函数时,出现错误:

You cannot call a method on a null-valued expression.
At T:\rclocher3\Excel-to-PDF2.ps1:32 char:35
+     $WorkBook = $xl.Workbooks.Open <<<< ($filename)
    + CategoryInfo          : InvalidOperation: (Open:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
不能对空值表达式调用方法。
在T:\rclocher3\Excel-to-PDF2.ps1:32 char:35

+$WorkBook=$xl.Workbooks.Open首先,您的电话应该是:

InsertBlurb $objExcel $dsBook $blurb
调用Powershell函数时不使用括号和逗号


IDK,如果在函数中定义了$xl,则写入。也许,也许不是…倾向于后者,但不确定。如果类型错误,您可以省略该类型。很难想象它是一个对象数组。

位置参数不起作用,除非在使用Param时添加
[参数(位置=编号)]
,默认情况下,所有函数参数都是位置参数。PowerShell按照参数在函数中声明的顺序为参数指定位置号。要禁用此功能,请将CmdletBinding属性的PositionBinding参数的值设置为$False“这是因为需要在函数中放入一些调试语句来打印函数中接收到的参数。然后在调用Open之后,检查$Workbook的值。然后在下一次调用后检查$WORKEY的值。就我个人而言,我首先要在ExcelVBA环境中编写一个等效函数,并确保该环境中的所有调用都能正常工作。也许你在一次调用中丢失了一个参数。IDK…你说的对,我相信这不是以前的powershell版本的情况。谢谢你的更正。好的。。。就我所知我的经验是,至少从第2版开始,情况就是这样。我想。。。以前从未遇到过问题。