2014-03-26 210 views
1

我一直在試圖編寫一個程序來訪問第三方OLE DLL的屬性和方法。無法在PowerShell函數中運行[System .__ ComObject] .InvokeMember函數

下面的代碼運行良好。

[System.__ComObject].InvokeMember("AppName", [System.Reflection.BindingFlags]::GetProperty, $null, $appObj, $null) 

由於調用將是重複的,我想調用下面的包裝。

function Get-Property { 
    param(
    $objOLE, 
    [String] $propertyName 
) 
    [System.__ComObject].InvokeMember($propertyName,[System.Reflection.BindingFlags]::GetProperty,$null,$objOLE,$null) 
} 

腳本運行時

Get-Property($appObj, "AppName") 

我得到這個錯誤:

Exception calling "InvokeMember" with "5" argument(s): "Method 'System.__ComObject.ToString' not found." 
At F:\Scripts\test.ps1:21 char:36 
+ [System.__ComObject].InvokeMember <<<< ($propertyName,[System.Reflection.BindingFlags]::GetProperty,$null,$objOLE,$null) 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : DotNetMethodException 

這是令人困惑的。任何人都有洞察力?先謝謝你。

回答

2

記住你的函數是PowerShell的函數/命令,而不是一個.NET方法即不使用括號和不逗號分隔ARGS:

Get-Property $appObj AppName 

你有它的方式,你的功能得到一個參數是一個包含兩個元素的數組。