【问题标题】:Use Backup-SqlDatabase cmdlet with SQL Server Authentication将 Backup-SqlDatabase cmdlet 与 SQL Server 身份验证一起使用
【发布时间】:2013-12-07 19:11:11
【问题描述】:

有没有办法调用 Backup-SqlDatabase cmdlet,但让它使用 SQL Server 凭据连接到 SQL Server 2012?

我目前使用的命令是:

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

但这取决于调用它的用户,默认情况下,使用 Windows 身份验证。

【问题讨论】:

  • 能否在 SQL Server 实例中将脚本作为 Powershell 作业步骤运行?然后它将在代理的帐户下运行,并且身份验证应该不是问题。
  • 附带说明:在备份文件名中使用子表达式是多余的。您可以通过将名称放在大括号中来将变量名称与以下下划线分开:"$backupFolder${dbname}_db_$addinionToName.bak".

标签: powershell sql-server-2012 backup-sqldatabase


【解决方案1】:

backup-sqldatabase cmdlet 支持 Credential 参数。如果您查看 cmdlet 的帮助,甚至还有一个示例(来自 help backup-sqldatabase -full):

 -------------------------- EXAMPLE 4 --------------------------

 C:\PS>Backup-SqlDatabase -ServerInstance Computer\Instance -Database MyDB -Credential (Get-Credential sa)


 Description
 -----------
 This command creates a complete database backup of the database 'MyDB', using the sa SQL Server credential. This co
 mmand will prompt you for a password to complete SQL Server authentication.

【讨论】:

  • 嘿@chad-miller,感谢您的回复。我也需要这个。但是,由于我们的备份过程计划在我们的服务器上每晚运行并且它不是由人完成的,我想知道我们是否可以在脚本中以某种方式包含密码,这样它就不会等待人输入密码...
【解决方案2】:

你可以在运行Backup-SqlDatabase之前connect a virtual drive

$backupFolder = '...'
$additionToName = '...'

$user = 'Username'
$pass = 'Password'
$inst = 'Server\Instance'
$db   = 'master'
$file = "$backupFolder${db}_db_$additionToName.bak"
$root = "SQLSERVER:\SQL\$inst"
$drv  = 'sqldrive'

$cred = New-Object Management.Automation.PSCredential -ArgumentList $user, $pass

New-PSDrive $drv -PSProvider SqlServer -Root $root -Credential $cred -Scope 1
Set-Location $drv
Backup-SqlDatabase -ServerInstance $inst -Database $db -BackupFile $file

或者您可以通过Invoke-SqlCmd 运行SQL statement 来备份数据库:

$backupFolder = '...'
$additionToName = '...'

$user = 'Username'
$pass = ConvertTo-SecureString 'Password' -AsPlainText -Force
$inst = 'Server\Instance'
$db   = 'master'
$file = "$backupFolder${db}_db_$additionToName.bak"

$sql = @"
USE $db;
GO
BACKUP DATABASE $db TO DISK = '$file';
GO
"@

Invoke-Sqlcmd -Query $sql -ServerInstance $inst –Username $user –Password $pass

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2013-02-10
    • 2020-03-12
    相关资源
    最近更新 更多