2014-10-02 161 views
1

我试图将脚本从VBS转换为Powershell。我查看了微软文档(http://technet.microsoft.com/en-us/library/ee221101.aspx),但找不到答案。VBS到Powershell

的VBS脚本实例化COM对象和使用它像这样:

Set obj = CreateObject("COM.ObjName") 
Set stringValue = "blah" 
obj(stringValue).Metod #need help here 

我知道如何创建在PowerShell中的COM对象,但我不知道该怎么obj(stringValue).Method转换为PowerShell的。

UPD。我发现obj实际上是其他对象的容器(可能是字典?)。

UPD 2.问题转换为:如何从PowerShell中调用COM对象的[]运算符? Visual Studio中的对象浏览器显示该运营商的签名:

public virtual type1 this[ref object index] {get; } 

回答

0

问题已解决。正在研究的Com.ObjName似乎是一个集合。因为当我使用“OLE/COM Object Viewer”查看它的结构时,我发现它有一个参数化的Item属性。所以,Powershell使用这个属性加载了这个对象,但是并没有为它自动创建一个索引操作符。 那么在VBScript看起来像:

Set obj = CreateObject("COM.ObjName") 
Set stringValue = "blah" 
obj(stringValue).Metod #need help here 

转变为:

$obj = New-Object -ComObject "Com.ObjName" 
$stringValue = "blah" 
$obj.Item[$stringValue].Method() 
0

你可以尝试创建对象和管道也得到成员,它可以帮助你。 例如:

PS>$sch=new-object -ComObject ("Schedule.Service")       
PS>$sch |get-member               


    TypeName : System.__ComObject#{2faba4c7-4da9-4013-9697-20cc3fd40f85}  

Name   MemberType Definition           
----   ---------- ----------           
Connect   Method  void Connect (Variant, Variant, Variant, Variant) 
GetFolder  Method  ITaskFolder GetFolder (string)      
GetRunningTasks Method  IRunningTaskCollection GetRunningTasks (int)  
NewTask   Method  ITaskDefinition NewTask (uint)      
Connected  Property bool Connected() {get}       
ConnectedDomain Property string ConnectedDomain() {get}     
ConnectedUser Property string ConnectedUser() {get}      
HighestVersion Property uint HighestVersion() {get}      
TargetServer Property string TargetServer() {get}  
+0

对不起,我怎么能确定什么方法时,括号运算符'()被调用'被调用? – GKalnytskyi 2014-10-02 11:58:45

+0

我真的不知道,我想这取决于COM对象 – 2014-10-02 11:59:46

+0

@Kayasax:尝试:'$ comobj.method.overloaddefinitions' – 2014-10-02 13:42:49