Get-FileHash
Oblicza wartość skrótu dla pliku przy użyciu określonego algorytmu skrótu.
Składnia
Get-FileHash
[-Path] <String[]>
[[-Algorithm] <String>]
[<CommonParameters>]
Get-FileHash
[-LiteralPath] <String[]>
[[-Algorithm] <String>]
[<CommonParameters>]
Get-FileHash
[-InputStream] <Stream>
[[-Algorithm] <String>]
[<CommonParameters>]
Opis
Polecenie Get-FileHash
cmdlet oblicza wartość skrótu dla pliku przy użyciu określonego algorytmu skrótu.
Wartość skrótu to unikatowa wartość odpowiadająca zawartości pliku. Zamiast identyfikować zawartość pliku według nazwy pliku, rozszerzenia lub innego oznaczenia, skrót przypisuje unikatową wartość do zawartości pliku. Nazwy plików i rozszerzenia można zmienić bez zmiany zawartości pliku i bez zmiany wartości skrótu. Podobnie zawartość pliku można zmienić bez zmiany nazwy lub rozszerzenia. Jednak zmiana nawet pojedynczego znaku w zawartości pliku zmienia wartość skrótu pliku.
Celem wartości skrótu jest zapewnienie kryptograficznie bezpiecznego sposobu sprawdzania, czy zawartość pliku nie została zmieniona. Chociaż niektóre algorytmy wyznaczania wartości skrótu, w tym MD5 i SHA1, nie są już uważane za bezpieczne przed atakiem, celem bezpiecznego algorytmu wyznaczania wartości skrótu jest uniemożliwienie zmiany zawartości pliku — przez przypadek lub przez złośliwą lub nieautoryzowaną próbę — i zachowanie tej samej wartości skrótu. Możesz również użyć wartości skrótu, aby określić, czy dwa różne pliki mają dokładnie tę samą zawartość. Jeśli wartości skrótu dwóch plików są identyczne, zawartość plików jest również taka sama.
Domyślnie polecenie Get-FileHash
cmdlet używa algorytmu SHA256, chociaż można użyć dowolnego algorytmu wyznaczania wartości skrótu obsługiwanego przez docelowy system operacyjny.
Przykłady
Przykład 1. Obliczanie wartości skrótu dla pliku
W tym przykładzie użyto Get-FileHash
polecenia cmdlet do obliczenia wartości skrótu /etc/apt/sources.list
dla pliku. Używany algorytm wyznaczania wartości skrótu jest domyślnym algorytmem SHA256. Dane wyjściowe są przesyłane potokiem do Format-List
polecenia cmdlet w celu sformatowania danych wyjściowych jako listy.
Get-FileHash /etc/apt/sources.list | Format-List
Algorithm : SHA256
Hash : 3CBCFDDEC145E3382D592266BE193E5BE53443138EE6AB6CA09FF20DF609E268
Path : /etc/apt/sources.list
Przykład 2. Obliczanie wartości skrótu dla pliku ISO
W tym przykładzie Get-FileHash
użyto polecenia cmdlet i algorytmu SHA384 do obliczenia wartości skrótu dla pliku ISO pobranego przez administratora z Internetu. Dane wyjściowe są przesyłane potokiem do Format-List
polecenia cmdlet w celu sformatowania danych wyjściowych jako listy.
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
Przykład 3. Obliczanie wartości skrótu strumienia
W tym przykładzie używamy elementu System.Net.WebClient do pobrania pakietu ze strony wydania programu PowerShell. Strona wydania dokumentuje również skrót SHA256 każdego pliku pakietu. Możemy porównać opublikowaną wartość skrótu z wartością obliczaną za pomocą 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
Przykład 4. Obliczanie skrótu ciągu
Program PowerShell nie udostępnia polecenia cmdlet do obliczenia skrótu ciągu. Można jednak napisać ciąg do strumienia i użyć parametru InputStream , Get-FileHash
aby uzyskać wartość skrótu.
$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
Parametry
-Algorithm
Określa funkcję skrótu kryptograficznego, która ma być używana do obliczania wartości skrótu zawartości określonego pliku lub strumienia. Funkcja skrótu kryptograficznego ma właściwość, którą można znaleźć w dwóch różnych plikach o tej samej wartości skrótu. Funkcje skrótu są często używane z podpisami cyfrowymi i integralnością danych. Dopuszczalne wartości tego parametru to:
- SHA1
- SHA256
- SHA384
- SHA512
- MD5
Jeśli nie określono żadnej wartości lub jeśli parametr zostanie pominięty, wartość domyślna to SHA256.
Ze względów bezpieczeństwa, MD5 i SHA1, które nie są już uważane za bezpieczne, powinny być używane tylko do prostej weryfikacji zmian i nie należy ich używać do generowania wartości skrótu dla plików wymagających ochrony przed atakiem lub manipulowaniem.
Typ: | String |
Dopuszczalne wartości: | SHA1, SHA256, SHA384, SHA512, MD5 |
Position: | 1 |
Domyślna wartość: | SHA256 |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-InputStream
Określa strumień wejściowy.
Typ: | Stream |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-LiteralPath
Określa ścieżkę do pliku. W przeciwieństwie do parametru Path wartość parametru LiteralPath jest używana dokładnie tak, jak jest typowana. Znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ścieżkę w pojedynczy cudzysłów. Znaki pojedynczego cudzysłowu instruują program PowerShell, aby nie interpretował znaków jako sekwencji ucieczki.
Typ: | String[] |
Aliasy: | PSPath, LP |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-Path
Określa ścieżkę do co najmniej jednego pliku jako tablicy. Dozwolone są symbole wieloznaczne.
Typ: | String[] |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | True |
Dane wejściowe
Możesz przekazać ciąg zawierający ścieżkę do pliku do tego polecenia cmdlet.
Dane wyjściowe
Microsoft.PowerShell.Utility.FileHash
To polecenie cmdlet zwraca obiekt reprezentujący ścieżkę do określonego pliku, wartość obliczonego skrótu i algorytm używany do obliczenia skrótu.