Pregunta

Estoy intentando usar PowerShell para crear algunas copias de seguridad y luego copiarlas a una carpeta web (o, en otras palabras, subirlas a un recurso compartido WebDAV).

Al principio pensé en hacer las cosas de WebDAV desde PowerShell, pero parece que esto todavía requiere una buena cantidad de "trabajo manual", es decir:construir solicitudes HTTP.Luego me conformé con crear una carpeta web a partir del script y dejar que Windows manejara las cosas de WebDAV.Parece que todo lo que se necesita para crear una carpeta web es crear un acceso directo estándar, como se describe aquí.

Lo que no puedo entender es cómo copiar archivos al destino del acceso directo...Tal vez estoy haciendo esto de manera equivocada.

Sería ideal si de alguna manera pudiera cifrar las credenciales de WebDAV en el script, luego hacer que cree la carpeta web, desvíe los archivos y elimine la carpeta web nuevamente.O mejor aún, no utilices ninguna carpeta web.La tercera opción sería simplemente crear la carpeta web manualmente y dejarla allí, aunque prefiero no hacerlo.

¿Alguna idea/consejo/consejo?:)

¿Fue útil?

Solución 2

Bueno, mientras tanto improvisé otra solución.Quizás a alguien le sirva..

[Run.cmd] --Es posible que sea necesario cambiar la ruta de PowerShell

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

[RunBackup.ps1] --Out-File no tiene el efecto deseado, tal vez alguien pueda descubrir por qué.

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]: es posible que deba modificar qué ensambles SMO se cargan, dependiendo de su versión de SQL Server.No olvide configurar $instance y $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] --Modificar repositorio y rutas de respaldo

#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] --Necesita tener instalado 7zip, modifique la ruta 7z.exe si es necesario

#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

solía buena sincronización para hacer una copia de seguridad en WebDAV y programé dos tareas para ejecutar el archivo .cmd y luego sincronizar/hacer una copia de seguridad fuera del sitio.

Otros consejos

Si está utilizando PowerShell a la reserva sus repositorios SVN usando svnadmin dump continuación, ser conscientes de que la tubería a un archivo corrupto silenciosamente sus copias de seguridad.

Powershell le gusta cambiar las cosas a UTF-16, cuando las tuberías, también cambia saltos de línea UNIX a las ventanas. Esto va a volver en tu contra cuando intenta y restaurar.

Problema bien descrito aquí:

http: // thoughtfulcode .wordpress.com / 2010/01/29 / powershells-objeto-ductos-corrompe-hilo de binario de datos /

Solución aquí:

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 resumen, el uso cmd.exe en lugar de PowerShell:

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

Tenga en cuenta que se requiere que el acento grave sobre la redirección de la salida para detener PowerShell analizarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top