ArchivematicaChecksum.psm1
using namespace System; . $PSScriptRoot\FileSystem.ps1 . $PSScriptRoot\Exclude.ps1 . $PSScriptRoot\Checksum.ps1 Function Get-ArchivematicaChecksumFile { <# .SYNOPSIS Generate an Archivematica checksum file for a folder full of files. .DESCRIPTION Generates a checksum file for a folder, and places the file into a metadata folder in the folder you're targeting. Checksums can be created with MD5, SHA1, SHA256, or SHA512. Checksums can be created for a nested directory structure, by passing the -Recurse parameter. By default, excludes common junk files like Thumbs.db and .DS_Store. You may override this behaviour with the -Exclude parameter. .PARAMETER Algorithm Choose which algorithm to generate checksums with. May be MD5, SHA1, SHA256, or SHA512. .PARAMETER Folder Choose which folder to target to generate checksums for. .PARAMETER Recurse Descend into sub directories and generate checksums for all files in all directories below the targeted directory. .PARAMETER Exclude Array of files to exclude from checksum generation. Appends to the default list of files to exclude like Thumbs.db and .DS_Store. To clear default exclude files, pass -ClearDefaultExclude .PARAMETER ClearDefaultExclude Clear the list of commonly excluded files. They are: Thumbs.db, .DS_Store, .Spotlight-V100, .Trashes .EXAMPLE Generate MD5 checksum file for C:\Users\you\transfer, ignoring any text files: PS> Get-ArchivematicaChecksumFile -Folder C:\Users\you\transfer -Algorithm MD5 -Exclude *.txt .EXAMPLE Generate SHA512 checksum file for the current folder and all files in all subfolders: PS> Get-ArchivematicaChecksumFile -Folder . -Algorithm SHA512 -Recurse .EXAMPLE Generate SHA256 checksum file for .\transfers\2020_transfer\, exclude jpgs, tifs, and pngs. Include the normally excluded files like Thumbs.db. Generate checksums for every file in every subfolder (minus the excluded images): PS> Get-ArchivematicaChecksumFile -Folder .\transfers\2020_transfer\ -Algorithm SHA256 -Exclude *.jpg, *.tif, *.png -ClearDefaultExclude -Recurse #> [CmdletBinding()] Param( [Parameter(Position=1, Mandatory=$True)] [ValidateScript({ If (Test-Path $_ -PathType Container -ErrorAction SilentlyContinue) { $True } Else { Throw "$_ does not exist or is not a folder." }})] [String] $Folder, [Parameter(Position=2, Mandatory=$True)][ValidateSet('MD5', 'SHA1', 'SHA256', 'SHA512')][String] $Algorithm, [Switch] $Recurse, [String[]] $Exclude, [Switch] $ClearDefaultExclude, [Switch] $Force, [Switch] $WhatIf ) If (-Not $Exclude) { $Exclude = @() } $ChecksumFile = Get-ChecksumFilePath $Folder $Algorithm $Exclude += (Split-Path $ChecksumFile -Leaf) $ExcludePatterns = Get-ExcludePatterns $Exclude $ClearDefaultExclude If ($Recurse) { $FilesToChecksum = Get-Files -Folder $Folder -ExcludePatterns $ExcludePatterns -Recurse } Else { $FilesToChecksum = Get-Files -Folder $Folder -ExcludePatterns $ExcludePatterns } If (-Not $FilesToChecksum) { Write-Host 'No files found to process!' return } If (-Not (FileOkayToCreateOrOverwrite $ChecksumFile $Force)) { return } $Checksums = Get-ChecksumsForFiles $Folder $FilesToChecksum $Algorithm # Getting checksums may take a long time. Maybe the file was created in the meantime by a # separate process or user, so check again. If (-Not (FileOkayToCreateOrOverwrite $ChecksumFile $Force)) { return } If ($WhatIf) { CreateOrOverwriteFile $ChecksumFile -WhatIf Write-ChecksumsToFile $ChecksumFile $Checksums -WhatIf } Else { CreateOrOverwriteFile $ChecksumFile Write-ChecksumsToFile $ChecksumFile $Checksums } } Export-ModuleMember -Function 'Get-ArchivematicaChecksumFile' |