Skip to content

Instantly share code, notes, and snippets.

@raulunzue
Created December 4, 2020 11:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save raulunzue/47d85dc6e91473825cf0f4eef5607142 to your computer and use it in GitHub Desktop.
Save raulunzue/47d85dc6e91473825cf0f4eef5607142 to your computer and use it in GitHub Desktop.
Powershell: Copia datos incrementales a USB
#######################################
## RAUL UNZUE - ELBLOGDENEGU
## 02/12/2020
## SCRIPT COPIADO INCREMENTAL PERFIL
#######################################
#CERRAR OUTLOOK
#Bucle que solicita cerrar Outlook hasta que no detecta ningun proceso outlook corriendo
#Para que deje copiar PSTs Outlook tiene que estar cerrado
Do {
Write-Host ""
Write-Host "Por favor, es necesario cerrar Outlook antes de ejecutar el script."
pause
$outlookproc=Get-Process | Where-Object { $_.Name -eq "outlook" }
}Until ($outlookproc.count -eq 0)
## SABER RUTA
$ruta=pwd
## SABER EL USUARIO
$u=C:\windows\system32\whoami.exe
## ELIMINAR DOMINIO
$posicion = $u.IndexOf("\")
$posicion = $posicion+1
$usuario = $u.substring($posicion, $u.Length - $posicion)
## CARGAMOS ORIGEN Y DESTINO
$origen="c:\Users\$usuario"
$destino="$ruta$usuario\Perfil"
Start-Transcript -Path "$ruta\copia-$usuario.log"
## GENERAMOS RUTA EN EL DISCO USB PARA EL USUARIO
New-Item -Path $destino -ItemType Directory -Force
## SABER DIRECTORIOS Y FICHEROS LOCALES MODIFICADOS A PARTIR DE UNA FECHA
# DIRECTORIOS
#Últimos directorios modificados
$dir= Get-ChildItem -Path $origen -Recurse -Directory | Where-Object {$_.LastWriteTime -gt "12/02/2020" -OR $_.LastAccessTime -gt "12/02/2020"}
#Contar los directorios
$dircount = $dir.fullname.count
# FICHEROS
#Últimos ficheros modificados
$file = Get-ChildItem -Path $origen -Recurse -File | Where-Object {$_.LastWriteTime -gt "12/02/2020" -OR $_.LastAccessTime -gt "12/02/2020"}
#Contar los ficheros
$filecount = $file.fullname.count
## GENERAR DIRECTORIOS Y COPIAR DATOS
for ($i = 0; $i -le $dircount; $i++){
# Extraemos cada directorio del listado
$dr=$dir.Item($i).FullName
Write-Output "Directorio que se va a generar $dr"
# Tratamos el dato
$dr > "$destino\dr-$usuario-$i.txt"
(Get-Content -Path "$destino\dr-$usuario-$i.txt") -replace ($usuario, "") -replace ("c:", "") -replace ("Users", "") | Set-Content -Path "$destino\dr-$usuario-$i.txt"
(Get-Content -Path "$destino\dr-$usuario-$i.txt") -replace ('\\\\\\', "") | Set-Content -Path "$destino\dr-$usuario-$i.txt"
(Get-Content -Path "$destino\dr-$usuario-$i.txt") | ? {$_.trim() -ne "" } | Set-Content -Path "$destino\dr-$usuario-$i.txt"
[string]$d=(Get-Content -Path "$destino\dr-$usuario-$i.txt")
# Validación que existe
$testd= Test-Path -Path $destino\$d
# Si no existe generamos la copia
if ($testd -eq $False){
# Generamos los directorios
Write-Output "Se genera el directorio en la ruta $destino\$d"
New-Item -Path $destino\$d -ItemType Directory -Force
for ($x = 0; $x -le $filecount; $x++){
# Extraemos la ruta del fichero a copiar
[string]$fi=$file.Item($x).FullName
[string]$f=$file.Item($x).Name
# Validamos que existe el fichero
Write-Output "Fichero que podemos copiar $fi"
$existe=("$fi" | sls -Pattern "$d\$f" -CaseSensitive -SimpleMatch)
# Si la ruta del fichero contiene la que contienen los directorios, se copia el fichero
if ($existe -ne $null){
Write-Output "Existe la ruta, se copia fichero $file.Item($x).Name en el directorio $destino\$d"
Copy-Item -Path "$fi" -Destination "$destino\$d" -Filter *.txt -Recurse -Force -PassThru
}
# Sino, no se copia
else{
Write-Output "No hay más ficheros que copiar en el directorio $destino\$d"
}
}
}
# Si existe no realizamos la copia
else{
Write-Output "No existen más directorios que generar"
}
#BORRAMOS FICHERO TXT DE PRECARGA
Remove-Item -Path "$destino\dr-$usuario-$i.txt"
}
Stop-Transcript
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment