TP PowerShell – J’ai des objets COM’ dans mon ZoneCentral…

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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.