new ps script, process directory with filter
This commit is contained in:
		
							parent
							
								
									6a15d54f08
								
							
						
					
					
						commit
						5c6c09b24f
					
				
							
								
								
									
										86
									
								
								sri.ps1
									
									
									
									
									
								
							
							
						
						
									
										86
									
								
								sri.ps1
									
									
									
									
									
								
							| @ -1,48 +1,96 @@ | ||||
| param ( | ||||
|     # Specifies a path to one or more locations. | ||||
|     [Parameter(Mandatory=$true, | ||||
|                HelpMessage="Path to resource for which to generate integrity hash.")] | ||||
|     [Alias("path", "resource")] | ||||
|     # List of files to hash | ||||
|     [Parameter(HelpMessage="Comma-separated list of files to hash.")] | ||||
|     [Alias("file", "list")] | ||||
|     [ValidateNotNullOrEmpty()] | ||||
|     [string[]] | ||||
|     $files, | ||||
| 
 | ||||
|     # Directory of files to hash | ||||
|     [Parameter(HelpMessage="Hash all files within this directory.")] | ||||
|     [ValidateNotNullOrEmpty()] | ||||
|     [string] | ||||
|     $filename, | ||||
|     $directory, | ||||
| 
 | ||||
|     [Parameter(HelpMessage="Desired hash algorithm.")] | ||||
|     # File filter | ||||
|     [Parameter(HelpMessage="Only hash files of this type, relevant only when processing a directory.")] | ||||
|     [Alias("only")] | ||||
|     [ValidateNotNullOrEmpty()] | ||||
|     [string] | ||||
|     $filter = '*', | ||||
| 
 | ||||
|     # Hash algorithm to use | ||||
|     [Parameter(HelpMessage="Hash algorithm to use (SHA256, SHA384, SHA512).")] | ||||
|     [Alias("algorithm")] | ||||
|     [ValidateSet('sha256', 'sha384', 'sha512')] | ||||
|     [string] | ||||
|     $hashAlgo = 'sha384' | ||||
| ) | ||||
| 
 | ||||
| function displayError($returnCode, $eMsg){ | ||||
|     Write-Host "`nERROR: $eMsg" -ForegroundColor Red | ||||
|     Write-Host "Exiting.`n" -ForegroundColor Red | ||||
|     exit $returnCode | ||||
| } | ||||
| 
 | ||||
| function hashSHA($type){ | ||||
|     switch($type){ | ||||
|         'sha256' { return [System.Security.Cryptography.SHA256]::Create() } | ||||
|         'sha384' { return [System.Security.Cryptography.SHA384]::Create() } | ||||
|         'sha512' { return [System.Security.Cryptography.SHA512]::Create() } | ||||
|         default{ | ||||
|             Write-Host "`rUnknown hash algorithm.`r" | ||||
|             exit 2 | ||||
|             displayError 2 'Unknown hash algorithm.' | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| $fileContents = Get-Content $filename -Raw | ||||
| $hashAlgo = $hashAlgo.ToLower() | ||||
| $hashValue = hashSHA $hashAlgo | ||||
| 
 | ||||
| function doHash($file, $hash){ | ||||
|     $fileContents = Get-Content $file -Raw | ||||
|     try { | ||||
|     $hashBytes = $hashValue.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($fileContents)) | ||||
|     $hashBase64 = [System.Convert]::ToBase64String($hashBytes) | ||||
|     Write-Host "`r$hashAlgo-$hashBase64`r" | ||||
|         $hashBytes = $hash.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($fileContents)) | ||||
|         return [System.Convert]::ToBase64String($hashBytes) | ||||
|     } | ||||
|     catch { | ||||
|     Write-Host "There was a problem generating a hash value." | ||||
|     exit 1 | ||||
|         return 1 | ||||
|     } | ||||
| finally { | ||||
|     $hashValue.Dispose() | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| # instantiate hash provider | ||||
| $hashAlgo = $hashAlgo.ToLower() | ||||
| $hash = hashSHA $hashAlgo | ||||
| 
 | ||||
| # process directory, if specified | ||||
| if ($directory){ | ||||
|     # continue only if directory exists, otherwise exit with error | ||||
|     if (Test-Path -Path $directory){ | ||||
|         Write-Host "`nProcessing directory: $directory" -ForegroundColor Cyan | ||||
|         Get-ChildItem -Path $directory -Filter $filter | ForEach-Object({ | ||||
|             $hashValue = doHash $directory\$_ $hash | ||||
|             if ($hashValue -ne 1){ | ||||
|                 Write-Host "$_ --> $hashAlgo-$hashValue" -ForegroundColor Green | ||||
|             } | ||||
|             else { | ||||
|                 Write-Host "$_ --> unable to hash file" -ForegroundColor Red | ||||
|             } | ||||
|         }) | ||||
|     } | ||||
|     else { | ||||
|         displayError 1 "Directory '$directory' does not exist." | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| # process file list, if specified | ||||
| if ($files) { | ||||
|     Write-Host | ||||
|     foreach ($file in $files) { | ||||
|         Write-Host "Processing $file" | ||||
|     } | ||||
|     Write-Host | ||||
| } | ||||
| 
 | ||||
| # clean up and exit | ||||
| $hash.Dispose() | ||||
| exit 0 | ||||
| 
 | ||||
| #EOF | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user