Public/Backup-SqlDatabasesRemotely.ps1

function Backup-SqlDatabasesRemotely
{
    ##############################################################################
    #.SYNOPSIS
    # Backs up SQL databases remotely (used with Restore-SqlDatabasesRemotely)
    #
    #.DESCRIPTION
    # Use this function to maintain backups of website SQL databases
    # Supports all MS SQL Server versions from MS SQL Server 2008 R2 to MS SQL Server 2014
    # Used with Restore-SqlDatabases
    #
    #.PARAMETER SqlServerName
    # SQL Server name
    #
    #.PARAMETER DatabaseNames
    # Databases which will be backed up (coma separated)
    #
    #.PARAMETER BackupDirectory
    # Backup directory (absolute path)
    #
    #.PARAMETER ComputerName
    # Name of the remote computer you will connect to
    #
    #.PARAMETER Username
    # Username
    #
    #.PARAMETER Password
    # Password
    #
    #.EXAMPLE
       # $sqlServerName = "MS-SQL2008R2"
    # $databases = "sitecore_master, sitecore_web, sitecore_core"
    # $backupDir = "C:\backups"
    # $computerName = "RemoteComputer"
    # $username = "username"
    # $password = "password"
    # Backup-SqlDatabasesRemotely -ComputerName $computerName -Username $username -Password $password -SqlServerName $sqlServerName -DatabaseNames $databases -BackupDirectory $backupDir
    ##############################################################################

    [CmdletBinding()]
    Param
    (
        $VerbosePreference = $PSCmdlet.GetVariableValue('VerbosePreference'),

        [string]$SqlServerName,
        [string]$DatabaseNames,
        [string]$BackupDirectory,
        [string]$ComputerName,
        [string]$Username,
        [string]$Password    
    )

    try
    {
        #region Begin

        $systemLog = NewSystemLog -Name "Backup-SqlDatabasesRemotely"

        WriteLog -Path $systemLog -Message "OUTPUT: Starting remoting, please wait"

        #endregion Begin
        
        #region Process

        $session = NewRemoteSession -ComputerName $ComputerName -Username $Username -Password $Password -LogFile $systemLog
        
        WriteLog -Path $systemLog -Message "OUTPUT: Waiting result from remoting, please wait"

        $capturedResult = Invoke-Command -Session $session -ScriptBlock ${function:BackupSqlDatabasesRemotely} -ArgumentList $SqlServerName, $DatabaseNames, $BackupDirectory, $VerbosePreference
        foreach ($message in $capturedResult) 
        {
            WriteLog -Path $systemLog -Message $message
        }

        #endregion Process
    }
    catch
    {
        RegisterException
    }
}