如何从PowerShell 1.0调用DLL方法

我正在使用PowerShell V1.0脚本从DLL文件中调用方法,并使用以下代码将DLL文件加载到PowerShell中。

[System.Reflection.Assembly]::LoadFile("path of dll") is loaded successfully GAC Version Location --- ------- -------- False v2.0.50727 location of dll 

该类包含一个公共的默认构造函数。 我试着用下面的代码创build一个类的对象:

 $obj = new-object namespce.classname 

它会抛出以下错误:

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

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

 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相同。 所以,重新启动将重新开始,并修复。 通过确保版本不含糊,避免同样的问题。

Solutions Collecting From Web of "如何从PowerShell 1.0调用DLL方法"

最有可能的方法是一个实例方法,这意味着你将需要有一个类的实例。 你可以通过这个类的公共默认构造函数来获得,例如:

 $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()