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 usando 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. Anche se alcuni algoritmi hash, tra cui MD5 e SHA1, non sono più considerati sicuri da attacchi, l'obiettivo di un algoritmo hash sicuro è quello di rendere impossibile modificare il contenuto di un file, per errore o da tentativi dannosi o non autorizzati, 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 usa l'algoritmo SHA256, anche se è possibile usare qualsiasi algoritmo hash supportato dal sistema operativo di destinazione.
Esempio
Esempio 1: Calcolare il valore hash per un file
In questo esempio viene usato 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.
Get-FileHash $PSHOME\powershell.exe | Format-List
Algorithm : SHA256
Hash : 908B64B1971A979C7E3E8CE4621945CBA84854CB98D76367B791A6E22B5F6D53
Path : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Esempio 2: Calcolare il valore hash per un file ISO
Questo esempio usa il cmdlet Get-FileHash e l'algoritmo SHA384 per calcolare il valore hash per un file ISO scaricato da Internet da un amministratore. L'output viene inviato tramite pipe al cmdlet Format-List per formattare l'output come elenco.
Get-FileHash C:\Users\user1\Downloads\Contoso8_1_ENT.iso -Algorithm SHA384 | Format-List
Algorithm : SHA384
Hash : 20AB1C2EE19FC96A7C66E33917D191A24E3CE9DAC99DB7C786ACCE31E559144FEAFC695C58E508E2EBBC9D3C96F21FA3
Path : C:\Users\user1\Downloads\Contoso8_1_ENT.iso
Esempio 3: Calcolare il valore hash di un flusso
Per questo esempio si usa System.Net.WebClient per scaricare un pacchetto dalla pagina di versione di PowerShell . La pagina della versione documenta anche l'hash SHA256 di ogni file di pacchetto. È possibile confrontare il valore hash pubblicato con quello calcolato con Get-FileHash.
$wc = [System.Net.WebClient]::new()
$pkgurl = 'https://github.com/PowerShell/PowerShell/releases/download/v6.2.4/powershell_6.2.4-1.debian.9_amd64.deb'
$publishedHash = '8E28E54D601F0751922DE24632C1E716B4684876255CF82304A9B19E89A9CCAC'
$FileHash = Get-FileHash -InputStream ($wc.OpenRead($pkgurl))
$FileHash.Hash -eq $publishedHash
True
Esempio 4: Calcolare l'hash di una stringa
PowerShell non fornisce un cmdlet per calcolare l'hash di una stringa. Tuttavia, è possibile scrivere una stringa in un flusso e usare il parametro InputStream di Get-FileHash per ottenere il valore hash.
$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.Write("Hello world")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream | Select-Object Hash
Hash
----
64EC88CA00B268E5BA1A35678A1B5316D212F4F366B2477232534A8AECA37F3C
Parametri
-Algorithm
Specifica la funzione hash crittografica da usare per calcolare il valore hash del contenuto del file o del flusso specificato. Una funzione hash crittografica ha la proprietà che è infeasible per trovare due file diversi con lo stesso valore 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: | SHA256 |
| 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 inviare tramite pipe una stringa contenente un percorso a un file a questo cmdlet.
Output
Microsoft.PowerShell.Utility.FileHash
Questo cmdlet restituisce un oggetto che rappresenta il percorso del file specificato, il valore dell'hash calcolato e l'algoritmo utilizzato per calcolare l'hash.