דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. איך להשתמש ב Compare-Object Powershall כאשר אחד מהפרמטרים הוא null

איך להשתמש ב Compare-Object Powershall כאשר אחד מהפרמטרים הוא null

מתוזמן נעוץ נעול הועבר תכנות
7 פוסטים 2 כותבים 151 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • אורייא מנותק
    אורייא מנותק
    אוריי
    כתב ב נערך לאחרונה על ידי
    #1

    אני משתמש בקוד הבא

    $folder1Items = Get-ChildItem $folder1 -Recurse | Get-FileHash -Algorithm MD5
    $folder2Items  = Get-ChildItem $folder2 -Recurse | Get-FileHash -Algorithm MD5      
    
    $changes = Compare-Object $folder1Items $folder2Items -Property Name, Path -IncludeEqual
    

    אבל אם 1 מהפרמטרים הוא null הוא מחזיר שגיאה של

    Compare-Object : Cannot bind argument to parameter 'DifferenceObject' because it is null.
    At line:22 char:41
    + $changes = Compare-Object $folder1Items $folder2Items -Property Name, ...
    +                                         ~~~~~~~~~~~~~
        + CategoryInfo          : InvalidData: (:) [Compare-Object], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.CompareObje 
       ctCommand
    

    כלומר אם אחד מהפרמטרים לא מכיל שום קובץ אני מקבל את השגיאה הנ"ל.
    ברצוני שימשיך להשוות גם מול 0 קבצים כלומר שהתוצאה תהיה שהכל לא תואם.

    ניתן לפנות אלי גם ב al0548446188@gmail.com
    ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

    תגובה 1 תגובה אחרונה
    0
    • yossizY מנותק
      yossizY מנותק
      yossiz
      כתב ב נערך לאחרונה על ידי yossiz
      #2

      @אוריי
      עיין תשובה זו

      ובקיצור:

      function Coalesce($a, $b) { if ($a -ne $null) { $a } else { $b } }
      
      $folder1Items = Get-ChildItem $folder1 -Recurse | Get-FileHash -Algorithm MD5
      $folder2Items  = Get-ChildItem $folder2 -Recurse | Get-FileHash -Algorithm MD5 
      $changes = Compare-Object Coalesce($folder1Items, @()) Coalesce($folder2Items, $()) -Property Name, Path -IncludeEqual
      
      • מ-PowerShell 7 ואילך יש אופרטור ??
        https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_operators?view=powershell-7.3#null-coalescing-operator-

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      אורייא תגובה 1 תגובה אחרונה
      1
      • אורייא מנותק
        אורייא מנותק
        אוריי
        השיב לyossiz ב נערך לאחרונה על ידי
        #3

        @yossiz
        מחזיר שגיאה

        Compare-Object : A positional parameter cannot be found that accepts argument 'Coalesce'.
        At line:5 char:12
        + $changes = Compare-Object Coalesce($folder1Items, @()) Coalesce($fold ...
        +            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            + CategoryInfo          : InvalidArgument: (:) [Compare-Object], ParameterBindingException
            + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.CompareObjectCommand
        

        ניתן לפנות אלי גם ב al0548446188@gmail.com
        ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

        yossizY תגובה 1 תגובה אחרונה
        0
        • yossizY מנותק
          yossizY מנותק
          yossiz
          השיב לאוריי ב נערך לאחרונה על ידי yossiz
          #4

          @אוריי טעות שלי

          התחביר הנכון הוא ככה:

          $changes = Compare-Object (Coalesce $folder1Items @()) (Coalesce $folder2Items  @()) -Property Name,Path -IncludeEqual
          

          אגב, אין מאפיין של Name

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

          אורייא תגובה 1 תגובה אחרונה
          1
          • אורייא מנותק
            אורייא מנותק
            אוריי
            השיב לyossiz ב נערך לאחרונה על ידי
            #5

            @yossiz , זה אינו מחזיר שגיאה.
            אבל הוא לא מזהה לי ==
            ראה את הפלט הבא יש שם משהו מוזר עם הקוד שכתבת (כאשר יש קבצים ב2 התיקיות)

            PS X:\test> function Coalesce($a, $b) { if ($a -ne $null) { $a } else { $b } }
             
            $folder1Items = Get-ChildItem $folder1 -Recurse | Get-FileHash -Algorithm MD5
            $folder2Items  = Get-ChildItem $folder2 -Recurse | Get-FileHash -Algorithm MD5 
            
            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=FB404E76315C54940AC9BE72178803D2; Path=X:\Test\Untitled3.ps1}                           ==           
            @{Algorithm=MD5; Hash=DF19BFB4A1F8829AD055854AD8027FBF; Path=X:\Test\zz.ps1}                                  ==           
            @{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=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 (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=FB404E76315C54940AC9BE72178803D2; Path=X:\Test\Untitled3.ps1}                           <=           
            @{Algorithm=MD5; Hash=DF19BFB4A1F8829AD055854AD8027FBF; Path=X:\Test\zz.ps1}                                  <=           
            @{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=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> 
            

            ניתן לפנות אלי גם ב al0548446188@gmail.com
            ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

            תגובה 1 תגובה אחרונה
            0
            • אורייא מנותק
              אורייא מנותק
              אוריי
              כתב ב נערך לאחרונה על ידי אוריי
              #6

              עכשיו אני שם לב שהשתרבב לך $ במקום @

              ניתן לפנות אלי גם ב al0548446188@gmail.com
              ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

              תגובה 1 תגובה אחרונה
              2
              • אורייא מנותק
                אורייא מנותק
                אוריי
                כתב ב נערך לאחרונה על ידי אוריי
                #7

                @yossiz לאחר בדיקה מחודשת מול תיקייה ריקה (מסתבר שמשום מה בתיקייה הקודמת שבדקתי היא לא הייתה ריקה משום מה)
                השורה הזו עדיין מחזירה שגיאה של null

                $changes = Compare-Object (Coalesce $folder1Items @()) (Coalesce $folder2Items @()) -Property Name,Path -IncludeEqual
                

                לאחר בדיקות הוספתי בערך להחלפה "0"
                כך

                $changes = Compare-Object (Coalesce $folder1Items @("0")) (Coalesce $folder2Items @("0")) -Property Name,Path -IncludeEqual
                

                וזה פתר את הבעיה ואינו מחזיר שגיאה
                אני לא יודע אם זה הפתרון המתאים אבל זה עובד
                אם יש פתרון נכון יותר אשמח לשמוע.

                ניתן לפנות אלי גם ב al0548446188@gmail.com
                ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

                תגובה 1 תגובה אחרונה
                0

                בא תתחבר לדף היומי!
                • התחברות

                • אין לך חשבון עדיין? הרשמה

                • התחברו או הירשמו כדי לחפש.
                • פוסט ראשון
                  פוסט אחרון
                0
                • דף הבית
                • קטגוריות
                • פוסטים אחרונים
                • משתמשים
                • חיפוש
                • חוקי הפורום