Functions/Get-DacPacHash.ps1
function Get-DacPacHash{ [CmdletBinding()] [OutputType([String])] param ( [string]$dacpacPath ) [xml]$dacpacXml = New-Object xml $dacPacZipOriginStream=$null try{ $FulldacPacPath = (Get-Item $dacpacPath).FullName $Zip = [io.compression.zipfile]::OpenRead($FulldacPacPath) } catch [System.IO.FileNotFoundException],[System.Management.Automation.ItemNotFoundException]{ throw "Can't open dacpac file $dacpacPath doesn't exist" } catch { $Ex = New-Object System.Exception ("Error reading dacpac $dacpacPath probably not a valid dacpac",$_.Exception) throw $ex } try{ if (-not ($Zip.Entries.Name -eq "Origin.xml")){ Throw "Can't find the Origin.xml file in the dacpac, would guess this isn't a dacpac" } $dacPacZipOriginStream = $Zip.GetEntry("Origin.xml").Open() $dacpacXml.Load($dacPacZipOriginStream) $checksum = $dacpacXml.DacOrigin.Checksums.Checksum.'#text' } catch{Throw} finally{ if ($null -ne $dacPacZipOriginStream){ $dacPacZipOriginStream.Close() $dacPacZipOriginStream.Dispose() } if ($null -ne $Zip){ $Zip.Dispose()} } return $checksum } |