PowerShell – Descargar todos los archivos de una carpeta ftp

Crear un script para descargar un archivo en concreto de un ftp es bastante sencillo y encontramos muchos ejemplos. Desde una máquina Windows, si queremos descargar todos los archivos de una carpeta en concreto de un servidor ftp sin saber el nombre de cada uno de los archivos ya es un poco más complicado.

A través de una consulta en http://stackoverflow.com/ he encontrado un script en PowerShell fantástico que funciona a las mil maravillas:

	
  #FTP Server Information - SET VARIABLES
    $ftp = "ftp://ftp.myserver.com" 
    $user = 'user' 
    $pass = 'password'
    $folder = 'Folder'
    $target = "C:\test\"


    #SET CREDENTIALS
    $credentials = new-object System.Net.NetworkCredential($user, $pass)

    function Get-FtpDir ($url,$credentials) {
        $request = [Net.WebRequest]::Create($url)
        $request.Method = [System.Net.WebRequestMethods+FTP]::ListDirectory
        if ($credentials) { $request.Credentials = $credentials }
        $response = $request.GetResponse()
        $reader = New-Object IO.StreamReader $response.GetResponseStream() 
        $reader.ReadToEnd()
        $reader.Close()
        $response.Close()
    }

    #SET FOLDER PATH
    $folderPath= $ftp + "/" + $folder + "/"

    $Allfiles=Get-FTPDir -url $folderPath -credentials $credentials
    $files = ($Allfiles -split "`r`n")

    $files 

    $webclient = New-Object System.Net.WebClient 
    $webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass) 
    $counter = 0
    foreach ($file in ($files)){
        $source=$folderPath + $file  
        $destination = $target + $file 
        $webclient.DownloadFile($source, $target+$file)

        #PRINT FILE NAME AND COUNTER
        $counter++
        $counter
        $source
    }



En este caso en el propio script le asignamos los valores de los parámetros, se podría modificar y pasar los parámetros al ejecutar.


Script vía Vía: http://stackoverflow.com/questions/19059394/powershell-connect-to-ftp-server-and-get-files



Si el post te ha ayudado a salir de un marrón, te ha servido pá lo que sea o simplemente te ha gustado y quieres colaborar puedes pinchar en los anuncios ;)


Batch para comprobar el estado de servicios Windows

Arrancar y detener servicios Windows.
NET START
NET STOP

Batch que permite comprobar el estado de un servicio Windows determinado y arrancarlo en caso de no estar en marcha.
Vamos a utilizar el comando sc query que nos da información del estado de los servicios.

	
for /F "tokens=3 delims=: " %%H in ('sc query NOMBRE_SERVICIO ^| findstr "  ESTADO"') do (
  if /I "%%H" NEQ "RUNNING" (
     net start NOMBRE_SERVICIO
  )
)

¿Cómo hacer que un servicio Windows esté siempre arrancado?
Con el batch anterior, ejecutándolo de forma periódica a través de una tarea programa de Windows.




Modificándolo ligeramente lo podemos usar para detener un servicio, en caso de no estarlo.

	
for /F "tokens=3 delims=: " %%H in ('sc query NOMBRE_SERVICIO ^| findstr "  ESTADO"') do (
  if /I "%%H" == "RUNNING" (
     net stop NOMBRE_SERVICIO
  )
)





Si el post te ha ayudado a salir de un marrón, te ha servido pá lo que sea o simplemente te ha gustado y quieres colaborar puedes pinchar en los anuncios ;)



Como crear un plan de copias de seguridad usando robocopy y forfiles

Plataforma: Windows
Objetivo
Configurar un .bat que copie backups SQL que se guardan en local en un máquina y copiarlos en una unidad de red. Se quieren guardar los últimos 8 backups, pero en local sólo caben 3.

Prerrequisitos
Carpeta origen: C:\BackupSQL\
Carpeta destino: \\192.168.1.10\Servidor\Copias\
En la máquina en local sólo se guardan los 3 últimos backups
En la unidad de red queremos tener los últimos 8 backups

Continue reading


Ejemplos Robocopy

Ejemplo Robocopy 1
Copiar la estructura de carpetas recursivamente, sin los archivos que pueda haber, sólo las carpetas vacías:
·El parámetro /XF * excluye todos archivos
·El parámetro /E copia subdirectorios
·El parámetro /Z indica que es modo reiniciable, es caso de pérdida de conexión continúa donde estaba
Origen d:
Destino f:

> robocopy d:\CarpetaA\ f:\CarpetaANoFiles\ /E /Z /XF *	

Si además queremos generar un log añadimos el parámetro /LOG:nombreArchivoLog.txt: Continue reading


Eliminar archivos en función de la extension en Windows

Aplicable en:
· Windows Server 2008
· Windows Server 2008 R2
· Windows Server 2012
· Windows Server 2012 R2


EL comando forfiles de Windows nos permite hacer una búsqueda en función de la extensión de los archivos y luego eliminarlos.

Por ejemplo, queremos eliminar todos los archivos con extensión .tmp de la carpeta c:\Windows\temp\
Primero listamos todos los archivos para comprobar que realmente la búsqueda es correcta antes de eliminar los documentos:

> forfiles /p "C:\Carpeta" /m *.tmp /C "cmd /c echo @file"



Si la búsqueda es correcta añadimos & Del @file para eliminarlos

> forfiles /p "C:\Carpeta" /m *.tmp /C "cmd /c echo @file & Del @file"



Parámetros:
· /p especifica la ruta donde se va a iniciar la búsqueda. Por defecto empieza en el directorio de trabajo actual.
· /m especifica el tipo de archivos. Si no se especifica busca cualquier tipo(*.*).
· /c para ejecutar comandos




Si el post te ha ayudado a salir de un marrón, te ha servido pá lo que sea o simplemente te ha gustado y quieres colaborar puedes pinchar en los anuncios ;)


Windows BATCH file: asignar valor a variable en función de los parámetros

Como asignar un valor a una variable en función de si se pasa algún parámetro.

Tenemos un caso en que la llamada a un archivo batch (.bat, .cmd)  a veces le pasamos un parámetro y a veces no, en función de eso hay una variable (cadena) que se le asigna el valor del parámetro o un valor alternativo.

Archivo batch con nombre prueba.bat:

@echo off
if "%1"=="" GOTO CambiarValor
set cadena=%1
echo El valor de la cadena es: %cadena%
pause
exit
:CambiarValor
set cadena=festivo
echo El valor de la cadena es: %cadena%
pause
exit

Continue reading