Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. PowerShell
  3. Communication avec d'autres applications
Extrait - PowerShell Fonctionnalités avancées (2e édition)
Extraits du livre
PowerShell Fonctionnalités avancées (2e édition)
1 avis
Revenir à la page d'achat du livre

Communication avec d'autres applications

Introduction

Dans un système d’information, on dispose d’un nombre impressionnant d’applications. Avec le temps, les communications entre ces différentes applications se sont améliorées et simplifiées. Ces communications sont établies à travers des interfaces de programmation applicative aussi appelées API (Application Programming Interface).

L’API d’un logiciel offre la possibilité à d’autres applications de consommer ses services et d’interagir avec elle. Une API doit définir un certain nombre de normes et de documentations pour faciliter son utilisation.

On trouve toute sorte de types d’API avec différents standards. La technologie COM (Component Object Model) mise au point par Microsoft fait partie de ces standards. ADSI (Active Directory Service Interfaces), décrite dans le chapitre Manipulation d’annuaires, est une API basée sur COM, de même que WMI (Windows Management Instrumentation). 

Les technologies COM

Historiquement, COM fut introduit dans la seconde version de la technologie OLE (Object Linking and Embedding) en 1993. Le principal atout de COM est la facilité qu’il permet dans la communication de différentes applications. Cette facilité de mise en œuvre est due à la notion d’interface objet introduite par COM. L’interface expose des objets contenant des données de l’application et des méthodes pour agir sur l’application elle-même.

Malgré son âge, et l’arrivée du framework .NET en 2009, COM reste une technologie encore très utilisée.

Manipulation des objets COM

Utiliser des objets COM est assez simple sous PowerShell. Il faut simplement savoir si l’application est bien présente, et où la rechercher. Heureusement, la base de registre dispose de cette information sous le chemin Hkey_Classes_Root\CLSID. Les objets COM sont identifiés de manière unique sous cette arborescence à l’aide des CLSID, codés en hexadécimal. Au premier abord, ceux-ci sont peu exploitables facilement. Mais en réalité, les identifiants disposent pour la plupart d’une entrée nommée ProgID. Il s’agit d’une chaîne de caractères représentant l’objet COM et formatée de la manière suivante : <Programme>.<composant>.<numéro de version>.

1. Recherche d’objets

Rechercher l’application dont on a besoin directement dans l’éditeur de registre n’est bien sûr pas la méthode la plus rentable. C’est comme rechercher une aiguille dans une botte de foin. Pour s’épargner cela, on peut opter pour une simple requête PowerShell.

Exemple

PS > $RegistryPath =  
'REGISTRY::HKEY_Classes_Root\Wow6432Node\clsid\*\progid'  
PS > (gci $RegistryPath).foreach{$_.GetValue('')}  
DAO.DBEngine.36  
DAO.PrivateDBEngine.36  
DAO.TableDef.36  
DAO.Field.36  
DAO.Index.36  
DAO.Group.36  
DAO.User.36  
DAO.QueryDef.36  
DAO.Relation.36  
file  
StaticMetafile  
StaticDib  
clsid  
objref  
ADODB.Command.6.0  
ADODB.Parameter.6.0  
ADODB.Connection.6.0  
ADODB.Recordset.6.0  
ADODB.Error.6.0  
ADODB.ErrorLookup.6.0  
ADODB.Record.6.0  
ADODB.Stream.6.0  
ADOX.Catalog.6.0  
ADOX.Table.6.0  
ADOX.Group.6.0  
ADOX.User.6.0  
ADOX.Column.6.0  
ADOX.Index.6.0  
ADOX.Key.6.0  
MSGraph.Chart.8  
Excel.Sheet.5  
Excel.Chart.5  
Excel.Sheet.8  
Excel.Chart.8  
... 

La sortie est conséquente et il peut être judicieux d’utiliser un filtre pour faire apparaître seulement les éléments qui nous intéressent.

Exemple avec Excel

PS > (gci $RegistryPath).foreach{$_.GetValue('')} |  
               Where-Object...