Powershell:传递给函数的对象的访问方法

时间:2013-10-24 22:59:20

标签: pdf powershell

我是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)
}

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

2 个答案:

答案 0 :(得分:2)

$ reader的类型是:

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

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

$reader.Value.NumberOfPages

那就是说,因为你没有修改变量$reader引用的内容,所以我不确定你为什么要在这个函数中通过ref。

答案 1 :(得分:0)

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

这次通话不起作用:

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