Выполните командлет Backup-SqlDatabase удаленно

Когда я запускаю следующую строку сценария локально на компьютере с SQL Server, он отлично работает:

Backup-SqlDatabase -ServerInstance $serverName -Database $sqldbname -BackupFile "$($backupFolder)$($dbname)_db_$($addinionToName).bak"

$ serverName содержит краткое имя экземпляра SQL Server. SQL Server 2012, так что эти новые командлеты работают как шарм.

С другой стороны, когда я пытаюсь выполнить резервное копирование БД с компьютера агента TeamCity следующим образом (с помощью командлета Invoke-Command):

function BackupDB([String] $serverName, [String] $sqldbname, [String] $backupFolder, [String] $addinionToName)
{
    Import-Module SQLPS -DisableNameChecking

    Backup-SqlDatabase -ServerInstance $serverName -Database $sqldbname -BackupFile "$($backupFolder)$($dbname)_db_$($addinionToName).bak"
}

Invoke-Command -computername $SQLComputerName -Credential $credentials -ScriptBlock ${function:BackupDB} -ArgumentList $SQLInstanceName, $DatabaseName, $BackupDirectory, $BakId

приводит к ошибке:

Не удалось подключиться к серверу $serverName. + CategoryInfo: NotSpecified: (:) [Backup-SqlDatabase], ConnectionFailureException + FullyQualifiedErrorId: Microsoft.SqlServer.Management.Common.ConnectionFailureException,Microsoft.SqlServer.M anagement.PowerShell.BackupSqlDatabaseCommand

Как правильно выполнить командлет Backup-SqlDatabase удаленно?

1 ответ

Вы можете просто установить три модуля из пакета компонентов SQL, который обеспечивает функциональность SQLPS, и использовать его без Invoke. Получите и установите в следующем порядке:

Microsoft® System CLR Типы для Microsoft® SQL Server® 2012 Microsoft®
Общие объекты управления SQL Server® 2012 Microsoft® Windows
Расширения PowerShell для Microsoft® SQL Server® 2012

отсюда После этого вы можете запускать их локально и обращаться к удаленным SQL-серверам обратно в SQL 2000. Для получения справки прочтите здесь.

Другие вопросы по тегам