powerclimd5hash
PowerCLI - Use MD5 Hashing
This also can be used in regular powershell of course, but this is a short howto on using MD5 hashing in powercli scripts. It is based on this script from WinTellect.
First step is to create the Get-Hash.psm1 file. This can be a regular textfile and should contain the following lines:
<# .SYNOPSIS Gets the hash value .DESCRIPTION Gets the hash value of a file or string It uses System.Security.Cryptography.HashAlgorithm (http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.aspx) and FileStream Class (http://msdn.microsoft.com/en-us/library/system.io.filestream.aspx) Written by Josep Martínez Vilà: http://dbadailystuff.com/2013/03/11/get-hash-a-powershell-hash-function/ Based on: http://blog.brianhartsock.com/2008/12/13/using-powershell-for-md5-checksums/ and some ideas on Microsoft Online Help .PARAMETER File File to get the hash from. .PARAMETER Text Text string to get the hash from .PARAMETER Algorithm Type of hash algorithm to use. Default is SHA1 .EXAMPLE C:\PS> Get-Hash "myFile.txt" Gets the SHA1 from myFile.txt file. When there's no explicit parameter, it uses -File .EXAMPLE Get-Hash -File "C:\temp\myFile.txt" Gets the SHA1 from myFile.txt file .EXAMPLE C:\PS> Get-Hash -Algorithm "MD5" -Text "Hello Wold!" Gets the MD5 from a string .EXAMPLE C:\PS> "Hello Wold!" | Get-Hash We can pass a string throught the pipeline #> function Get-Hash { Param ( [parameter(Mandatory=$true, ValueFromPipeline=$true, ParameterSetName="set1")] [String] $text, [parameter(Position=0, Mandatory=$true, ValueFromPipeline=$false, ParameterSetName="set2")] [String] $file = "", [parameter(Mandatory=$false, ValueFromPipeline=$false)] [ValidateSet("MD5", "SHA", "SHA1", "SHA-256", "SHA-384", "SHA-512")] [String] $algorithm = "SHA1" ) Begin { $hashAlgorithm = [System.Security.Cryptography.HashAlgorithm]::Create($algorithm) } Process { $md5StringBuilder = New-Object System.Text.StringBuilder 50 $ue = New-Object System.Text.UTF8Encoding if ($file){ try { if (!(Test-Path $file)){ throw "Test-Path returned false." } } catch { throw "Get-Hash - File not found or without permisions: [$file]. $_" } try { [System.IO.FileStream]$fileStream = [System.IO.File]::Open($file, [System.IO.FileMode]::Open); $hashAlgorithm.ComputeHash($fileStream) | % { [void] $md5StringBuilder.Append($_.ToString("x2")) } } catch { throw "Get-Hash - Error reading or hashing the file: [$file]" } finally { $fileStream.Close() $fileStream.Dispose() } } else { $hashAlgorithm.ComputeHash($ue.GetBytes($text)) | % { [void] $md5StringBuilder.Append($_.ToString("x2")) } } return $md5StringBuilder.ToString() } }
Now you can use it in your script by first importing the script as a module:
# Add Get-Hash function Import-Module g:\scripts\get-hash.psm1
Now you can create a string, for example based on the VM name with an extra string:
$stringtohash = $vm.toUpper() + "-go4shift" $guestpw = (Get-Hash -Algorithm "MD5" -text $stringtohash)
or like this to add extra parameters after hashing:
$guestpw = (Get-Hash -Algorithm "MD5" -text $stringtohash) + "!!!"
Now you can use the password like you would normally do, for example when using the Copy-VMGuestFile
commandlet:
Copy-VMGuestFile -Source $scriptlocation\$script -Destination $guestdir -Force -VM $vm -LocalToGuest -HostUser root -HostPassword $hostpw -GuestUser Administrator -GuestPassword $guestpw
powerclimd5hash.txt · Last modified: 2021/09/24 00:25 by 127.0.0.1