2012-11-29 164 views
3

我想将局域网上的远程数据库备份到网络共享驱动器。我使用.NET使用相同的方法进行了测试,但它确实有效,但我打算使用此Jenkins持续集成工具的PowerShell脚本。Powershell SQL Server 2008远程数据库备份

$dbserver = "dbserver" 
$location = "\\otherserver\Temp\" 
$user = "user" 
$pwd = "password" 

$timestamp=((get-date).toString("yyyy_MM_dd_hh_mm")) 
$file = $location + "jira_" + $timestamp + ".bak" 

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null 

$connection = New-Object "Microsoft.SqlServer.Management.Common.ServerConnection" 
$connection.ServerInstance =$dbserver 
$connection.LoginSecure = $false 
$connection.Login = $user 
$connection.Password = $pwd 

$server = New-Object "Microsoft.SqlServer.Management.Smo.Server" $connection 
$backup = New-Object "Microsoft.SqlServer.Management.Smo.backup" 
$backup.Action = 'Database' 

$device = New-Object ('Microsoft.SqlServer.Management.Smo.BackupDeviceItem') ($file, 'File') 
#$device.DeviceType = 'File' 
#$device.Name = $file 

$backup.MediaDescription = "Disk" 
$backup.Database= "jira" 
$backup.Devices.Add($device) 
$backup.SqlBackup 

我没有得到任何异常,但也没有得到任何信息可以帮助我排除我的代码。使用所有可用的投掷,赶上,尝试我只能得到。

MemberType   : Method 
OverloadDefinitions : {System.Void SqlBackup(Microsoft.SqlServer.Management.Smo.Server srv)} 
TypeNameOfValue  : System.Management.Automation.PSMethod 
Value    : System.Void SqlBackup(Microsoft.SqlServer.Management.Smo.Server srv) 
Name    : SqlBackup 
IsInstance   : True 
+0

我的主要问题是:执行此脚本的用户/帐户是否可以访问该远程位置?你可以尝试将文件复制到该位置,看看是否有效?另外:如果您在SQL Server计算机上定位本地驱动器,此备份脚本是否工作? –

回答

2

SqlBackup是一种方法。当你调用一个方法,你需要包括打开和关闭括号:

$backup.sqlbackup($server) 

省略括号将输出方法签名,而不是调用方法。省略方法签名不是一个错误,因此没有错误。

+0

谢谢我知道如此多的linux脚本,学习ps有点复杂。 谢谢! – Maverick