משהו מוזר ב Compare-Object | Powershall
-
אני עושה השוואת קבצים עם Compare-Object
ומשום מה 2 קבצים Compare-Object מזהה אותם כלא שווים (אבל תכלס הם שווים גם ב MD5 )
הנה הפלטPS X:\test> Compare-Object (Coalesce $folder1Items @()) (Coalesce $folder2Items @()) -IncludeEqual InputObject SideIndicator ----------- ------------- @{Algorithm=MD5; Hash=9B0888BB0C3833206679572E35E7A71D; Path=X:\Test\Backup.ps1} == @{Algorithm=MD5; Hash=F0E6F573D63B1F92D16A55714F49B063; Path=X:\Test\Untitled1.ps1} == @{Algorithm=MD5; Hash=9A7CA20549218DE334060E3B30CAAEAE; Path=X:\Test\Untitled2.ps1} == @{Algorithm=MD5; Hash=369174E7CBE8F581CB9B3599D94B70DD; Path=X:\Test\Untitled3.ps1} == @{Algorithm=MD5; Hash=DF19BFB4A1F8829AD055854AD8027FBF; Path=X:\Test\zz.ps1} == @{Algorithm=MD5; Hash=369174E7CBE8F581CB9B3599D94B70DD; Path=X:\Test\Untitled3 - עותק.txt} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\מצגת של Microsoft PowerPoint חדש.pptx} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\hj;j\jhtsezkty yfhgvf gf;.txt} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\hj;j\בדיקה.docx} == @{Algorithm=MD5; Hash=0627B4727E2BFE1D1CB7F06B82BFCC5C; Path=X:\Test\hj;j\תיקיה חדשה\jhfd.pub} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\uri\שדגכעגכי ד.txt} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\uri\מסמך טקסט חדש.txt} <= @{Algorithm=MD5; Hash=15EDAC198DFF6373F91CA0E59FA054FD; Path=X:\Test\uri\hgfjf\ggg.accdb} <= PS X:\test> Compare-Object $folder1Items $folder2Items -IncludeEqual InputObject SideIndicator ----------- ------------- @{Algorithm=MD5; Hash=9B0888BB0C3833206679572E35E7A71D; Path=X:\Test\Backup.ps1} == @{Algorithm=MD5; Hash=F0E6F573D63B1F92D16A55714F49B063; Path=X:\Test\Untitled1.ps1} == @{Algorithm=MD5; Hash=9A7CA20549218DE334060E3B30CAAEAE; Path=X:\Test\Untitled2.ps1} == @{Algorithm=MD5; Hash=369174E7CBE8F581CB9B3599D94B70DD; Path=X:\Test\Untitled3.ps1} == @{Algorithm=MD5; Hash=DF19BFB4A1F8829AD055854AD8027FBF; Path=X:\Test\zz.ps1} == @{Algorithm=MD5; Hash=369174E7CBE8F581CB9B3599D94B70DD; Path=X:\Test\Untitled3 - עותק.txt} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\מצגת של Microsoft PowerPoint חדש.pptx} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\hj;j\jhtsezkty yfhgvf gf;.txt} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\hj;j\בדיקה.docx} == @{Algorithm=MD5; Hash=0627B4727E2BFE1D1CB7F06B82BFCC5C; Path=X:\Test\hj;j\תיקיה חדשה\jhfd.pub} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\uri\שדגכעגכי ד.txt} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\uri\מסמך טקסט חדש.txt} <= @{Algorithm=MD5; Hash=15EDAC198DFF6373F91CA0E59FA054FD; Path=X:\Test\uri\hgfjf\ggg.accdb} <= PS X:\test> $folder1Items Algorithm Hash Path --------- ---- ---- MD5 9B0888BB0C3833206679572E35E7A71D X:\Test\Backup.ps1 MD5 F0E6F573D63B1F92D16A55714F49B063 X:\Test\Untitled1.ps1 MD5 9A7CA20549218DE334060E3B30CAAEAE X:\Test\Untitled2.ps1 MD5 369174E7CBE8F581CB9B3599D94B70DD X:\Test\Untitled3.ps1 MD5 DF19BFB4A1F8829AD055854AD8027FBF X:\Test\zz.ps1 MD5 369174E7CBE8F581CB9B3599D94B70DD X:\Test\Untitled3 - עותק.txt MD5 D41D8CD98F00B204E9800998ECF8427E X:\Test\מצגת של Microsoft PowerPoint חדש.pptx MD5 D41D8CD98F00B204E9800998ECF8427E X:\Test\hj;j\jhtsezkty yfhgvf gf;.txt MD5 D41D8CD98F00B204E9800998ECF8427E X:\Test\hj;j\בדיקה.docx MD5 0627B4727E2BFE1D1CB7F06B82BFCC5C X:\Test\hj;j\תיקיה חדשה\jhfd.pub MD5 D41D8CD98F00B204E9800998ECF8427E X:\Test\uri\שדגכעגכי ד.txt MD5 D41D8CD98F00B204E9800998ECF8427E X:\Test\uri\מסמך טקסט חדש.txt MD5 15EDAC198DFF6373F91CA0E59FA054FD X:\Test\uri\hgfjf\ggg.accdb PS X:\test> $folder2Items Algorithm Hash Path --------- ---- ---- MD5 9B0888BB0C3833206679572E35E7A71D X:\MyBackup\Test\Backup.ps1 MD5 F0E6F573D63B1F92D16A55714F49B063 X:\MyBackup\Test\Untitled1.ps1 MD5 9A7CA20549218DE334060E3B30CAAEAE X:\MyBackup\Test\Untitled2.ps1 MD5 FB404E76315C54940AC9BE72178803D2 X:\MyBackup\Test\Untitled3.ps1 MD5 DF19BFB4A1F8829AD055854AD8027FBF X:\MyBackup\Test\zz.ps1 MD5 D41D8CD98F00B204E9800998ECF8427E X:\MyBackup\Test\מצגת של Microsoft PowerPoint חדש.pptx MD5 D41D8CD98F00B204E9800998ECF8427E X:\MyBackup\Test\hj;j\jhtsezkty yfhgvf gf;.txt MD5 0627B4727E2BFE1D1CB7F06B82BFCC5C X:\MyBackup\Test\hj;j\תיקיה חדשה\jhfd.pub MD5 D41D8CD98F00B204E9800998ECF8427E X:\MyBackup\Test\uri\שדגכעגכי ד.txt MD5 D41D8CD98F00B204E9800998ECF8427E X:\MyBackup\Test\uri\מסמך טקסט חדש.txt MD5 15EDAC198DFF6373F91CA0E59FA054FD X:\MyBackup\Test\uri\hgfjf\ggg.accdb
יש הסבר למה זה קורה? ומה עושים כדי לפתור את זה?
עריכה
עשיתי עוד בדיקה ופשוט הוספתי קובץ חדש בתיקייה האחרונה
ומשום מה באופן תמוה הוא מחזיר לא תואם ב2 קבצים האחרונים ללא קשר לסוג הקובץ
הנה הפלטPS X:\test> Compare-Object (Coalesce $folder1Items @()) (Coalesce $folder2Items @()) -IncludeEqual InputObject SideIndicator ----------- ------------- @{Algorithm=MD5; Hash=9B0888BB0C3833206679572E35E7A71D; Path=X:\Test\Backup.ps1} == @{Algorithm=MD5; Hash=F0E6F573D63B1F92D16A55714F49B063; Path=X:\Test\Untitled1.ps1} == @{Algorithm=MD5; Hash=9A7CA20549218DE334060E3B30CAAEAE; Path=X:\Test\Untitled2.ps1} == @{Algorithm=MD5; Hash=369174E7CBE8F581CB9B3599D94B70DD; Path=X:\Test\Untitled3.ps1} == @{Algorithm=MD5; Hash=DF19BFB4A1F8829AD055854AD8027FBF; Path=X:\Test\zz.ps1} == @{Algorithm=MD5; Hash=369174E7CBE8F581CB9B3599D94B70DD; Path=X:\Test\Untitled3 - עותק.txt} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\מצגת של Microsoft PowerPoint חדש.pptx} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\hj;j\jhtsezkty yfhgvf gf;.txt} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\hj;j\בדיקה.docx} == @{Algorithm=MD5; Hash=0627B4727E2BFE1D1CB7F06B82BFCC5C; Path=X:\Test\hj;j\תיקיה חדשה\jhfd.pub} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\uri\שדגכעגכי ד.txt} == @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\uri\מסמך טקסט חדש.txt} == @{Algorithm=MD5; Hash=15EDAC198DFF6373F91CA0E59FA054FD; Path=X:\Test\uri\hgfjf\ggg.accdb} <= @{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\uri\hgfjf\testtotext.txt} <= PS X:\test> $folder1Items Algorithm Hash Path --------- ---- ---- MD5 9B0888BB0C3833206679572E35E7A71D X:\Test\Backup.ps1 MD5 F0E6F573D63B1F92D16A55714F49B063 X:\Test\Untitled1.ps1 MD5 9A7CA20549218DE334060E3B30CAAEAE X:\Test\Untitled2.ps1 MD5 369174E7CBE8F581CB9B3599D94B70DD X:\Test\Untitled3.ps1 MD5 DF19BFB4A1F8829AD055854AD8027FBF X:\Test\zz.ps1 MD5 369174E7CBE8F581CB9B3599D94B70DD X:\Test\Untitled3 - עותק.txt MD5 D41D8CD98F00B204E9800998ECF8427E X:\Test\מצגת של Microsoft PowerPoint חדש.pptx MD5 D41D8CD98F00B204E9800998ECF8427E X:\Test\hj;j\jhtsezkty yfhgvf gf;.txt MD5 D41D8CD98F00B204E9800998ECF8427E X:\Test\hj;j\בדיקה.docx MD5 0627B4727E2BFE1D1CB7F06B82BFCC5C X:\Test\hj;j\תיקיה חדשה\jhfd.pub MD5 D41D8CD98F00B204E9800998ECF8427E X:\Test\uri\שדגכעגכי ד.txt MD5 D41D8CD98F00B204E9800998ECF8427E X:\Test\uri\מסמך טקסט חדש.txt MD5 15EDAC198DFF6373F91CA0E59FA054FD X:\Test\uri\hgfjf\ggg.accdb MD5 D41D8CD98F00B204E9800998ECF8427E X:\Test\uri\hgfjf\testtotext.txt PS X:\test> $folder2Items Algorithm Hash Path --------- ---- ---- MD5 9B0888BB0C3833206679572E35E7A71D X:\MyBackup\Test\Backup.ps1 MD5 F0E6F573D63B1F92D16A55714F49B063 X:\MyBackup\Test\Untitled1.ps1 MD5 9A7CA20549218DE334060E3B30CAAEAE X:\MyBackup\Test\Untitled2.ps1 MD5 FB404E76315C54940AC9BE72178803D2 X:\MyBackup\Test\Untitled3.ps1 MD5 DF19BFB4A1F8829AD055854AD8027FBF X:\MyBackup\Test\zz.ps1 MD5 D41D8CD98F00B204E9800998ECF8427E X:\MyBackup\Test\מצגת של Microsoft PowerPoint חדש.pptx MD5 D41D8CD98F00B204E9800998ECF8427E X:\MyBackup\Test\hj;j\jhtsezkty yfhgvf gf;.txt MD5 0627B4727E2BFE1D1CB7F06B82BFCC5C X:\MyBackup\Test\hj;j\תיקיה חדשה\jhfd.pub MD5 D41D8CD98F00B204E9800998ECF8427E X:\MyBackup\Test\uri\שדגכעגכי ד.txt MD5 D41D8CD98F00B204E9800998ECF8427E X:\MyBackup\Test\uri\מסמך טקסט חדש.txt MD5 15EDAC198DFF6373F91CA0E59FA054FD X:\MyBackup\Test\uri\hgfjf\ggg.accdb MD5 D41D8CD98F00B204E9800998ECF8427E X:\MyBackup\Test\uri\hgfjf\testtotext.txt
-
אין לי תשובה לשאלה, זה באמת מוזר, אבל רציתי להעיר שאתה לא משתמש ב-
Compare-Object
בצורה הנכונה, כי כאשר אתה לא מציין לפי איזה מאפיין אתה רוצה להשוות הם משווים לפי התוצאה שלtoString
על האובייקט שזה בד"כ לא רצוי יותר טוב שתשווה לפי MD5סתם משהו מוזר, שאצלי
InputObject
מופיע רק כMicrosoft.PowerShell.Commands.FileHashInfo
וכןtoString
ואצלך זה מראה את השדות -
@yossiz
הבעיה היא שאם אני מחפש לפי MD5 אני לא מקבל את השדות המלאות
פלטPS X:\test> Compare-Object (Coalesce $folder1Items @("0")) (Coalesce $folder2Items @("0")) -Property MD5 -IncludeEqual MD5 SideIndicator --- ------------- == => => => => => => => => => => =>