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:
Nu is de assembly ingeladen. Ik maak mijn SDK object op de volgende manier:
Als ik de members van dit object bekijk, geeft hij netjes aan dat deze van het type PISDK.PISDKClass is.
Als ik nu bijvoorbeeld de lijst met servers wil hebben, dan doe ik bijvoorbeeld:
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:
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?
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?