Backup-NAVDatabase.ps1
function Backup-NAVDatabase { [CmdletBinding()] param ( [Parameter(Mandatory=$True, ValueFromPipelineByPropertyname=$true)] [System.String] $ServerInstance, [Parameter(Mandatory=$false)] [int] $TimeOut=0 ) begin { $null = Import-Module 'sqlps' -DisableNameChecking -ErrorAction Stop } Process { $ServerInstanceObject = Get-NAVServerInstance3 -ServerInstance $ServerInstance -ErrorAction Stop if ([string]::isnullorempty($ServerInstanceObject.DatabaseInstance)){ $DatabaseInstance = 'MSSQLSERVER' } else { $DatabaseInstance = $ServerInstanceObject.DatabaseInstance } try{ $BaseReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $ServerInstanceObject.DatabaseServer) $RegKey = $BaseReg.OpenSubKey('SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL') $SQLinstancename = $RegKey.GetValue($DatabaseInstance) $RegKey = $BaseReg.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server\\$SQLInstancename\\MSSQLServer") $Backuplocation = $RegKey.GetValue('BackupDirectory') } catch { #Try Local (probably Docker) $SQLInstanceName = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL').$DatabaseInstance $Backuplocation = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$SQLInstanceName\MSSQLSERVER").BackupDirectory } $BackupFile = "$ServerInstance.bak" $BackupFileFullPath = Join-Path $Backuplocation $BackupFile $SQLString = "BACKUP DATABASE [$($ServerInstanceObject.Databasename)] TO DISK = N'$BackupFileFullPath' WITH COPY_ONLY, NOFORMAT, INIT, NAME = N'NAVAPP_QA_MT-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10" write-Host -ForegroundColor Green "Backup up database $Database with this statement:" write-host -ForegroundColor Gray -Object $SQLString if ($ServerInstanceObject.DatabaseInstance) { Invoke-Sqlcmd -ServerInstance "$($ServerInstanceObject.DatabaseServer)\$($ServerInstanceObject.DatabaseInstance)" -Database 'master' -Query $SQLString -QueryTimeout $TimeOut } else { Invoke-Sqlcmd -ServerInstance "$($ServerInstanceObject.DatabaseServer)" -Database 'master' -Query $SQLString -QueryTimeout $TimeOut } Get-Item $BackupFileFullPath } } |