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

Pdf Powershell:传递给函数的对象的访问方法,pdf,powershell,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

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

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

美元读取器的类型是:

System.Management.Automation.PSReference`1[iTextSharp.text.pdf.pdfreader]
在函数内部,您需要引用它的
属性,例如:

$reader.Value.NumberOfPages

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

我发现了我的问题,那就是将对象及其所有方法传递给一个函数

此呼叫不起作用:

getText ($reader, $page)
但我无法解释原因,但括号在Powershell中的函数调用中很重要:

getText $reader $page
来自JavaScript世界,这对我来说很奇怪,但这行代码的工作原理与预期一样,我现在可以通过getText函数访问$reader的方法

参考:

似乎不可能。[ref]类型仅枚举值。我通常看到函数中使用[ref]类型来避免作用域问题,但我在这里没有看到任何潜在的作用域问题。好的,但是我如何从函数访问GetPageContent?还有其他方法吗?只需使用$reader而不是[ref]$readerOh Idk我所做的很简单,但昨天我在几个小时内尝试了这个方法,但没有成功。这就是我尝试使用REF的原因。谢谢。我发现了真正的问题,我像使用getPageText($reader,$page)一样调用了我的函数,并且我必须在没有括号的情况下调用getPageText$reader$page。Powershell对我来说真的很神秘。抱歉,因为当我发布我的问题时,我删除了括号,没有想到它可能来自这里。我将修改我的问题并添加答案,但是谢谢,你真的帮助了我。我想访问的是GetPageContent方法。$reader.Value.GetPageContent似乎不可能。谢谢您的回答,并尝试解决我的问题。事实上,我问问题的方式是错误的。我真正的问题是调用函数时的括号,以及向函数传递参数。很抱歉,Doh!我太专注于ref业务了,以至于我完全没有注意到您只传入了一个参数-一个包含两个元素的数组。是的,在PowerShell中很常见的错误。