Découvrez le Guide de la migration vers EBICS publié par System i NEWS
iTPro.fr > Windows Server > Administration

La commande PowerShell Compare-Object

Jeffery Hicks | Mise en ligne : 07-11-2011

La commande PowerShell Compare-Object

Quelques astuces fort utiles, mais parfois ignorées de la cmdlet Compare-Object.


Ce dossier est issu de notre publication IT Pro Magazine (10/10). Pour consulter les schémas et illustrations associés, rendez-vous dans le club abonnés.

Tags : Administrateur / Développement / Microsoft / PowerShell / Windows Server

Dossiers Windows Server


Ce n’est pas la première fois que nous abordons la cmdlet PowerShell Compare-Object. Celle-ci comporte un alias diff et s’avère très utile pour comparer deux types d’objets différents (que demander de plus ?). En général, vous voulez comparer une certaine propriété. Voici un exemple standard permettant d’illustrer ce propos :

PS C:\> $now=get-process
PS C:\> calc
PS C:\> $after=get-process
PS C:\> diff $now $after -Property name
name SideIndicator
---- -------------
calc =>
PS C:\>

L’objet $now est un cliché (snapshot) de tous les processus en cours d’exécution. Je démarre ensuite Calculator et je prends un autre cliché. Grâce à Compare- Object, je peux identifier le processus dont l’exécution a été lancée dans l’intervalle. SideIndicator affiche cette information. Mais, qu’en est-il maintenant si je souhaite voir plus de choses sur le processus, peut-être parce que je souhaite arrêter tous les processus qui viennent d’être lancés ? J’ai besoin de dire à Compare-Object de passer l’intégralité de l’objet via le pipeline :

PS C:\> diff $now $after -Property name -passthru
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
87 7 5496 11480 71 1.26 1724 calc

Si je réexécute la cmdlet et que je transmets le résultat vers Get-Member, je peux vérifier que j’obtiens en fait un objet Process. Cela me permet alors d’exécuter ce qui suit :

PS C:\> diff $now $after -Property name -passthru | kill

Voyons quelques autres manières d’employer Compare-Object. J’ai deux dossiers que je souhaite, en quelque sorte, maintenir synchronisés. Les fichiers présents dans folderA doivent aussi figurer dans folderB. Le fait que folderB comporte des fichiers supplémentaires ne pose pas de problèmes, tant qu’il conserve également une copie complète du contenu de folderA. Maintenant, je peux voir s’il y a un écart entre les deux :

PS C:\> $a=dir f:\folderA
PS C:\> $b=dir f:\folderB
PS C:\> $a.count
77
PS C:\> $b.count
76
PS C:\>

Pour les besoins de mon exemple, je vais seulement effectuer la synchronisation sur le nom du fichier :

PS C:\> diff $a $b -property Name
name SideIndicator
---- -------------
a.csv =>
b.csv =>
d.csv =>
w.txt <=
w1.txt <=
winrminfo.txt <=
wmidata.txt <=

Je m’intéresse uniquement aux fichiers présents dans $a mais pas dans $b. Je peux essayer de filtrer la sortie sur SideIndicator, mais je vais passer les objets et regarder uniquement les fichiers présents dans folderA :

PS C:\> diff $a $b -property Name -pass | Where
{$_.DirectoryName -eq «F:\folderA»}
Directory: F:\folderA
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 5/14/2009 4:38 PM 863 w.txt
-a--- 5/14/2009 4:42 PM 266 w1.txt
-a--- 3/3/2009 12:41 PM 3538 winrminfo.txt
-a--- 3/21/2009 4:47 PM 96786 wmidata.txt

Ces fichiers doivent être ajoutés à folderB :

PS C:\> diff $a $b -property Name -pass | Where {$_.
DirectoryName -eq «F:\folderA»} | copy -dest f:\folderB
-passthru

Directory: F:\folderB

Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 5/14/2009 4:38 PM 863 w.txt
-a--- 5/14/2009 4:42 PM 266 w1.txt
-a--- 3/3/2009 12:41 PM 63538 winrminfo.txt
-a--- 3/21/2009 4:47 PM 96786 wmidata.txt

Je transfère simplement les objets de type fichier à Copy-Object et j’utilise son paramètre -passthru afin de voir les résultats. Désormais, tous les fichiers dans folderA figurent aussi dans folderB. Il ne faudrait pas beaucoup plus de temps pour effectuer la synchronisation dans les deux sens.
 

Collaboration & productivité d’entreprise nouvelle génération

sharepoint

Découvrez comment prendre des décisions fondées sur des données métier consolidées, déployer des applications métier sécurisées et renforcer la collaboration dans et hors de votre entreprise.

Bénéficiez de ressources exclusives pour la collaboration et la productivité d’entreprise

Les dernières ressources publiées sur la chaîne Windows Server

Webcast exclusif : Comment répondre aux nouveaux défis réseaux ?

dell

Vos infrastructures réseaux ne répondent plus aux nouvelles exigences de services IT, Dell & IT Pro Magazine vous invitent Mardi 28 Février 2012 à un webcast exclusif pour répondre aux nouveaux défis réseaux. Découvrez les meilleures solutions pour déployer des services réseaux de nouvelle génération.

Participez et gagnez un clé USB 8GB !

Les dernières ressources publiées sur iTPro.fr
dell

Protéger Hyper-V !

Découvrez comment assurer la meilleure protection des services virtualisés sous Hyper-V...

Téléchargez le guide dédié

Télécharger un numéro gratuit IT Pro Magazine est le 1er mensuel dédié à la gestion et l'optimisation des environnements Windows Server, des infrastructures virtualisées et des solutions Cloud Computing. Télécharger un numéro Gratuit
e Newsletters Voir un exemple