【问题标题】:Getting confused: I cannot pass parameters to a method of a PSObject感到困惑:我无法将参数传递给 PSObject 的方法
【发布时间】:2019-05-03 16:06:17
【问题描述】:

我创建了一个 PSObject,它有几个属性和几个方法。唯一的问题是将参数传递给方法。

在创建对象、它的属性和方法之后,我可以使用 get-members 方法查看成员。 Equals 方法有一个参数,我的方法没有。

function get_ExcelObj {
         param ([string] $SheetName, [string] $AppDir, [string] $NameApp )

         [string] $SheetName  = "DB"
         [string] $BaseDir    = ""
         [object] $ExcelHash  = @{}  
         [object] $Index      = @{}

         $EE_DB = New-Object -TypeName PSObject

         Add-Member -InputObject $EE_DB -MemberType NoteProperty -Name ExcelDB        -Value $ExcelHash
         Add-Member -InputObject $EE_DB -MemberType NoteProperty -Name IndexDB        -Value $Index
         Add-Member -InputObject $EE_DB -MemberType NoteProperty -Name SheetName      -Value $SheetName
         Add-Member -InputObject $EE_DB -MemberType ScriptMethod -Name InitExcel      -Value $InitExcel
         Add-Member -InputObject $EE_DB -MemberType ScriptMethod -Name GetSheetName   -Value $GetSheetName
         Add-Member -InputObject $EE_DB -MemberType ScriptMethod -Name OpenExcelFile  -Value $OpenExcelFile
         Add-Member -InputObject $EE_DB -MemberType ScriptMethod -Name OpenExcelsheet -Value $OpenExcelsheet

         return  $EE_DB

}
$OpenExcelFile = { 
     param ( [string] $ExcelFile )
     $WorkBook = $this.ObjExcel.Workbooks.Open($ExcelFile)
     Add-Member -InputObject $this -MemberType NoteProperty -Name WorkBook  -Value $WorkBook 
}
$ExcelObj = get_ExcelObj -SheetName "DB" -AppDir $MedGovDir -NameApp "MedGov"
$ExcelObj | Get-Member # Lots of members, eg: Method bool Equals(System.Object obj)  
$ExcelObj.OpenExcelFile() -ExcelFile $file # does not work

有什么想法吗?非常感谢任何帮助。我真的很困惑。

【问题讨论】:

    标签: powershell methods parameter-passing psobject


    【解决方案1】:

    在 .NET 对象上调用方法时,您传递参数的方式与在 C# 或 VB.NET 中的方式相同,逗号分隔按参数出现在方法签名中的顺序,在括号内。尝试以下方法:

    $ExcelObj = get_ExcelObj -SheetName "DB" -AppDir $MedGovDir -NameApp "MedGov"
    $ExcelObj | Get-Member # Lots of members, eg: Method bool Equals(System.Object obj)
    $ExcelObj.OpenExcelFile($file) # this should work
    $ExcelObj.OpenExcelFile() -ExcelFile $file # does not work
    

    【讨论】:

    • 另一方面,PS中的函数命名参数是正常的,是不可能交出来的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 2015-09-09
    • 2021-04-13
    • 2020-06-12
    • 1970-01-01
    相关资源
    最近更新 更多