Skip to content

Instantly share code, notes, and snippets.

@SAPIENTechnologies
Forked from juneb/Test-PSFileHash.ps1
Created December 20, 2016 18:09

Revisions

  1. @juneb juneb revised this gist Dec 20, 2016. 1 changed file with 0 additions and 9 deletions.
    9 changes: 0 additions & 9 deletions Test-PSFileHash.ps1
    Original file line number Diff line number Diff line change
    @@ -40,15 +40,6 @@ Created by: June Blender
    Organization: SAPIEN Technologies, Inc
    Filename: Test-PSFileHash.ps1
    ===========================================================================
    Updated for PowerShell 6.0.0.12
    ===========================================================================
    Created with: SAPIEN Technologies, Inc., PowerShell Studio 2016 v5.2.129
    Created on: 10/24/2016 4:00 PM
    Created by: June Blender
    Organization: SAPIEN Technologies, Inc
    Filename:
    ===========================================================================
    Updated for PowerShell 6.0.0.12
    #>
    [CmdletBinding(DefaultParameterSetName = 'StandardSet')]
    [OutputType([string], ParameterSetName = 'ListOnly')]
  2. @juneb juneb revised this gist Dec 20, 2016. No changes.
  3. @juneb juneb revised this gist Dec 20, 2016. 1 changed file with 13 additions and 3 deletions.
    16 changes: 13 additions & 3 deletions Test-PSFileHash.ps1
    Original file line number Diff line number Diff line change
    @@ -8,9 +8,7 @@ all installation file types, including msi, zip, rpm, deb, pkg, and tar.gz, begi
    release 6.0.0.9.
    To get a list of installer file names, but not test the file hash, use the ListOnly parameter.
    To verify the file hash, enter the path and name of the installer file. Test-PSFileHash returns a Boolean value.
    The file hash of this script file is C39DF66277613501EBCE14BE75133B29531DBEC384A7C6EA5CB9388D72AB0FE8.
    To verify the file hash, enter the path and name of the installer file. Test-PSFileHash returns a Boolean value.
    .PARAMETER Path
    Enter the path and file name of the installer file. If you omit the path, the default is the local directory.
    @@ -69,6 +67,18 @@ param
    )

    $Hashes = [ordered]@{
    'powershell-6.0.0-alpha.14.pkg' = '8fd7abc4ec1a2e4a28543b90a6ee60cd437d4b366b544c39b341a05276eb8ccf'
    'powershell-6.0.0_alpha.14-1.el7.centos.x86_64.rpm' = '88e01ff76d89b8ed16468bbc8ef8fa51ecb4bb341adb878eec139319411e2da0'
    'powershell_6.0.0-alpha.14-1ubuntu1.14.04.1_amd64.deb' = '402c3b6b51210b7e7700260cd5ea37f75ef56b97e4102a7ba62d431cb9879483'
    'powershell_6.0.0-alpha.14-1ubuntu1.16.04.1_amd64.deb' = 'b5a177fda872d5af05b029b7b1071ab37b192323170e10d853ac250e69ff95da'
    'powershell-6.0.0-alpha.14-win10-x64.zip' = '3F5FD873B6E3062D9741B019BC645E6F20999BE66B2FDAA4374495FEBEDD0E03'
    'powershell-6.0.0-alpha.14-win7-x64.zip' = '689E59C8A97A7F6F136104A56BE397D9456D46069AA2C1121BBDA421C14852F8'
    'powershell-6.0.0-alpha.14-win7-x86.zip' = 'DCB821299D8269989D8DCEAB5A45B4E7F959257CA5E640373C0675758C734505'
    'powershell-6.0.0-alpha.14-win81-x64.zip' = 'F5410AA6BAC63C53B5DE5882591F11CED2772DEA5C4AD728C9F9BFDC1A5B4142'
    'PowerShell_6.0.0.14-alpha.14-win10-x64.msi' = '503F3AD52223699765895D3E9615FBD7988194693BCB725BE90C9EF0CD594447'
    'PowerShell_6.0.0.14-alpha.14-win7-x64.msi' = '19A94B7533A5A2292E5E8BFFAB0143AEF31867A531447EAADCAAE714121E541A'
    'PowerShell_6.0.0.14-alpha.14-win7-x86.msi' = '3763A0D4E5859B16495CDA68279614E70A36FF51EA82148F302A54AC0D62E116'
    'PowerShell_6.0.0.14-alpha.14-win81-x64.msi' = '9BAF5D38719C28AE98A76683647AB9161A3A151A399781C050D43942D37C096C'
    'powershell-6.0.0-alpha.13.pkg' = '3bcb890d934a41fab1cb67e40e8ed6d58df902cddb420b4e359aa12ce7c85b01'
    'powershell-6.0.0_alpha.13-1.el7.centos.x86_64.rpm' = '290cac313a08a0118c34bff866f484fb7c7951b95c7461d439918f15663e5d71'
    'powershell_6.0.0-alpha.13-1ubuntu1.14.04.1_amd64.deb' = 'bc0890d45bdacd55ab82bc9b9e5951b22ee7955c67f78da43b862141338e50f7'
  4. @juneb juneb revised this gist Nov 25, 2016. 1 changed file with 12 additions and 0 deletions.
    12 changes: 12 additions & 0 deletions Test-PSFileHash.ps1
    Original file line number Diff line number Diff line change
    @@ -69,6 +69,18 @@ param
    )

    $Hashes = [ordered]@{
    'powershell-6.0.0-alpha.13.pkg' = '3bcb890d934a41fab1cb67e40e8ed6d58df902cddb420b4e359aa12ce7c85b01'
    'powershell-6.0.0_alpha.13-1.el7.centos.x86_64.rpm' = '290cac313a08a0118c34bff866f484fb7c7951b95c7461d439918f15663e5d71'
    'powershell_6.0.0-alpha.13-1ubuntu1.14.04.1_amd64.deb' = 'bc0890d45bdacd55ab82bc9b9e5951b22ee7955c67f78da43b862141338e50f7'
    'powershell_6.0.0-alpha.13-1ubuntu1.16.04.1_amd64.deb' = '719fc2d42486f4fe123156e9b4380929c6dd28cb6ccbf928ba746020c1caea58'
    'PowerShell_6.0.0.13-alpha.13-win10-x64.msi' = '1085c8fae76a9e8984c42a58740b71cf456b48495747453c0ae3a86fb4f1bf2a'
    'PowerShell_6.0.0.13-alpha.13-win7-x64.msi' = '48294e9e68169576d74836621fb68d0e2b615d4d7cd30523924ebdc78ad0cdc1'
    'PowerShell_6.0.0.13-alpha.13-win7-x86.msi' = '95aadecb26ac7d25659cda8960313a25152d9a0d618fae6979922d7ee27b479e'
    'PowerShell_6.0.0.13-alpha.13-win81-x64.msi' = '486c2494e382a70bf4559a4a56655e352dc34abe83fe02646849b43961f745be'
    'powershell-6.0.0-alpha.13-win10-x64.zip' = 'b54afedaec636d44e5c3dea0a8f4ee9d82d9e02eabff3eff1ce3d31010f83860'
    'powershell-6.0.0-alpha.13-win7-x64.zip' = '1a64f92533ef50ee412390c0c88aaa4c0e570fe8be7304596901915863747133'
    'powershell-6.0.0-alpha.13-win7-x86.zip' = '9dc162742e092ff32b23933463349f613c4b9f70055e4f86b7a61592f2829dd8'
    'powershell-6.0.0-alpha.13-win81-x64.zip' = 'a50c5ab93511e42e561cac8446cc30cb1e66aa5001d92e0dedf1983a76b0e03f'
    'powershell-6.0.0-alpha.12.pkg' = 'f990ba234d7fe0e017d53bc77382b28b7811f9e69f31a6ea1c13f97a69b67cdc'
    'powershell-6.0.0_alpha.12-1.el7.centos.x86_64.rpm' = '8104df5fa40e678d691a6a943988f9a5a864be08f60309b451970ae295de87ce'
    'powershell_6.0.0-alpha.12-1ubuntu1.14.04.1_amd64.deb' = '7e032d36b3e1e4d2e99fd0941d71ed3f08435fc0ecaa9f28b35531cff97c25ee'
  5. @juneb juneb revised this gist Nov 16, 2016. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions Test-PSFileHash.ps1
    Original file line number Diff line number Diff line change
    @@ -10,6 +10,8 @@ release 6.0.0.9.
    To get a list of installer file names, but not test the file hash, use the ListOnly parameter.
    To verify the file hash, enter the path and name of the installer file. Test-PSFileHash returns a Boolean value.
    The file hash of this script file is C39DF66277613501EBCE14BE75133B29531DBEC384A7C6EA5CB9388D72AB0FE8.
    .PARAMETER Path
    Enter the path and file name of the installer file. If you omit the path, the default is the local directory.
  6. @juneb juneb revised this gist Nov 7, 2016. 1 changed file with 18 additions and 0 deletions.
    18 changes: 18 additions & 0 deletions Test-PSFileHash.ps1
    Original file line number Diff line number Diff line change
    @@ -35,10 +35,20 @@ True
    ===========================================================================
    Created with: SAPIEN Technologies, Inc., PowerShell Studio 2016 v5.2.129
    Created on: 10/24/2016 4:00 PM
    Updated on: 11/07/2016 9:17 AM
    Created by: June Blender
    Organization: SAPIEN Technologies, Inc
    Filename: Test-PSFileHash.ps1
    ===========================================================================
    Updated for PowerShell 6.0.0.12
    ===========================================================================
    Created with: SAPIEN Technologies, Inc., PowerShell Studio 2016 v5.2.129
    Created on: 10/24/2016 4:00 PM
    Created by: June Blender
    Organization: SAPIEN Technologies, Inc
    Filename:
    ===========================================================================
    Updated for PowerShell 6.0.0.12
    #>
    [CmdletBinding(DefaultParameterSetName = 'StandardSet')]
    [OutputType([string], ParameterSetName = 'ListOnly')]
    @@ -57,6 +67,14 @@ param
    )

    $Hashes = [ordered]@{
    'powershell-6.0.0-alpha.12.pkg' = 'f990ba234d7fe0e017d53bc77382b28b7811f9e69f31a6ea1c13f97a69b67cdc'
    'powershell-6.0.0_alpha.12-1.el7.centos.x86_64.rpm' = '8104df5fa40e678d691a6a943988f9a5a864be08f60309b451970ae295de87ce'
    'powershell_6.0.0-alpha.12-1ubuntu1.14.04.1_amd64.deb' = '7e032d36b3e1e4d2e99fd0941d71ed3f08435fc0ecaa9f28b35531cff97c25ee'
    'powershell_6.0.0-alpha.12-1ubuntu1.16.04.1_amd64.deb' = '20acf9ee52966a5c43a3a7a8371ac3464f3270807835b68e4c5fd42d789449c8'
    'powershell-6.0.0-alpha.12-win10-x64.zip' = '257D5F081C112713DF17F6D0E4CBC794E5099664EDA8DBC543B996915834D5CE'
    'powershell-6.0.0-alpha.12-win81-x64.zip' = '0E91D255D419806A7D8F39D95158AFAD5A131944D137009F29327C32E310B8B0'
    'PowerShell_6.0.0.12-alpha.12-win10-x64.msi' = 'F3C3F3276462588E24BFE197DAA8795140E37557596861126D54462561C98671'
    'PowerShell_6.0.0.12-alpha.12-win81-x64.msi' = '5FEB757346D5ED6FA6786ACDA96D0361663EE4DCBB719D53E6C32835BFD8C670'
    'powershell-6.0.0_alpha.11-1.el7.centos.x86_64.rpm' = '6abd338de3d0d3b4ce060ba71aa9911b679e825f3e2af4a450685b6c45501a4b'
    'powershell_6.0.0-alpha.11-1ubuntu1.14.04.1_amd64.deb' = 'd6a30c17abdb600bd9c7c1dfdc00fe543c2a0572884757149027b8da7e199d25'
    'powershell_6.0.0-alpha.11-1ubuntu1.16.04.1_amd64.deb' = '57269171eeae0c15c09e72b662ea6caeba97e29ba8f22f6df568e18679e40a08'
  7. @juneb juneb revised this gist Oct 27, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Test-PSFileHash.ps1
    Original file line number Diff line number Diff line change
    @@ -121,7 +121,7 @@ function Get-FileHashAlternative
    function Test-GetFileHash
    {
    #Test-Path Function:\Get-FileHash
    [System.Boolean](Get-Command Get-FileHash)
    [System.Boolean](Get-Command Get-FileHash -ErrorAction SilentlyContinue)
    }

    if ($ListOnly)
  8. @juneb juneb revised this gist Oct 26, 2016. 1 changed file with 46 additions and 4 deletions.
    50 changes: 46 additions & 4 deletions Test-PSFileHash.ps1
    Original file line number Diff line number Diff line change
    @@ -84,12 +84,44 @@ $Hashes = [ordered]@{
    'powershell-6.0.0-alpha.9-win81-x64.zip' = '4c801f001ecea8a9bc95b02709144a1b27cb89d77242ae63e152b3e98aea7f86'
    'powershell-6.0.0-alpha.9.pkg' = 'de1f9ea55405efc681d845b1209e13f3057567841541822b60704d383c959574'
    'v6.0.0-alpha.9.tar.gz' = '11ee29caf4c1a362e0e2991da4f4b2b47860cfa4f199b34b643e151a6aeb29c0'
    'v6.0.0-alpha.9.zip' = '60120889bd0eefd81b82a96429854dd35f6c88959773d2a3cbc15fdcaeaa6e74'
    'v6.0.0-alpha.9.zip' = '60120889bd0eefd81b82a96429854dd35f6c88959773d2a3cbc15fdcaeaa6e74'
    }

    if (!(Get-Command Get-FileHash))

    <#
    .SYNOPSIS
    Gets a SHA-256 hash for the path in script $Path parameter.
    .DESCRIPTION
    This is a helper function that substitutes for Get-FilePath in versions
    of Microsoft.PowerShell.Utility that don't yet have the function.
    It doesn't have the features of Get-FileHash, like support for multiple
    algorithms, so use it only when necessary.
    #>
    function Get-FileHashAlternative
    {
    try
    {
    $hasher = [System.Security.Cryptography.SHA256CryptoServiceProvider]::New()
    [System.IO.Stream]$stream = [System.IO.File]::OpenRead($script:Path)
    [Byte[]]$computedHash = $Hasher.ComputeHash($Stream)
    [string]$hash = [BitConverter]::ToString($computedHash) -replace '-', ''
    }
    catch
    {
    Write-Error "Cannot compute file hash for $Path"
    }

    return $hash
    }

    # For mocking
    function Test-GetFileHash
    {
    throw 'Cannot find required Get-FileHash command'
    #Test-Path Function:\Get-FileHash
    [System.Boolean](Get-Command Get-FileHash)
    }

    if ($ListOnly)
    @@ -106,6 +138,16 @@ elseif ($Path)
    else
    {
    $expectedHash = $Hashes[$FileName]
    return (Get-FileHash $Path).Hash -eq $expectedHash

    if (Test-GetFileHash)
    {
    Write-Verbose "Using Get-FileHash function"
    return (Get-FileHash -Path $Path).Hash -eq $expectedHash
    }
    else
    {
    Write-Verbose "Using Get-FileHashAlternative"
    return (Get-FileHashAlternative) -eq $expectedHash
    }
    }
    }
  9. @juneb juneb created this gist Oct 24, 2016.
    111 changes: 111 additions & 0 deletions Test-PSFileHash.ps1
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,111 @@
    <#
    .SYNOPSIS
    Verifies that the file hash of a PowerShell open-source installer matches expected value.
    .DESCRIPTION
    Compares the file hash of a PowerShell open-source installation file to the expected file hash value. Supports
    all installation file types, including msi, zip, rpm, deb, pkg, and tar.gz, beginning with installers for PowerShell
    release 6.0.0.9.
    To get a list of installer file names, but not test the file hash, use the ListOnly parameter.
    To verify the file hash, enter the path and name of the installer file. Test-PSFileHash returns a Boolean value.
    .PARAMETER Path
    Enter the path and file name of the installer file. If you omit the path, the default is the local directory.
    .PARAMETER ListOnly
    Returns only the names of installer files for which this script stores file hashes.
    .OUTPUTS
    string, boolean
    .EXAMPLE
    Test-PSFileHash -ListOnly
    powershell-6.0.0_alpha.11-1.el7.centos.x86_64.rpm
    powershell_6.0.0-alpha.11-1ubuntu1.14.04.1_amd64.deb
    powershell_6.0.0-alpha.11-1ubuntu1.16.04.1_amd64.deb
    powershell-6.0.0-alpha.11.pkg
    ...
    .EXAMPLE
    Test-PSFileHash -Path $HOME\Downloads\PowerShell_6.0.0.11-alpha.11-win10-x64.msi
    True
    .NOTES
    ===========================================================================
    Created with: SAPIEN Technologies, Inc., PowerShell Studio 2016 v5.2.129
    Created on: 10/24/2016 4:00 PM
    Created by: June Blender
    Organization: SAPIEN Technologies, Inc
    Filename:
    ===========================================================================
    #>
    [CmdletBinding(DefaultParameterSetName = 'StandardSet')]
    [OutputType([string], ParameterSetName = 'ListOnly')]
    [OutputType([boolean], ParameterSetName = 'StandardSet')]
    param
    (
    [Parameter(ParameterSetName = 'StandardSet',
    Mandatory = $false)]
    [ValidateScript({Test-Path $_})]
    [string]
    $Path,

    [Parameter(ParameterSetName = 'ListOnly')]
    [switch]
    $ListOnly
    )

    $Hashes = [ordered]@{
    'powershell-6.0.0_alpha.11-1.el7.centos.x86_64.rpm' = '6abd338de3d0d3b4ce060ba71aa9911b679e825f3e2af4a450685b6c45501a4b'
    'powershell_6.0.0-alpha.11-1ubuntu1.14.04.1_amd64.deb' = 'd6a30c17abdb600bd9c7c1dfdc00fe543c2a0572884757149027b8da7e199d25'
    'powershell_6.0.0-alpha.11-1ubuntu1.16.04.1_amd64.deb' = '57269171eeae0c15c09e72b662ea6caeba97e29ba8f22f6df568e18679e40a08'
    'powershell-6.0.0-alpha.11.pkg' = 'fdbc1f8545e89514da5e74e0fb3bdf1df9267ac9c0a020e6a71d3c506ddd6082'
    'powershell-6.0.0-alpha.11-win10-x64.zip' = 'b41504ee24b27fb7bcbc6b495dc380d5a8a61bd0490c5920d79b90dca5dfcde5'
    'powershell-6.0.0-alpha.11-win81-x64.zip' = '85fc7dc42a1ea1957199697644e93e25dd3b2b1ce2b55df3fee96e8ecd10dbf2'
    'PowerShell_6.0.0.11-alpha.11-win10-x64.msi' = 'ad15b3a3d7eccc2c604c51b5b2262e486ee05b55c532b9bf230a8f216db9f2b3'
    'PowerShell_6.0.0.11-alpha.11-win81-x64.msi' = 'afe230d5aaf19d39ecb33a47a80e5a627adae628c9aaad1ceb79b351ad7f5b0d'
    'powershell-6.0.0_alpha.10-1.el7.centos.x86_64.rpm' = 'c2756cdeec2e178aa8f5149fad6c0a115fc1fbf8f04d95d3545b953a3016c34c'
    'powershell_6.0.0-alpha.10-1ubuntu1.14.04.1_amd64.deb' ='41657975e0d16c3699eb0006794ed6ccfd891d0887b36a391df5f9d21a777f95'
    'powershell_6.0.0-alpha.10-1ubuntu1.16.04.1_amd64.deb' = '5a884a3c03ca4c7309231431b663c44fbc9125665560cbeb0ba811e296569b33'
    'powershell-6.0.0-alpha.10.pkg' = '01a2b1ea27b3ee03ebd92e10d5106f0a6df912e1d5586feeb4a8b57faba11c00'
    'PowerShell_6.0.0.10-alpha.10-win10-x64.msi' = 'f669482aeab8de04f4da5ac03a36ce6b4e9f6569401b4cc842a4cd59196756a0'
    'powershell-6.0.0-alpha.10-win10-x64.zip' = 'f394b51b6c8a865c0a1dd0c3645bb354e65339862ea95b60c9ff0226a307ded6'
    'PowerShell_6.0.0.10-alpha.10-win81-x64.msi' = '74b570442072000d40ad945ea8dbe4eec7cef8b0ac9d31e1da0457352b26d03d'
    'powershell-6.0.0-alpha.10-win81-x64.zip' = '2f4fd0b7a7a6447af724acdc0a42acec455e3ae916b7fed4895084faf71ae4aa'
    'v6.0.0-alpha.10.zip' = '6a928f525613fcf394f2a80faef3569b8e49cdcd97ebede50175b229d2a0a6d0'
    'v6.0.0-alpha.10.tar.gz' = '58b4c25333b8291b62b4d5a183725ab7a3ed6030c9f90a13a0c7acebe92b4fe7'
    'powershell_6.0.0-alpha.9-1ubuntu1.14.04.1_amd64.deb' = '275127929dcc36d5ef5c6d4a98784f65e50acae4fa9ce2f92e78220ac32983cc'
    'powershell_6.0.0-alpha.9-1ubuntu1.16.04.1_amd64.deb' = '5d56a0419c23ce879dd4ddaca009f03e888355fccc9eecf882b64d63da5f38e3'
    'PowerShell_6.0.0.9-alpha.9-win10-x64.msi' = '183892e908bac570e2018b5ad3e5eac440a3f38c6bde649719ebfa4b9d25e81d'
    'PowerShell_6.0.0.9-alpha.9-win81-x64.msi' = '83f88b20220a2d5d645cf4e42d866471c936e952bc9875eca7e8f353bb9bad31'
    'powershell-6.0.0_alpha.9-1.el7.centos.x86_64.rpm' = '7e891ca77c19b268d27fbc41f9fae19b21c76b2fcab0937347c8f812483f61e3'
    'powershell-6.0.0-alpha.9-win10-x64.zip' = '35b08c1b3482a5b613926bb8cb51c95591648381431117d74ff20e5d6beaf3d6'
    'powershell-6.0.0-alpha.9-win81-x64.zip' = '4c801f001ecea8a9bc95b02709144a1b27cb89d77242ae63e152b3e98aea7f86'
    'powershell-6.0.0-alpha.9.pkg' = 'de1f9ea55405efc681d845b1209e13f3057567841541822b60704d383c959574'
    'v6.0.0-alpha.9.tar.gz' = '11ee29caf4c1a362e0e2991da4f4b2b47860cfa4f199b34b643e151a6aeb29c0'
    'v6.0.0-alpha.9.zip' = '60120889bd0eefd81b82a96429854dd35f6c88959773d2a3cbc15fdcaeaa6e74'
    }

    if (!(Get-Command Get-FileHash))
    {
    throw 'Cannot find required Get-FileHash command'
    }

    if ($ListOnly)
    {
    return $Hashes.Keys
    }
    elseif ($Path)
    {
    $FileName = (Get-ChildItem $Path).Name
    if ($Hashes.Keys -notcontains $FileName)
    {
    Write-Error 'Cannot find expected hash for this file. To get a list of eligible files, run Test-PSFileHash -ListOnly.'
    }
    else
    {
    $expectedHash = $Hashes[$FileName]
    return (Get-FileHash $Path).Hash -eq $expectedHash
    }
    }