我是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)
}
是否可以通过简单的方式访问该方法?
答案 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