VBS到Powershell

时间:2014-10-02 11:36:49

标签: powershell vbscript powershell-v2.0

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

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; }

2 个答案:

答案 0 :(得分:0)

您可以尝试创建对象并将其传递给get-member,它可能对您有所帮助。 示例:

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}     

答案 1 :(得分:0)

问题解决了。正在研究的Com.ObjName似乎是一个集合。因为,当我使用“OLE / COM对象查看器”查看其结构时,我发现它具有参数化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()