No primeiro artigo desta semana vimos como gerar backups do SQL Server por .NET, agora veremos alternativas mais simples para tal, com o PowerShell.
Para o nosso primeiro script de Backup com PowerShell, precisaremos referenciar os assemblies do SMO, e criar um código semelhante ao que vimos com .NET:
# Referências [void][system.reflection.assembly]::loadfrom("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Smo.dll") [void][system.reflection.assembly]::loadfrom("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SmoExtended.dll") # Objetos $srv = new-object Microsoft.SqlServer.Management.Smo.Server(".\SQLEXPRESS") $bk = new-object Microsoft.SqlServer.Management.Smo.Backup # Definindo de qual banco de dados será executado o backup $bk.Database = "BASE1" # Definindo onde será salvo o backup $bk.Devices.AddDevice("C:\TEMP\BASE1_PowerShell.bak", [Microsoft.SqlServer.Management.Smo.DeviceType]::File) # Executando o backup $bk.SqlBackup($srv)
Mas quando no contexto do PowerShell do SQL Server (scripts executados em Jobs ou diretamente pelo PowerShell presente no SQL Server Management Studio ou SQLPS.exe), teremos algumas facilidades, como não precisar referenciar os assemblies do SMO e utilizar de “atalhos” para instanciar as variáveis do SQL Server (ex.: Smo.Server):
# Sem referências # Objetos $srv = get-item SQLSERVER:\SQL\LOCALHOST\SQLEXPRESS $bk = new-object Microsoft.SqlServer.Management.Smo.Backup # Definindo de qual banco de dados será executado o backup $bk.Database = "BASE1" # Definindo onde será salvo o backup $bk.Devices.AddDevice("C:\TEMP\BASE1_PowerShell.bak", [Microsoft.SqlServer.Management.Smo.DeviceType]::File) # Executando o backup $bk.SqlBackup($srv)
Referências: