1

私はPowerShellをまったく使用したことがないので、始めるには助けが必要です。私が必要としているのは、SQLデータベースをバックアップする小さなスクリプトを作成することですが、毎回異なる名前を使用します(最後の4〜5バージョンのみを保持するため)。現在、私はBATを持っています。これは、以下のように、SQLスクリプトを使用してosqlを起動するだけです。

REM BAT file starts here
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe" -S myServer -E -iC:\Scripts\backupDB.sql

そして、バックアップスクリプトは

BACKUP DATABASE [MyDB] TO  DISK = N'C:\Backup\MyDB.bak' WITH NOFORMAT, INIT,  NAME = N'MyDB-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

このBATは、タスクスケジューラによって実行されます。明らかに、異なるDBバックアップファイルは作成されません。私が欲しいのは、すべてをPowerShellスクリプトに置き換えて、ターゲットディレクトリを調べ、最後のN個のバックアップファイル(最新のものから開始)のみを保持してから、次のようなバックアップファイル名を生成することです。

MyDB-yy.mmdd.hhmmss.bak 

その中でバックアップします。

それを行うための簡単なC#コンソールアプリケーションを作成することもできますが、Powershellでのプレイとテストを開始したいと思います。

どんな助けでも大歓迎です。

ありがとうございました

4

2 に答える 2

2

このようなものが機能するはずです:

if (Test-Path C:\Backup\MyDB.bak)
{
    Rename-Item C:\Backup\MyDB.bak `
                ("C:\Backup\MyDB-{0:yy.MMdd.hhmmss}.bak" -f (get-date))
}

Get-ChildItem C:\Backup\MyDB-*.bak | Sort Name -Desc | Select -skip 5 | 
    Remove-Item

$osql = "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe"
& $osql -S myServer -E -iC:\Scripts\backupDB.sql
于 2009-11-11T00:07:26.117 に答える
2

または、.sqlファイルをスキップして次のようにすることもできます。SMOを使用して実行することもできますが、C#について言及したので、これはより理にかなっている可能性があります。


$datePart = Get-Date -Format "yy.MMdd.HHmmss"
$oConn = New-Object System.Data.SqlClient.SqlConnection("Server=myServer;Database=master;Integrated Security=True")
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.Connection = $oConn
$oConn.Open()
$SqlCmd.CommandText = "BACKUP DATABASE [MyDB] TO  DISK = N'C:\Backup\MyDB-$datePart.bak' WITH NOFORMAT, INIT,  NAME = N'MyDB-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10"
$SqlCmd.ExecuteNonQuery()
$oConn.Close()
于 2009-11-11T18:50:45.387 に答える