Vergelijk Objecten met PowerShell (Stapsgewijze Handleiding)

Natuurlijk, het vergelijken van bestanden of bestandsinhoud in Windows is iets wat je al jaren doet. Maar belast het niet je ogen op een gegeven moment om bestanden en inhoud te bekijken? Nou, gelukkig voor jou kun je objecten vergelijken met PowerShell zoals jij dat wilt met het Compare-Object commando.

In deze tutorial leer je objecten vergelijken met PowerShell, zoals bestanden of bestandsinhoud, terwijl je de uitvoer aanpast.

Bespaar je ogen de belasting en vergelijk objecten effectief!

Vereisten

Deze tutorial zal een praktische demonstratie zijn, maar zolang je een Windows PC met PowerShell hebt, ben je klaar om te gaan. PowerShell versie 5.1 wordt gebruikt in deze tutorial.

Bestandsinhoud Vergelijken

Stel je voor dat je twee verschillende bestanden hebt met dezelfde inhoud. Hoe weet je of beide bestanden dezelfde inhoud behouden? Het uitvoeren van het Get-Content commando kan de oplossing zijn. Het Get-Content commando haalt de inhoud van een bestand op vanaf een opgegeven locatie.

Open PowerShell, en voer de onderstaande commando’s uit om de inhoud (Get-Content) van de gespecificeerde bestanden in variabelen ($file1 en $file2) te krijgen. Vervang het pad hieronder door het pad naar uw gekozen bestanden om te vergelijken.

# Pak de inhoud van de tekstbestanden in variabelen
$file1 = Get-Content C:\\Temp\\File1.txt
$file2 = Get-Content C:\\Temp\\File2.txt
Storing Text File Contents to PowerShell Variables

Voer nu het Compare-Object commando hieronder uit om de inhoud van $file (-ReferenceObject) te vergelijken met $file2 (-DifferenceObject).

Standaard laat Compare-Object niet de waarden zien die aanwezig zijn in beide variabelen. Als oplossing voegt u de -IncludeEqual parameter toe om de waarden in de uitvoer te tonen.

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

Uit de onderstaande uitvoer vertelt de SideIndicator of beide bestanden dezelfde inhoud hebben (per regel) of niet:

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

Misschien geeft u er de voorkeur aan om strings met hoofdlettergevoeligheid te vergelijken. Voeg in dat geval de -CaseSensitive parameter toe, aangezien het Compare-Object commando standaard niet hoofdlettergevoelig is.

Voer de onderstaande commando’s uit om $file1 te vergelijken met $file2, zowel met als zonder hoofdlettergevoeligheid.

# Inhoud van bestanden vergelijken met de -CaseSensitive parameter
Compare-Object $file1 $file2 -CaseSensitive
# Inhoud van bestanden vergelijken zonder de -CaseSensitive parameter
Compare-Object $file1 $file2

Zoals je hieronder kunt zien, toont het Compare-Object-commando zonder de -CaseSensitive-parameter niet de powershell in de uitvoer.

Compare Objects wth PowerShell : Comparing File Contents with Case Sensitivity

Het vergelijken van strings werkt op een vergelijkbare manier als het vergelijken van bestandsinhoud, waarbij je ofwel de strings kunt specificeren of variabelen kunt gebruiken om de te vergelijken strings voor te stellen. Houd er rekening mee dat het Compare-Object-commando bronstrings vergelijkt en niet tekens.

Vergelijken van lijsten met bestanden van verschillende locaties

Nu je weet hoe je bestandsinhoud kunt vergelijken, waarom niet daadwerkelijke bestanden vergelijken vanuit verschillende locaties? Het vergelijken van lijsten met bestanden is handig wanneer je twee verschillende servers beheert waar je dezelfde map voor een service met dezelfde bestanden behoudt.

Deze keer gebruik je het Get-ChildItem-commando om de lijst met bestanden in een map op te halen om te vergelijken met de lijst met bestanden van een andere map.

Voer de onderstaande commando’s uit om de lijsten met bestanden op te halen uit de mappen C:\Temp\Folder1\ en C:\Temp\Folder2 en sla de lijsten op in de variabelen $Folder1List en $Folder2List.

# Vang de lijst met bestandsnamen op in variabelen
$Folder1List = Get-ChildItem C:\\Temp\\Folder1\\
$Folder2List = Get-ChildItem C:\\Temp\\Folder2\\
# Vergelijk de lijsten
Compare-Object $Folder1List $Folder2List -IncludeEqual

Je kunt ook de -Recurse-parameter gebruiken in het Get-Childitem-commando om recursief een lijst met bestanden in submappen op te halen.

Comparing Files in Different Folders

Vergelijk objecten met PowerShell op basis van eigenschappen

Je hebt zojuist bestanden op verschillende locaties vergeleken, maar je wilt misschien een andere optie toevoegen om bestanden te vergelijken op basis van eigenschappen. En in deze demo ga je bestanden vergelijken op basis van lastaccesstime.

Voer de volgende commando’s uit om bestanden uit verschillende mappen ($Folder1 en $Folder2) te vergelijken op basis van lastaccesstime.

# Haal lijst van bestanden op uit opgegeven bestanden
$Folder1 = Get-ChildItem C:\\Temp\\Folder1\\ -Recurse
$Folder2 = Get-ChildItem C:\\Temp\\Folder2\\ -Recurse
# Vergelijk bestanden op basis van lasttimeaccess met bestandsnamen
Compare-Object $Folder1 $Folder2 -Property name,lastaccesstime
Listing Compared Files using the lastaccesstime Parameter

Processen en Services Vergelijken

De mogelijkheden van het commando Compare-Object zijn niet beperkt tot het vergelijken van strings of inhoud in bestanden. Je kunt ook processen, services, en dergelijke vergelijken.

Misschien wil je services tussen twee servers vastleggen. Zo ja, dan kun je de services in variabelen opslaan en de services vergelijken.

Voer de volgende commando’s uit om services te vergelijken tussen twee verschillende servers ($server1 en $server2).

# leg de serviceslijst vast in variabelen
$server1 = Get-Service -ComputerName jumpbox
$server2 = Get-Service -ComputerName AD
# vergelijk services op beide servers en sorteer ze op servicenaam
Compare-Object $server1 $server2 -PassThru | sort name| select name,status,machinename
Comparing Services Between Two Servers

Als je processen wilt vergelijken, lijken de commando’s op die voor het vergelijken van services. Je kunt ook processen vergelijken op dezelfde machine of twee verschillende servers.

Voer de onderstaande commando’s uit om lopende processen van twee machines (Jumpbox en AD servers) in variabelen vast te leggen en te vergelijken.

# Processenlijst ophalen van externe servers in PowerShell-variabelen
$server1Process = Get-Process -ComputerName Jumpbox
$server2Process = Get-Process -ComputerName AD
# Vergelijk processen van twee servers en geef procesnamen en de bijbehorende servernaam weer in de uitvoer
Compare-Object $server1Process $server2Process -PassThru | sort name  |select name,machinename,sideindicator
Comparing Processes Between Two Servers

Identificeren van activiteiten door lijsten met processen te vergelijken

De Compare-Object-cmdlet is ook nuttig in bepaalde probleemoplossingsscenario’s. Hoe? Je kunt huidige actieve processen vastleggen in een variabele en je activiteit starten. Vervolgens leg je de actieve processen vast in een nieuwe variabele en vergelijk je de nieuwe processen.

Voer de onderstaande commando’s uit om activiteiten te identificeren door twee verschillende lijsten van vastgelegde processen te vergelijken.

# Leg processen vast voordat je je activiteit start.
$Initial_Process = Get-Process
# Open notepad (je activiteit)
notepad
# Leg processen vast nadat je activiteit is voltooid.
$New_Process = Get-Process
# Vergelijken van initiële en nieuwe processen
Compare-Object $Initial_Process $New_Process -PassThru | select processname,sideindicator
Identifying New Processes on Local PC

Vergelijken van gebruikers tussen verschillende Active Directory-groepen

Als je dezelfde set gebruikers beheert vanuit verschillende AD-groepen, komt het vergelijken van de lijst met gebruikers met het Compare-Object-commando van pas. Hiermee kun je nauwlettend in de gaten houden of een gebruiker ontbreekt in een van de twee verschillende AD-groepen.

Voer de onderstaande commando’s uit om gebruikers te vergelijken tussen twee verschillende AD-groepen (staticvmusers en vdivmusers).

# Importeer de Active Directory-module om de Get-ADGroup- en Get-ADUser-commando's uit te voeren.
Import-Module ActiveDirectory
# Sla de lijst met gebruikers van verschillende AD-groepen op in variabelen.
$FirstGroup = Get-ADGroup staticvmusers -Properties Member |Select-Object -ExpandProperty Member | Get-ADUser
$SecondGroup = Get-ADGroup vdivmusers -Properties Member |Select-Object -ExpandProperty Member | Get-ADUser
# Voer het cmdlet Compare-Object uit om gebruikers in die twee AD-groepen te vergelijken.
Compare-Object ($FirstGroup) ($SecondGroup) -Property 'SamAccountName' -IncludeEqual
Comparing Users in Two AD Groups

Conclusie

In deze zelfstudie heb je geleerd hoe je objecten kunt vergelijken met PowerShell op verschillende manieren, van bestandsinhoud tot gebruikers in AD-groepen. Je hebt gemerkt dat het Compare-Object-cmdlet een snelle oplossing is om bestanden, services, processen, enzovoort te vergelijken.

Je hebt de basisprincipes geleerd van het gebruik van het Compare-Object-cmdlet. Waarom bouw je niet voort op deze nieuwe kennis door krachtige PowerShell-arrays te leren vergelijken?

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