0

我是 Powershell 的新手,在尝试访问传递给函数的对象的方法时遇到问题。

我不明白的是我可以访问这个对象的字段。

这是我的代码:

Add-Type -Path .\itextsharp.dll

Function getText ($reader, $page)
{
    # WORKS : CAN ACCESS THE NumberOfPages FIELD HERE
    echo $reader.NumberOfPages

    # ERROR : CAN'T ACCESS THE GetPageContent METHOD
    return $reader.GetPageContent($page)
}

$reader = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList "C:\toto.pdf"

# WORKS : CAN ACCESS THE NumberOfPages FIELD
for ($page = 1; $page -le $reader.NumberOfPages; $page++)
{
    # WORKS : CAN ACCESS THE GetPageContent METHOD
    $lines = $reader.GetPageContent($page) -join "" -split "`n"

    getText ($reader, $page)
}

是否可以以简单的方式访问该方法?

4

2 回答 2

2

$reader 的类型是:

System.Management.Automation.PSReference`1[iTextSharp.text.pdf.pdfreader]

在函数内部,您需要引用它的Value属性,例如:

$reader.Value.NumberOfPages

也就是说,由于您没有修改变量$reader所指的内容,因此我不确定您为什么在此函数中通过 ref 传递。

于 2013-10-25T01:08:02.920 回答
0

我发现了我的问题,即将对象及其所有方法传递给函数。

它不适用于此调用:

getText ($reader, $page)

但我无法真正解释原因,但括号对 Powershell 中的函数调用很重要:

getText $reader $page

来自 JavaScript World,这对我来说很奇怪,但是这一行按预期工作,我现在可以从getText函数访问$reader的方法。

参考: http ://weblogs.asp.net/soever/archive/2006/11/29/powershell-calling-a-function-with-parameters.aspx

于 2013-10-25T14:56:27.987 回答