2014-10-02 5 views
1

Я пытаюсь преобразовать скрипт из VBS в Powershell. Я просмотрел документацию Microsoft (http://technet.microsoft.com/en-us/library/ee221101.aspx), но не смог найти ответ.VBS to Powershell

VBS скрипт создает экземпляр объекта COM и использует его как это:

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

Я знаю, как создать COM-объект в PowerShell, но я не знаю, как конвертировать obj(stringValue).Method в Powershell.

UPD. Я понял, что obj на самом деле является контейнером других объектов (может быть, словарь?).

UPD 2. Вопрос преобразуется в: Как вызвать оператора COM-объекта [] из powershell? обозреватель объектов в 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

+0

Я действительно не знаю, я думаю, это зависит от объекта com –

+0

@Kayasax: попробуйте с помощью: '$ comobj.method.overloaddefinitions' –