我正在尝试将脚本从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; }
答案 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()