Certo abbastanza, confrontare file o contenuti di file in Windows è una cosa che hai fatto nel corso degli anni. Ma a un certo punto, non ti stanchi di guardare file e contenuti? Beh, per fortuna per te, puoi confrontare gli oggetti con PowerShell nel modo che desideri con il comando Compare-Object
.
In questo tutorial, imparerai a confrontare gli oggetti con PowerShell, come file o contenuti di file, personalizzando l’output.
Risparmia gli occhi dalla fatica e confronta efficacemente gli oggetti!
Prerequisiti
Questo tutorial sarà una dimostrazione pratica, ma finché hai un PC Windows con PowerShell, sei pronto. La versione di PowerShell 5.1 viene utilizzata in questo tutorial.
Confrontare i Contenuti dei File
Immagina di avere due file diversi con lo stesso contenuto. Come sapresti se entrambi i file mantengono lo stesso contenuto? Eseguire il comando Get-Content
può essere la soluzione. Il comando Get-Content
recupera il contenuto di un file da una posizione specificata.
Apri PowerShell e esegui i comandi seguenti per ottenere il contenuto (Get-Content
) dei file specificati nelle variabili ($file1
e $file2
). Sostituisci il percorso sottostante con il percorso dei tuoi file scelti per il confronto.

Ora, esegui il comando Compare-Object
di seguito per confrontare i contenuti di $file
(-ReferenceObject
) con $file2
(-DifferenceObject
).
Per impostazione predefinita, Compare-Object
non mostra i valori presenti in entrambe le variabili. Come soluzione, aggiungi il parametro -IncludeEqual
per mostrare i valori nell’output.
Dall’output sottostante, il SideIndicator indica se entrambi i file hanno lo stesso contenuto (per riga) o meno:
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). |

Forse preferisci confrontare le stringhe con la sensibilità alle maiuscole e minuscole. In tal caso, aggiungi il parametro -CaseSensitive
poiché il comando Compare-Object
non è sensibile alle maiuscole e minuscole per impostazione predefinita.
Esegui i comandi seguenti per confrontare $file1
con $file2
, sia con che senza sensibilità alle maiuscole e minuscole.
Come puoi vedere di seguito, senza il parametro -CaseSensitive
, il comando Compare-Object
non mostra powershell nell’output.

Confrontare le stringhe funziona anche in modo simile al confronto dei contenuti dei file, dove puoi specificare le stringhe o usare variabili per rappresentare le stringhe da confrontare. Tieni presente che il comando
Compare-Object
confronta le stringhe di origine e non i singoli caratteri.
Confronto delle liste di file da diverse posizioni
Ora che sai come confrontare i contenuti dei file, perché non confrontare file effettivi da posizioni diverse? Confrontare le liste di file è utile quando gestisci due server diversi dove mantieni la stessa cartella per un servizio contenente gli stessi file.
Questa volta, userai il comando Get-ChildItem
per ottenere la lista dei file in una cartella da confrontare con la lista dei file di un’altra cartella.
Esegui i comandi seguenti per ottenere le liste dei file dalle cartelle C:\Temp\Folder1\ e C:\Temp\Folder2 e memorizzare le liste nelle variabili $Folder1List e $Folder2List.
Puoi anche utilizzare il parametro
-Recurse
nel comandoGet-ChildItem
per recuperare in modo ricorsivo un elenco di file nelle sottocartelle.

Confronta gli oggetti con PowerShell per proprietà
Hai appena confrontato file in posizioni diverse, ma potresti voler aggiungere un’altra opzione per confrontare i file per proprietà. E in questa demo, confronti i file per lastaccesstime.
Esegui i seguenti comandi per confrontare i file da cartelle diverse ($Folder1 e $Folder2) per lastaccesstime.

Confronto di Processi e Servizi
Le capacità del comando Compare-Object
non si limitano solo a confrontare stringhe o contenuti nei file. Puoi anche confrontare processi, servizi, e così via.
Forse vuoi catturare i servizi tra due server. In tal caso, puoi memorizzare i servizi in variabili e confrontare i servizi.
Esegui i seguenti comandi per confrontare i servizi tra due server diversi ($server1
e $server2
).

Se preferisci confrontare i processi, i comandi da eseguire sono simili a quelli per confrontare i servizi. Puoi anche confrontare i processi sulla stessa macchina o su due server diversi.
Esegui i seguenti comandi per catturare i processi in esecuzione da due macchine (Jumpbox
e server AD
) in variabili e confrontarli.

Identificare le attività confrontando gli elenchi dei processi
Il cmdlet Compare-Object
è utile anche in alcuni scenari di risoluzione dei problemi. Come? Puoi acquisire i processi in esecuzione correntemente in una variabile e avviare la tua attività. Quindi acquisisci i processi in esecuzione in una nuova variabile e confronta i nuovi processi.
Esegui i comandi seguenti per identificare le attività confrontando due diverse liste di processi acquisiti.

Confrontare gli utenti tra diversi gruppi di Active Directory
Se stai gestendo lo stesso insieme di utenti da diversi gruppi AD, confrontare l’elenco degli utenti con il comando Compare-Object
sarà utile. Così facendo ti permette di tenere sotto controllo se un utente è mancante da uno dei due diversi gruppi AD.
Esegui i comandi seguenti per confrontare gli utenti tra due diversi gruppi AD (staticvmusers
e vdivmusers
).

Conclusione
In questo tutorial, hai imparato a confrontare oggetti con PowerShell in molti modi, dai contenuti dei file agli utenti nei gruppi AD. Hai realizzato che il cmdlet Compare-Object
è una soluzione rapida per confrontare file, servizi, processi e così via.
Hai acquisito le conoscenze di base sull’uso del cmdlet Compare-Object
. Ora, perché non costruire su questa nuova conoscenza imparando potenti confronti di array PowerShell?
Source:
https://adamtheautomator.com/compare-objects-with-powershell/