2009-11-10 3 views
4

J'essaie d'utiliser PowerShell pour créer des sauvegardes, puis de les copier dans un dossier web (ou, en d'autres termes, les télécharger sur un partage WebDAV). Au début, je pensais que je ferais les choses WebDAV à partir de PowerShell, mais il semble que cela nécessite encore une bonne quantité de "travail manuel", à savoir: la construction de requêtes HTTP. Je me suis alors contenté de créer un dossier web à partir du script et de laisser Windows s'occuper du contenu WebDAV. Il semble que tout ce qu'il faut pour créer un dossier web est de créer un raccourci standard, comme décrit here.Scripts Powershell pour sauvegarder SQL, SVN

Ce que je n'arrive pas à comprendre est comment réellement copier des fichiers à la cible du raccourci ..? Peut-être que je vais à ce sujet dans le mauvais sens.

Il serait idéal si je pouvais en quelque sorte crypter les informations d'identification pour WebDAV dans le script, puis le créer le dossier Web, shunter sur les fichiers et supprimer le dossier Web à nouveau. Ou encore mieux, n'utilisez pas du tout un dossier web. La troisième option serait de simplement créer le dossier Web manuellement et de le laisser là, bien que je préfère ne pas.

Des idées/des conseils/des astuces? :)

Répondre

3

Eh bien, en attendant, j'ai bricolé une autre solution. Peut-être qu'il sera utile à quelqu'un ..

[Run.cmd] --May besoin de changer chemin powershell

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nologo -noninteractive -command "C:\Scripts\RunBackup.ps1" 

[RunBackup.ps1] --Les-fichier ne pas avoir l'effet désiré, Peut-être que quelqu'un peut comprendre pourquoi?

C:\Scripts\SqlBackup.ps1 | Out-File "C:\Scripts\log.txt" 
C:\Scripts\SVNBackup.ps1 | Out-File "C:\Scripts\log.txt" 
C:\Scripts\Zip.ps1 | Out-File "C:\Scripts\log.txt" 

[SqlBackup.ps1] --Vous peut être nécessaire de modifier des ensembles qui SMO sont chargés, en fonction de votre version du serveur SQL. Ne pas oublier de mettre $ instance et $ bkdir.

#http://www.mssqltips.com/tip.asp?tip=1862&home 

$instance = ".\SQLEXPRESS" 


[System.Reflection.Assembly]::LoadFrom("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SMO.dll") | out-null 

[System.Reflection.Assembly]::LoadFrom("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SMOExtended.dll") | out-null 

$s = new-object ("Microsoft.SqlServer.Management.Smo.Server") $instance 

$bkdir = "c:\Backups" #We define the folder path as a variable 
$dbs = $s.Databases 
foreach ($db in $dbs) 
{ 
    if($db.Name -ne "tempdb") #We don't want to backup the tempdb database 
    { 
    $dbname = $db.Name 
    $dt = get-date -format yyyyMMddHHmm #We use this to create a file name based on the timestamp 
    $dbBackup = new-object ("Microsoft.SqlServer.Management.Smo.Backup") 
    $dbBackup.Action = "Database" 
    $dbBackup.Database = $dbname 
    $dbBackup.Devices.AddDevice($bkdir + "\" + $dbname + "_db_" + $dt + ".bak", "File") 
    $dbBackup.SqlBackup($s) 
    } 

    if($db.RecoveryModel -ne 3) #Don't issue Log backups for DBs with RecoveryModel=3 or SIMPLE 
    { 
    $dbname = $db.Name 
    $dt = get-date -format yyyyMMddHHmm #Create a file name based on the timestamp 
    $dbBackup = new-object ("Microsoft.SqlServer.Management.Smo.Backup") 
    $dbBackup.Action = "Log" 
    $dbBackup.Database = $dbname 
    $dbBackup.Devices.AddDevice($bkdir + "\" + $dbname + "_log_" + $dt + ".trn", "File") 
    $dbBackup.SqlBackup($s) 
    } 
} 

[SVNBackup.ps1] --Modify chemins repo et sauvegarde

#set alias to svnadmin exe 
set-alias svnadmin "C:\Program Files (x86)\CollabNet Subversion Server\svnadmin.exe" 

#create dump 
cmd.exe /c svnadmin dump "C:\Repo" `> "C:\Backups\svn.dmp" 

#remove alias 
remove-item alias:svnadmin 

[Zip.ps1] --Need d'avoir 7zip installé, modifier chemin 7z.exe si nécessaire

#set alias to command line version of 7zip 
set-alias sevenz "c:\program files\7-zip\7z.exe" 

#Backups location 
cd 'C:\Backups' 

#rar the contents of the directory 
$dt = get-date -format yyyyMMddHHmm #We use this to create a file name based on the timestamp 
$outputFileName = "SQLSVNBackup$dt.7z" 
$exclude1 = "-x!*.rar" 
$exclude2 = "-x!*.7z" 
sevenz a -t7z "$outputFileName" *.* "$exclude1" "$exclude2" 

#find all .bak files in the immediate directory 
dir '*.bak' | foreach-object{ 

#remove the bak file 
remove-item $_.name 

} 


#find all .dmp files in the immediate directory 
dir '*.dmp' | foreach-object{ 

#remove the dmp file 
remove-item $_.name 

} 

#find all .trn files in the immediate directory 
dir '*.trn' | foreach-object{ 

#remove the trn file 
remove-item $_.name 

} 

#remove 7zip alias 
remove-item alias:sevenz 

J'ai utilisé GoodSync pour effectuer une sauvegarde sur WebDAV et planifié deux tâches pour exécuter le fichier .cmd, puis synchroniser/sauvegarder hors site.

6

Si vous utilisez PowerShell pour sauvegarder vos référentiels SVN en utilisant svnadmin dump, sachez que la redirection vers un fichier endommagera silencieusement vos sauvegardes.

Powershell aime changer les choses en UTF-16 lors de la tuyauterie, il change aussi les sauts de ligne unix en fenêtres. Cela reviendra vous hanter quand vous essayerez de restaurer.

problème bien décrit ici:

http://thoughtfulcode.wordpress.com/2010/01/29/powershells-object-pipeline-corrupts-piped-binary-data/

Solution ici:

http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.windows.powershell&tid=e4cd89e9-427b-407d-a94f-c24be3f1e36f&cat=&lang=&cr=&sloc=&p=1

En résumé, utilisez cmd.exe au lieu de Powershell:

cmd.exe /c svnadmin dump ... `> dumpfile.dump 

Notez que la backtick sur la redirection de sortie est nécessaire pour arrêter powershell l'analyser.

+0

Merci pour l'info! – bszom

+2

+1 pour la pointe de retour arrière sur la redirection de sortie. –

Questions connexes