¿Cual es la duda/problema?.
En el script de Powershell tienes una variable "$fecha" que no utilizas, ¿cual es el propósito?. ¿y por qué motivo tienes un script en Batch y otro en Powershell, pudiendo hacerlo todo de forma eficiente en un único script de Powershell?, además ten en cuenta que no puedes enviar correos con puro batch...
Aparte de eso, probablemente al crear el archivo comprimido quieras excluir archivos temporales del proyecto/repositorio para reducir el tamaño, así que en mi opinión te conviene más utilizar cualquier herramienta command-line como por ejemplo 7-Zip.
Bueno, aquí te dejo un código que he rescatado de uno de mis repos, estaba escrito en VB.NET y lo he adaptado para poder usarlo con Powershell (de la manera más rápida/sencilla, es más bien un copy&paste que una adaptación o conversión), el script sirve para crear un backup con un formato de fecha específico en el nombre y usando 7z.exe como compresor...
script.ps1
Teniendo ubicados en un mismo directorio el archivo script.ps1, el executable 7z.exe, un directorio de origen con nombre "Solution" y un directorio de salida con nombre "Backups", es decir:
...la salida de ejecución sería algo similar a esto:
Obviamente antes de poder usar ese script, necesitarás hacer unos pequeños cambios en el código fuente para asignar los nombres de tus rutas y archivos, patorones de exclusiones, y si quieres cambiar el formato de fecha también, etc, no lo voy a hacer todo yo. También puedes usar parámetros nombrados en powershell si lo prefieres, en vez de usar valores hard-codeados en ese código fuente de VB.NET.
Con respecto a lo de enviar por email, si sigues el ejempo de usar VB.NET entonces es tan simple como utilizar la clase System.Net.Mail.SmtpClient y configurar el servidor SMTP desde el que piensas enviar el correo, tienes miles de ejemplos en Internet para C# y VB.NET. También es algo que puedes hacer en puro código Powershell: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage
Saludos.
En el script de Powershell tienes una variable "$fecha" que no utilizas, ¿cual es el propósito?. ¿y por qué motivo tienes un script en Batch y otro en Powershell, pudiendo hacerlo todo de forma eficiente en un único script de Powershell?, además ten en cuenta que no puedes enviar correos con puro batch...
Aparte de eso, probablemente al crear el archivo comprimido quieras excluir archivos temporales del proyecto/repositorio para reducir el tamaño, así que en mi opinión te conviene más utilizar cualquier herramienta command-line como por ejemplo 7-Zip.
Bueno, aquí te dejo un código que he rescatado de uno de mis repos, estaba escrito en VB.NET y lo he adaptado para poder usarlo con Powershell (de la manera más rápida/sencilla, es más bien un copy&paste que una adaptación o conversión), el script sirve para crear un backup con un formato de fecha específico en el nombre y usando 7z.exe como compresor...
script.ps1
Código
$vbCode = @' Imports Microsoft.VisualBasic Imports System Imports System.Diagnostics Imports System.Globalization Imports System.IO Imports System.Linq Imports System.Threading Public Module Module1 Public Sub Main() Dim srcBackupDir As New DirectoryInfo(".\Solution") ' Source directory to backup. Dim dstBackupDir As New DirectoryInfo(".\Backups") ' Destination directory where to save the backup. Dim ci As New CultureInfo("es-ES", useUserOverride:=False) Dim backupDate As Date = Date.Now Dim dateFormat As String = backupDate.ToString("MMMM-dd-yyyy", ci.DateTimeFormat) ' month-day-year Dim timeFormat As String = backupDate.TimeOfDay.ToString("hh\.mm\.ss") ' hour.min.sec Dim repoName As String = "ElektroKit" Dim nameFormat As String = String.Format("{0} Backup - {1} {2}.7z", repoName, ci.TextInfo.ToTitleCase(dateFormat), timeFormat) ' repoName Backup - month-day-year hour.min.sec Dim fullFilePath As String = Path.Combine(dstBackupDir.FullName, nameFormat) Dim exclusionPatterns As String() = {".vs", "Bin", "Obj", "TestResults", "*.sln.GhostDoc.xml"} Dim compressorFile As New FileInfo(".\7z.exe") Dim compressorArgs As String = String.Format("a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=On ""{0}"" ""{1}"" {2}", fullFilePath, srcBackupDir.FullName, String.Join(" ", From exclusion As String In exclusionPatterns Select String.Format("-xr!""{0}""", exclusion))) If Not (srcBackupDir.Exists) Then Throw New DirectoryNotFoundException(String.Format("Directory not found: '{0}'", srcBackupDir.FullName)) End If If Not (compressorFile.Exists) Then Throw New FileNotFoundException(String.Format("File not found: '{0}'", compressorFile.FullName), compressorFile.FullName) End If If Not (dstBackupDir.Exists) Then dstBackupDir.Create() dstBackupDir.Refresh() End If Console.WriteLine("Source directory: {0}", srcBackupDir.FullName) Console.WriteLine("Backup directory: {0}", dstBackupDir.FullName) Console.WriteLine("Backup filename : {0}", nameFormat) Console.WriteLine() Console.WriteLine("Compressor Path : {0}", compressorFile.FullName) Console.WriteLine("Compressor Args.: {0}", compressorArgs) Console.WriteLine() Console.WriteLine("Compressing source directory...") Using p As New Process() With p.StartInfo .FileName = compressorFile.FullName .Arguments = compressorArgs .WorkingDirectory = compressorFile.DirectoryName .CreateNoWindow = True .UseShellExecute = True .WindowStyle = ProcessWindowStyle.Normal End With p.Start() p.WaitForExit(Timeout.Infinite) End Using Console.WriteLine("Done!") End Sub End Module '@ $vbType = Add-Type -TypeDefinition $vbCode ` -CodeDomProvider (New-Object Microsoft.VisualBasic.VBCodeProvider) ` -PassThru ` -ReferencedAssemblies "Microsoft.VisualBasic.dll", ` "System.dll", "System.IO.dll", "System.Linq.dll" ` | where { $_.IsPublic } [Module1]::Main() $Console = [System.Console] $Console::WriteLine("Press any key to exit...") $Console::ReadKey($false) Exit(0)
Teniendo ubicados en un mismo directorio el archivo script.ps1, el executable 7z.exe, un directorio de origen con nombre "Solution" y un directorio de salida con nombre "Backups", es decir:
Código:
Directorio raíz\Backups
Directorio raíz\Solution
Directorio raíz\script.ps1
Directorio raíz\7z.exe
...la salida de ejecución sería algo similar a esto:
Obviamente antes de poder usar ese script, necesitarás hacer unos pequeños cambios en el código fuente para asignar los nombres de tus rutas y archivos, patorones de exclusiones, y si quieres cambiar el formato de fecha también, etc, no lo voy a hacer todo yo. También puedes usar parámetros nombrados en powershell si lo prefieres, en vez de usar valores hard-codeados en ese código fuente de VB.NET.
Con respecto a lo de enviar por email, si sigues el ejempo de usar VB.NET entonces es tan simple como utilizar la clase System.Net.Mail.SmtpClient y configurar el servidor SMTP desde el que piensas enviar el correo, tienes miles de ejemplos en Internet para C# y VB.NET. También es algo que puedes hacer en puro código Powershell: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage
Saludos.
Primero tendria que clonar los repositorios que quisiera y ponerlos en solution y dentro de backup se haria la compresion y hay alguna forma de decir cual se a clonado correctamente y cual no se a clonado correctamente. Muchas gracias