השווה אובייקטים עם PowerShell (מדריך שלב אחרי שלב)

שם ידי, השוואת קבצים או תוכן קבצים בווינדוס הוא משהו שעשית דרך השנים. אך האם להביט על קבצים ותוכן יכול לגרום לעייפות בעיניים בסוף הדרך? מזל שלך, יש לך את האפשרות להשוות אובייקטים עם PowerShell בדיוק בצורה שאתה רוצה עם פקודת Compare-Object.

במדריך זה, תלמד להשוות אובייקטים עם PowerShell, כמו קבצים או תוכן קבצים, תוך התאמה אישית של הפלט.

שמור על עיניים שלך מהמאמץ והשווה אובייקטים בצורה יעילה!

דרישות מוקדמות

מדובר בהדגמה ידיים, אך כל עוד יש לך מחשב עם Windows ו-PowerShell, אתה בסדר. גרסת PowerShell 5.1 משמשת במדריך זה.

השוואת תוכן קובץ

תתחיל כמו עובד עם שני קבצים שונים עם אותם תוכן. איך תדע אם שני הקבצים שומרים על אותו תוכן? הרצת פקודת Get-Content יכולה להיות הפתרון. פקודת Get-Content מחזירה את התוכן של קובץ ממיקום מסוים.

פתח את PowerShell והרץ את הפקודות הבאות כדי לקבל את התוכן (Get-Content) של הקבצים המסוימים לתוך משתנים ($file1 ו-$file2). החלף את הנתיב למטה עם הנתיב של הקבצים שברצונך להשוות.

# ישוב את התוכן של קבצי הטקסט לתוך משתנים
$file1 = Get-Content C:\\Temp\\File1.txt
$file2 = Get-Content C:\\Temp\\File2.txt
Storing Text File Contents to PowerShell Variables

כעת, הרץ את הפקודה Compare-Object למעלה כדי להשוות את תוכן המשתנה $file (-ReferenceObject) עם $file2 (-DifferenceObject).

באופן ברירת מחדל, Compare-Object אינה מציגה את הערכים הנמצאים בשני המשתנים. כפתרון, הוסף את הפרמטר -IncludeEqual כדי להציג את הערכים בפלט.

Compare-Object -ReferenceObject $file1 -DifferenceObject $file2 -IncludeEqual

מתוך הפלט למעלה, הSideIndicator מספר האם שני הקבצים יש להם את אותו התוכן (לפי שורה) או לא:

SideIndicator Definition
== Indicates the content is present in both files ($file1 and $file2).
=> Indicates the content only exists in the -DifferenceObject file ($file2).
=> Indicates the content only exists in the -ReferenceObject file ($file1).
Comparing File Contents

אולי תעדיף להשוות מחרוזות באופן תלוי-רישיוני. אם זה המקרה, הוסף את הפרמטר -CaseSensitive מאחר והפקודה Compare-Object אינה רגילה לרגילות התיקים ללא רישיון.

הרץ את הפקודות למעלה כדי להשוות את $file1 עם $file2, גם עם וגם בלעדיו של רגילות הרישיון.

# השוואת תוכן הקובץ עם הפרמטר -CaseSensitive
Compare-Object $file1 $file2 -CaseSensitive
# השוואת תוכן הקובץ בלעדי הפרמטר -CaseSensitive
Compare-Object $file1 $file2

כפי שאתה יכול לראות למטה, ללא הפרמטר -CaseSensitive, פקודת Compare-Object אינה מציגה את powershell בפלט.

Compare Objects wth PowerShell : Comparing File Contents with Case Sensitivity

השוואת מחרוזות עובדת באופן דומה להשוואת תוכן קובץ, כאשר תוכל לציין את המחרוזות או להשתמש במשתנים לייצוג המחרוזות להשוואה. שים לב שפקודת Compare-Object משווה בין מחרוזות המקור ולא בין תווים.

השוואת רשימות של קבצים ממקומות שונים

עכשיו שאתה יודע איך להשוות תוכן קבצים, למה לא להשוות קבצים אמיתיים ממיקומים שונים? השוואת רשימות של קבצים מתאימה כאשר אתה ניהול שני שרתים שונים בהם אתה שומר על אותה תיקייה עבור שירות הכולל את אותם קבצים.

הפעם תשתמש בפקודת Get-ChildItem כדי לקבל את רשימת הקבצים בתיקייה להשוואה עם רשימת הקבצים בתיקייה אחרת.

הרץ את הפקודות למטה כדי לקבל את רשימות הקבצים מתיקיות C:\Temp\Folder1\ ו-C:\Temp\Folder2 ולאחסן את הרשימות במשתנים $Folder1List ו-$Folder2List.

# כדי ללכוד את רשימת שמות הקבצים למשתנים
$Folder1List = Get-ChildItem C:\\Temp\\Folder1\\
$Folder2List = Get-ChildItem C:\\Temp\\Folder2\\
# השוואת הרשימות
Compare-Object $Folder1List $Folder2List -IncludeEqual

ניתן גם להשתמש בפרמטר -Recurse בפקודת Get-Childitem כדי לקבל באופן רקורסיבי רשימת קבצים בתת-תיקיות.

Comparing Files in Different Folders

השוואת אובייקטים ב-PowerShell לפי מאפיינים

הרגע השווית קבצים במיקומים שונים, אך ייתכן שתרצה להוסיף אפשרות נוספת להשוואת קבצים לפי מאפיינים. ובהדגמה זו, תשווה קבצים לפי lastaccesstime.

הרץ את הפקודות הבאות להשוואת קבצים מתיקיות שונות ($Folder1 ו-$Folder2) לפי lastaccesstime.

# לאחזר רשימת קבצים מקבצים מסוימים
$Folder1 = Get-ChildItem C:\\Temp\\Folder1\\ -Recurse
$Folder2 = Get-ChildItem C:\\Temp\\Folder2\\ -Recurse
# להשוות קבצים לפי lasttimeaccess עם שמות הקבצים
Compare-Object $Folder1 $Folder2 -Property name,lastaccesstime
Listing Compared Files using the lastaccesstime Parameter

השוואת תהליכים ושירותים

יכולות הפקודה Compare-Object אינן מוגבלות רק להשוואת מחרוזות או תוכן בקבצים. ניתן גם להשוות תהליכים, שירותים וכו'.

אולי תרצה לתפוס שירותים בין שני שרתים. אם כך, תוכל לאחסן את השירותים במשתנים ולהשוות את השירותים.

הרץ את הפקודות הבאות להשוואת שירותים בין שני שרתים שונים ($server1 ו-$server2).

# ללכוד את רשימת השירותים לתוך משתנים
$server1 = Get-Service -ComputerName jumpbox
$server2 = Get-Service -ComputerName AD
# להשוות שירותים בשני השרתים ולמיינם לפי שם השירות
Compare-Object $server1 $server2 -PassThru | sort name| select name,status,machinename
Comparing Services Between Two Servers

אם אתה מעדיף להשוות תהליכים, הפקודות לביצוע דומות להשוואת שירותים. גם ניתן להשוות תהליכים באותו מכונה או בשני שרתים שונים.

הרץ את הפקודות למטה ללכידת תהליכים פועלים משתי מכונות (Jumpbox ושרתי AD) לתוך משתנים ולהשוות אותם.

#  קבלת רשימת תהליכים משרתים רחוקים למשתנים PowerShell
$server1Process = Get-Process -ComputerName Jumpbox
$server2Process = Get-Process -ComputerName AD
# השווה תהליכים משני שרתים וציין את שמות התהליכים ואת שם השרת המתאים בפלט
Compare-Object $server1Process $server2Process -PassThru | sort name  |select name,machinename,sideindicator
Comparing Processes Between Two Servers

זיהוי פעילויות על ידי השוואת רשימות של תהליכים

הפקודה Compare-Object גם מועילה בסצנריו קידום תקלות מסוימים. איך? ניתן ללכוד את התהליכים הפעילים נוכחיים למשתנה ולהתחיל בפעילות שלך. לאחר מכן ניתן ללכוד את התהליכים הפעילים למשתנה חדש ולהשוות ביניהם.

הרץ את הפקודות הבאות כדי לזהות פעילויות על ידי השוואה בין שני רשימות שונות של תהליכים שתופסו.

# תפוס תהליכים לפני התחלת הפעילות שלך.
$Initial_Process = Get-Process
# פתח פתקודן (הפעילות שלך)
notepad
# תפוס את התהליכים לאחר שהפעילות שלך הושלמה.
$New_Process = Get-Process
# השוואה בין התהליכים הראשוניים והחדשים
Compare-Object $Initial_Process $New_Process -PassThru | select processname,sideindicator
Identifying New Processes on Local PC

השוואת משתמשים בין קבוצות שונות של פעילות כוללת ב-Active Directory

אם אתה מנהל את אותו קבוצת משתמשים מקבוצות AD שונות, השוואת רשימת המשתמשים עם הפקודה Compare-Object תהיה שימושית. באמצעות זאת ניתן לשמור על צפייה מקרוב אם משתמש חסר מאחת משתי קבוצות ה-AD השונות.

הרץ את הפקודות הבאות כדי להשוות משתמשים בין שתי קבוצות שונות ב-AD (staticvmusers ו־vdivmusers).

# יבוא מודול Active Directory כדי להריץ את הפקודות Get-ADGroup ו- Get-ADUser.
Import-Module ActiveDirectory
# אחסון רשימת משתמשים מקבוצות AD שונות במשתנים.
$FirstGroup = Get-ADGroup staticvmusers -Properties Member |Select-Object -ExpandProperty Member | Get-ADUser
$SecondGroup = Get-ADGroup vdivmusers -Properties Member |Select-Object -ExpandProperty Member | Get-ADUser
# הרץ את הפקודה compare-object כדי להשוות משתמשים בשתי קבוצות AD אלו.
Compare-Object ($FirstGroup) ($SecondGroup) -Property 'SamAccountName' -IncludeEqual
Comparing Users in Two AD Groups

מסקנה

במדריך זה, למדת קטעים על איך להשוות עצות עם PowerShell בדרכים רבות, מתוכן קבצי תוכן למשתמשים בקבוצות AD. הבנת כי פקודת ה- Compare-Object היא פתרון מהיר להשוואת קבצים, שירותים, תהליכים וכו '.

רכשת את הידע הבסיסי בשימוש בפקודת ה- Compare-Object. עכשיו, למה לא לבנות על הידע החדש שנמצא לך על ידי ללמוד מערכים של ערכי PowerShell חזקים?

Source:
https://adamtheautomator.com/compare-objects-with-powershell/