Comparer des objets dans une instruction if Powershell
Je suis en train de comparer deux fichiers et si le contenu de leur correspond, je le veux à exécuter les tâches dans l'instruction if dans Powershell 4.0
Voici l'essentiel de ce que j'ai:
$old = Get-Content .\Old.txt
$new = Get-Content .\New.txt
if ($old.Equals($new)) {
Write-Host "They are the same"
}
Les fichiers sont les mêmes, mais il renvoie toujours false. Ce que je fais mal? Est-il une meilleure façon d'aller à ce sujet?
Vous devez vous connecter pour publier un commentaire.
Get-Content
retourne un tableau de chaînes de caractères. En PowerShell (et .NET).Equals()
sur un tableau est en fait une référence de comparaison c'est à dire est-ce exactement la même instance de l'objet array. Un moyen facile de faire ce que vous voulez si les fichiers ne sont pas trop grandes, c'est de lire le contenu du fichier comme une chaîne de caractères par exemple:Notez l'utilisation de
-ceq
ici pour faire une comparaison sensible à la casse entre les chaînes.-eq
un casse comparer. Si les fichiers sont volumineux utilisez la nouvelle Get-FileHash de commande par exemple:-Raw
causes de laGet-Content
de commande pour retourner le contenu du fichier sous forme d'une seule chaîne de caractères au lieu d'un tableau de chaînes de caractères correspondant aux lignes dans le fichier.