Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[Powershell] Com objecten casten

Pagina: 1
Acties:
  • 189 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Sinds kort ben ik bezig met Windows Powershell. Ik probeer een .NET SDK die wij hier gebruiken, te gebruiken in Powershell. De SDK geeft toegang tot een tijd-gerelateerde database (OsiSoft PI). Ik kan de members van het object wat ik hier uit haal niet goed aanspreken:

Ik importeer de SDK/assembly op de volgende manier:
code:
1
2
3
4
5
6
PS C:\Documents and Settings\A110471> [System.Reflection.Assembly]::LoadFile("c:\program files\PIPC\PISDK\Osisoft.PISD
dll")

GAC    Version        Location
---    -------        --------
True   v1.1.4322      C:\WINDOWS\assembly\GAC\OSIsoft.PISDK\1.2.0.0__c3309f0734ba2805\OSIsoft.PISDK.dll


Nu is de assembly ingeladen. Ik maak mijn SDK object op de volgende manier:
code:
1
PS C:\Documents and Settings\A110471> $test = new-object PISDK.PISDKClass


Als ik de members van dit object bekijk, geeft hij netjes aan dat deze van het type PISDK.PISDKClass is.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
PS C:\Documents and Settings\A110471> $test | get-member


   TypeName: PISDK.PISDKClass

Name                      MemberType Definition
----                      ---------- ----------
CreateObjRef              Method     System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType)
Equals                    Method     System.Boolean Equals(Object obj)
GetErrorString            Method     System.String GetErrorString(PISDKErrorConstants pseError)
GetHashCode               Method     System.Int32 GetHashCode()
GetLifetimeService        Method     System.Object GetLifetimeService()
GetPoint                  Method     PISDK.PIPoint GetPoint(String ServerTagName)
GetPoints                 Method     PISDK.PointList GetPoints(String WhereClause, PointSearchTypeConstants eSearchT...
GetType                   Method     System.Type GetType()
get_ConnectTimeout        Method     System.Int32 get_ConnectTimeout()
get_Identifier            Method     System.String get_Identifier()
get_MessageLog            Method     PISDK.MessageLog get_MessageLog()
get_PIConstants           Method     PISDK.PIConstants get_PIConstants()
get_PIPCInfo              Method     PISDKCommon.NamedValues get_PIPCInfo()
get_PISDKVersion          Method     PISDK.PISDKVersion get_PISDKVersion()
get_Restorer              Method     PISDKCommon.PIGlobalRestorer get_Restorer()
get_Servers               Method     PISDK.Servers get_Servers()
get_Timeout               Method     System.Int32 get_Timeout()
InitializeLifetimeService Method     System.Object InitializeLifetimeService()
Refresh                   Method     System.Void Refresh(Object TargetObject)
set_ConnectTimeout        Method     System.Void set_ConnectTimeout(Int32 seconds)
set_Identifier            Method     System.Void set_Identifier(String bstrID)
set_Timeout               Method     System.Void set_Timeout(Int32 seconds)
ToString                  Method     System.String ToString()
ConnectTimeout            Property   System.Int32 ConnectTimeout {get;set;}
Identifier                Property   System.String Identifier {get;set;}
MessageLog                Property   PISDK.MessageLog MessageLog {get;}
PIConstants               Property   PISDK.PIConstants PIConstants {get;}
PIPCInfo                  Property   PISDKCommon.NamedValues PIPCInfo {get;}
PISDKVersion              Property   PISDK.PISDKVersion PISDKVersion {get;}
Restorer                  Property   PISDKCommon.PIGlobalRestorer Restorer {get;}
Servers                   Property   PISDK.Servers Servers {get;}
Timeout                   Property   System.Int32 Timeout {get;set;}


Als ik nu bijvoorbeeld de lijst met servers wil hebben, dan doe ik bijvoorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
PS C:\Documents and Settings\A110471> $servers = $test.Servers
PS C:\Documents and Settings\A110471> $servers | get-member


   TypeName: System.__ComObject#{3bcb2dc6-5f66-11d1-bd64-0060b0290178}

Name                 MemberType Definition
----                 ---------- ----------
ChangeUser           Method     void ChangeUser (string)
Close                Method     void Close ()
GetPoints            Method     _PointList GetPoints (string, _PIAsynchStatus)
GetPointsSQL         Method     _PointList GetPointsSQL (string, _NamedValues, _PIAsynchStatus)
Open                 Method     void Open (string)
RemoveDefaultUser    Method     void RemoveDefaultUser ()
ServerTime           Method     _PITime ServerTime ()
TestConnection       Method     void TestConnection (TestConnectionConstants)
AttributeSets        Property   AttributeSets AttributeSets () {get}
Connected            Property   bool Connected () {get}
ConnectionType       Property   string ConnectionType () {get}
ConnectTimeout       Property   int ConnectTimeout () {get} {set}
CurrentUser          Property   string CurrentUser () {get}
DefaultUser          Property   string DefaultUser () {get} {set}
Events               Property   _ServerEvents Events () {get}
LastConnectedTime    Property   Date LastConnectedTime () {get}
LastDisconnectedTime Property   Date LastDisconnectedTime () {get}
MessageLog           Property   MessageLog MessageLog () {get}
Name                 Property   string Name () {get}
Parent               Property   Servers Parent () {get}
Path                 Property   string Path () {get} {set}
PIBatchDB            Property   PIBatchDB PIBatchDB () {get}
PIContexts           Property   PIContexts PIContexts () {get}
PIGroups             Property   PIGroups PIGroups () {get}
PIMisc1              Property   PIMisc1 PIMisc1 () {get}
PIMisc2              Property   PIMisc2 PIMisc2 () {get}
PIModuleDB           Property   PIModuleDB PIModuleDB () {get}
PIPoints             Property   PIPoints PIPoints () {get}
PITimeZoneInfo       Property   PITimeZoneInfo PITimeZoneInfo () {get}
PIUsers              Property   PIUsers PIUsers () {get}
PointClasses         Property   PointClasses PointClasses () {get}
PointSources         Property   PointSources PointSources () {get}
Port                 Property   int Port () {get} {set}
ServerID             Property   string ServerID () {get}
ServerManagement     Property   ServerManagement ServerManagement () {get}
ServerVersion        Property   ServerVersion ServerVersion () {get}
StateSets            Property   StateSets StateSets () {get}
Timeout              Property   int Timeout () {get} {set}


Zoals je kan zien geeft deze nu aan dat deze van het type System.__ComObject is. Ik wil deze graag van het type PISDK.Servers hebben, zodat ik netjes alle members kan aanspreken.

Als ik nu bijvoorbeeld:
code:
1
PS C:\Documents and Settings\A110471> $servers.ServerID

gebruik, dan geeft hij niks terug. (Hij kent de member 'ServerID' niet omdat het een standaard ComObject is ? )

Er bestaat een PISDK.Servers interface. Ik wil nu eigenlijk duidelijk maken dat dit comobject deze interface implementeert. Ik heb het op diverse mogelijke manier geprobeerd, maar krijg constant fouten. En in de huidige staat (als normaal comobject) kan ik de members niet aanspreken.

Iemand een idee?