Get-FileHash
Calcola il valore hash per un file usando un algoritmo hash specificato.
Sintassi
Path (Impostazione predefinita)
Get-FileHash
[-Path] <String[]>
[-Algorithm <String>]
[<CommonParameters>]
LiteralPath
Get-FileHash
-LiteralPath <String[]>
[-Algorithm <String>]
[<CommonParameters>]
Stream
Get-FileHash
-InputStream <Stream>
[-Algorithm <String>]
[<CommonParameters>]
Descrizione
Il cmdlet Get-FileHash calcola il valore hash per un file utilizzando un algoritmo hash specificato. Un valore hash è un valore univoco che corrisponde al contenuto del file. Anziché identificare il contenuto di un file in base al nome file, all'estensione o ad altre designazioni, un hash assegna un valore univoco al contenuto di un file. I nomi di file e le estensioni possono essere modificati senza modificare il contenuto del file e senza modificare il valore hash. Analogamente, il contenuto del file può essere modificato senza modificare il nome o l'estensione. Tuttavia, la modifica di un singolo carattere nel contenuto di un file modifica il valore hash del file.
Lo scopo dei valori hash è fornire un modo di sicurezza crittografica per verificare che il contenuto di un file non sia stato modificato. Sebbene alcuni algoritmi hash, tra cui MD5 e SHA1, non siano più considerati sicuri contro gli attacchi, l'obiettivo di un algoritmo hash sicuro è rendere impossibile modificare il contenuto di un file, per errore o per tentativo dannoso o non autorizzato, e mantenere lo stesso valore hash. È anche possibile usare valori hash per determinare se due file diversi hanno esattamente lo stesso contenuto. Se i valori hash di due file sono identici, anche il contenuto dei file è identico.
Per impostazione predefinita, il cmdlet Get-FileHash utilizza l'algoritmo SHA256, anche se è possibile utilizzare qualsiasi algoritmo hash supportato dal sistema operativo di destinazione.
Esempio
Esempio 1: Calcolare il valore hash per un file PowerShell.exe
PS C:\> Get-FileHash $pshome\powershell.exe | Format-List
Algorithm : SHA256
Hash : 6A785ADC0263238DAB3EB37F4C185C8FBA7FEB5D425D034CA9864F1BE1C1B473
Path : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Questo comando utilizza il cmdlet Get-FileHash per calcolare il valore hash per il file Powershell.exe. L'algoritmo hash usato è l'impostazione predefinita SHA256. L'output viene inviato tramite pipe al cmdlet Format-List per formattare l'output come elenco.
Esempio 2: Calcolare il valore hash per un file ISO
PS C:\> Get-FileHash C:\Users\Andris\Downloads\Contoso8_1_ENT.iso -Algorithm SHA384 | Format-List
Algorithm : SHA384
Hash : 20AB1C2EE19FC96A7C66E33917D191A24E3CE9DAC99DB7C786ACCE31E559144FEAFC695C58E508E2EBBC9D3C96F21FA3
Path : C:\Users\Andris\Downloads\Contoso8_1_ENT.iso
Questo comando utilizza il cmdlet Get-FileHash e l'algoritmo SHA384 per calcolare il valore hash per un file ISO scaricato da un amministratore da Internet. L'output viene inviato tramite pipe al cmdlet Format-List per formattare l'output come elenco.
Esempio 3: Calcolare il valore hash di un flusso e confrontare la procedura con l'ottenimento dell'hash direttamente dal file
# Path of Microsoft.PowerShell.Utility.psd1
$file = (Get-Module Microsoft.PowerShell.Utility).Path
$hashFromFile = Get-FileHash -Path $file -Algorithm MD5
# Open $file as a stream
$stream = [System.IO.File]::OpenRead($file)
$hashFromStream = Get-FileHash -InputStream $stream -Algorithm MD5
$stream.Close()
Write-Host '### Hash from File ###' -NoNewline
$hashFromFile | Format-List
Write-Host '### Hash from Stream ###' -NoNewline
$hashFromStream | Format-List
# Check both hashes are the same
if ($hashFromFile.Hash -eq $hashFromStream.Hash) {
Write-Host 'Get-FileHash results are consistent' -ForegroundColor Green
} else {
Write-Host 'Get-FileHash results are inconsistent!!' -ForegroundColor Red
}
### Hash from File ###
Algorithm : MD5
Hash : 593D6592BD9B7F9174711AB136F5E751
Path : C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules\Microsoft.Powe
rShell.Utility\Microsoft.PowerShell.Utility.psd1
### Hash from Stream ###
Algorithm : MD5
Hash : 593D6592BD9B7F9174711AB136F5E751
Path :
Get-FileHash results are consistent
Parametri
-Algorithm
Specifica la funzione hash crittografica da utilizzare per calcolare il valore hash del contenuto del file specificato. Una funzione hash crittografica include la proprietà che non è possibile trovare due input distinti che generano gli stessi valori hash. Le funzioni hash vengono comunemente usate con firme digitali e per l'integrità dei dati. I valori accettabili per questo parametro sono:
- SHA1
- SHA256
- SHA384
- SHA512
- MACTripleDES
- MD5
- RIPEMD160
Se non viene specificato alcun valore o se il parametro viene omesso, il valore predefinito è SHA256.
Per motivi di sicurezza, MD5 e SHA1, che non sono più considerati sicuri, devono essere usati solo per la convalida semplice delle modifiche e non devono essere usati per generare valori hash per i file che richiedono protezione da attacchi o manomissioni.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Valori accettati: | SHA1, SHA256, SHA384, SHA512, MACTripleDES, MD5, RIPEMD160 |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-InputStream
Specifica il flusso di input.
Proprietà dei parametri
| Tipo: | Stream |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
Stream
| Posizione: | Named |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-LiteralPath
Specifica il percorso di un file. A differenza del parametro Path, il valore del parametro LiteralPath viene usato esattamente come viene digitato. Nessun carattere è interpretato come un carattere jolly. Se il percorso include caratteri di escape, racchiudere il percorso tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare i caratteri come sequenze di escape.
Proprietà dei parametri
| Tipo: | String[] |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | PSPath |
Set di parametri
LiteralPath
| Posizione: | Named |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | True |
| Valore dagli argomenti rimanenti: | False |
-Path
Specifica il percorso di uno o più file come matrice. Sono consentiti caratteri jolly.
Proprietà dei parametri
| Tipo: | String[] |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | True |
| DontShow: | False |
Set di parametri
Path
| Posizione: | 0 |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
CommonParameters
Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.
Input
String
È possibile reindirizzare una stringa al cmdlet Get-FileHash che contiene un percorso di uno o più file.
Output
Microsoft.PowerShell.Utility.FileHash
Get-FileHash restituisce un oggetto che rappresenta il percorso del file specificato, il valore dell'hash calcolato e l'algoritmo utilizzato per calcolare l'hash.