powershellout-gridviewfilehash

Generating hashcodes for specific filetypes only with Powershell


I'm a complete beginner to Powershell and scripting, and have been successfully been using Out-GridView to display some properties of the files I have in my directories using the following:

dir D:\Folder1\$type -Recurse | Select Fullname,Directory,LastWriteTime | out-gridview

where I specifiy the file extension with $type = "*.pdf" for instance.

I would also like to start comparing files using hashcodes so I have tried this command:

ls | Get-Filehash

However, I would like to have the hashcodes in the output window as a seperate column with out-gridview. Is this possible? I've tried

dir D:\Folder1\$type -Recurse | Select Fullname,Directory,LastWriteTime,Filehash | out-gridview

and

dir D:\Folder1\$type -Recurse | Select Fullname,Directory,LastWriteTime | Get-Filehash | out-gridview

Of course neither of these work.

Does anyone have a way of generating hashcodes for a specific file extension only?

Many thanks in advance!


Solution

  • You can do this by using a calculated property with Select-Object:

    Get-ChildItem -Path 'D:\Folder1\$type'-Recurse |
        Select-Object FullName,Directory,LastWriteTime, @{Label='FileHash'; Expression={(Get-Filehash -Path $_.FullName).Hash}} |
            Out-GridView
    

    You should see a new column in the grid view called 'Filehash' that contains the SHA256 hash of the file. You can chage the algorithm (to, say, MD5) using the -Algorithm parameter of Get-FileHash.

    If you're wondering what this is doing, the important parts are:

    @{...} signifies a hashtable. e.g. a set of key-value pairs

    label is the key that defines what your property (column name) will be in the grid view

    expression defines the code snippet ({...}) that calculates the value of this property

    $_ signifies that we are working with the 'current' object (file in this case) passing along the pipeline