On a pas mal test sur un produit de chiffre en ce moment qui sont faits via un Objet Com. Alors un p’ti Tp sur le sujet…
Par contre, je ne vais pas expliquer ce que c’est qu’un objet COM, je vous renvoie au chapitre 10, du même nom, du bouquin d’Arnaud (p531 de la V3).
Dans ce TP on va récupérer la version de [Zone Central](http://www.primx.eu/zonecentral.aspx) sur le poste via un objet COM :
Lors de son installation ZC (pour les intimes) enregistre automatiquement des dlls permettant de charger un objet COM : ZCAX.ZoneCentral.
Pour créer une nouvelle instance d’un objet COM dans PowerShell:
PS C:\> $zc = New-Object -ComObject ZCAX.ZoneCentral PS C:\> $zc System.__ComObject # Et là on a bien un objet au sens programmation orienté objet (classe, attributs, méthode, portés, etc…)
Bon, c’est cool… et maintenant ?
Alors là, dans l’idéal, il faut se référencer à la documentation de l’éditeur de votre objet COM pour connaître les fonctions proposées.
Mais pour les TLDR (i.e. Too Long Didn’t Read) en herbe que vous êtes, on peut toujours faire ça à la crado :
PS C:\> $zc | Get-Member TypeName : System.__ComObject#{00000172-8804-4ca8-8868-36f59defd14d} Name MemberType Definition ---- ---------- ---------- CheckCertificate Method int CheckCertificate (string, int , Variant) CloseKeys Method void CloseKeys () CreateAccessFile Method IZCAccessFile CreateAccessFile (string) CreateZoneScan Method IZCZoneScan CreateZoneScan () FormatMessage Method string FormatMessage ( int ) GetFolderInfo Method void GetFolderInfo (string, Variant, Variant, Variant) GetPolicy Method Variant GetPolicy ( int ) GetRunTime Method IZCRunTime GetRunTime ( int ) GroupZone Method void GroupZone (string, bool ) Init Method void Init ( int ) LoadAccessFile Method IZCAccessFile LoadAccessFile (string) LoadPersonalAccessFile Method IZCPersonalAccessFile LoadPersonalAccessFile () LoadPersonalKey Method IZCPersonalKey LoadPersonalKey () LoadZone Method IZCZone LoadZone (string) LoadZoneMap Method IZCZoneMap LoadZoneMap ( int ) SetUIParams Method void SetUIParams ( int ) UngroupZone Method void UngroupZone (string)
En réfléchissant 3,42 secondes, on se dit que ce serait pas mal de faire un appel à la méthode `init` pour charger tout ce qui va bien puis un GetRunTime pour récupérer “quoi qui tourne” sur le poste, donc :
PS C:\> $zc.Init(0)
Puis
PS C:\> $version = $zc.GetRunTime(-1) #Je vous passe l’explication du 0 et du -1, mais en gros c'est via de la documentation pour obtenir les infos pour la session en cours.)
Donc là, j’ai mes numéros de version :
PS C:\> $version MajorVersion MinorVersion BuildVersion Version ------------ ------------ ------------ ------- 5 0 1038 5.0.1038
On peut même taper directement dans les attributs de l’objet version :
PS C:\> $version.BuildVersion 1038
Je vous laisse explorer les classes qui vous intéressent par vous-même.
Bon, c’est bien et pour les conteneurs Zed! ?
PS C:\> $zed = New-Object -ComObject ZEDX.ZedContainer PS C:\> $zed | get-Member TypeName : System.__ ComObject #{000000f0-8804-4ca8-8868-36f59defd14d} Name MemberType Definition ---- ---------- ---------- AddAccessCertificate Method string AddAccessCertificate (string) AddAccessPassword Method string AddAccessPassword (string, string) AddFile Method void AddFile (string, string, bool ) CloseContainer Method void CloseContainer () CreateContainer Method void CreateContainer (string, bool ) CreateFolder Method void CreateFolder (string) DeleteFile Method void DeleteFile (string) ExtractFile Method void ExtractFile (string, string, bool ) FindClose Method void FindClose ( int ) FindFirst Method string FindFirst (string, int , int ) FindNext Method string FindNext ( int , int ) FormatMessage Method string FormatMessage ( int ) GetAccess Method string GetAccess ( int ) GetAccessInfo Method void GetAccessInfo (string, int , string, string, string) GetFileAttributes Method int GetFileAttributes (string) GetFileAttributesEx Method void GetFileAttributesEx (string, int , Date, Date, Date, int64) GetNbAccesses Method int GetNbAccesses () MoveFile Method void MoveFile (string, string, bool ) OpenContainer Method void OpenContainer (string, uint , string, string) RemoveAccess Method void RemoveAccess (string) SetProgressObject Method void SetProgressObject ( IZedContainerProgress )
La fonction CreateContainer à l’air bien pour commencer :
PS C:\> $zed.CreateContainer('C:\TestTpPowershell.zed',$True) # Oui je spécifie le chemin complet, moi,j'aime bien quand tout est bien carré et parallèle moi... PS C:\> Get-Item 'C:\TestTpPowershell.zed' Répertoire : C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 21/04/2015 13:07 20480 TestTpPowershell.zed
Et si on veut ajouter un accès par mot de passe :
PS C:\> $zed.AddAccessPassword('moa','1_MotsDeP@sseEnCart0n') {CC75D63A-D939-360B-XXX-CBE717865666}
Avant de finir, il faut fermer le conteneur :
PS C:\> $zed.CloseContainer()
Et si on regarde dans le conteneur, on trouve bien un accès à ‘moa’ par mot de passe (et vous allez devoir me faire confiance sur ce sujet vu que vous n’avez pas le produit probablement).
Bon voilà c’est tout pour aujourd’hui. N’hésitez pas à essayer sur d’autres objets COM lié à vos solutions perso/pro car beaucoup de produits implémentent ce genre d’objet.