如何从PowerShell 1.0调用DLL方法

时间:2013-08-09 17:38:06

标签: .net windows powershell

我使用PowerShell版本1.0脚本从DLL文件调用方法,并使用以下代码将DLL文件加载到PowerShell中。

[System.Reflection.Assembly]::LoadFile("path of dll") is loaded successfully

GAC    Version        Location
---    -------        --------
False  v2.0.50727     location of dll

该类包含一个公共默认构造函数。我尝试使用以下代码创建类的对象:

$obj = new-object namespce.classname

它会引发以下错误:

  

New-Object:使用“0”参数调用“.ctor”的异常:“'namespce.classname'的类型初始值设定项引发异常。”
  在线:1字符:18
  + $ obj = new-object<<<< namespce.classname
     + CategoryInfo:InvalidOperation:(:) [New-Object],MethodInvocationException
     + FullyQualifiedErrorId:ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand`

当我尝试在不创建对象的情况下调用类的方法时,即使类包含方法,它也会抛出以下错误:

PS C:\Windows\system32> [namespace.classname]::method()
Method invocation failed because [namespace.classname] doesn't contain a method named 'method'.
At line:1 char:39
+ [namespace.classname]::method <<<< ()
    + CategoryInfo          : InvalidOperation: (method:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

这是一个版本错误,通常是DLL版本问题。 Dot NET不允许卸载和PowerShell一样。因此,重启将重新开始,并修复。通过确保版本没有歧义来避免同样的问题。

1 个答案:

答案 0 :(得分:2)

该方法很可能是一个实例方法,这意味着您需要拥有该类的实例。您可以通过类上的公共默认构造函数来获取它,例如:

$obj = new-object namespace.classname
$obj.Method()

也许唯一的公共构造者需要参数,例如:

$obj = new-object namespace.classname -arg 'string_arg',7
$obj.Method()

或者可能没有公共构造函数,但是有一个静态的Create或Parse方法返回一个实例,例如:

$obj = [namespace.classname]::Create()
$obj.Method()