Created
December 12, 2020 09:57
-
-
Save raulunzue/28e10961288430752d0e09e96e3a4fce to your computer and use it in GitHub Desktop.
Powershell, copy USB %userdata% and share unit
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
####################################### | |
## 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" | |
$origenM="M:\" | |
$destino="$ruta$usuario\Perfil" | |
$destinoM="$ruta$usuario\M" | |
## COMIENZA EL LOG | |
Start-Transcript -Path "$ruta$usuario-copia.log" | |
## GENERAMOS RUTA EN EL DISCO USB PARA EL USUARIO | |
New-Item -Path $destino -ItemType Directory -Force | |
New-Item -Path $destinoM -ItemType Directory -Force | |
## SABER DIRECTORIOS Y FICHEROS LOCALES/M MODIFICADOS A PARTIR DE UNA FECHA | |
# DIRECTORIOS | |
#Últimos directorios modificados en local | |
$dir= Get-ChildItem -Path $origen -Recurse -Directory | Where-Object {$_.LastWriteTime -gt "12/09/2020" -OR $_.LastAccessTime -gt "12/09/2020"} | |
#Contar los directorios en local | |
$dircount = $dir.fullname.count | |
#Últimos directorios modificados en M | |
$dirM= Get-ChildItem -Path $origenM -Recurse -Directory | Where-Object {$_.LastWriteTime -gt "12/09/2020" -OR $_.LastAccessTime -gt "12/09/2020"} | |
#Contar los directorios en M | |
$dircountM = $dirM.fullname.count | |
# FICHEROS | |
#Últimos ficheros modificados en local | |
$file = Get-ChildItem -Path $origen -Recurse -File | Where-Object {$_.LastWriteTime -gt "12/09/2020" -OR $_.LastAccessTime -gt "12/09/2020"} | |
#Contar los ficheros en local | |
$filecount = $file.fullname.count | |
#Últimos ficheros modificados en M | |
$fileM = Get-ChildItem -Path $origenM -Recurse -File | Where-Object {$_.LastWriteTime -gt "12/09/2020" -OR $_.LastAccessTime -gt "12/09/2020"} | |
#Contar los ficheros en M | |
$filecountM = $fileM.fullname.count | |
#Últimos ficheros modificados en M | |
$fileMraiz = Get-ChildItem -Path $origenM -File | Where-Object {$_.LastWriteTime -gt "12/09/2020" -OR $_.LastAccessTime -gt "12/09/2020"} | |
#Contar los ficheros en M | |
$filecountMraiz = $fileMraiz.fullname.count | |
## GENERAR DIRECTORIOS Y COPIAR DATOS DISCO LOCAL | |
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" -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" | |
} | |
## GENERAR DIRECTORIOS Y COPIAR DATOS DE M | |
$m= Test-Path M: | |
if ($m -eq $False) | |
{ | |
Write-Output "La unidad M no existe" | |
} | |
else | |
{ | |
for ($y = 0; $y -le $dircountM; $y++){ | |
# Extraemos cada directorio del listado | |
$drM=$dirM.Item($y).FullName | |
Write-Output "Directorio que se va a generar $drM" | |
# Tratamos el dato | |
$drM > "$destinoM\dr-$usuario-$y.txt" | |
(Get-Content -Path "$destinoM\dr-$usuario-$y.txt") -replace ('M:\\', "") | Set-Content -Path "$destinoM\dr-$usuario-$y.txt" | |
(Get-Content -Path "$destinoM\dr-$usuario-$y.txt") | ? {$_.trim() -ne "" } | Set-Content -Path "$destinoM\dr-$usuario-$y.txt" | |
[string]$dM=(Get-Content -Path "$destinoM\dr-$usuario-$y.txt") | |
# Validación que existe | |
$testdM= Test-Path -Path "$destinoM\$dM" | |
# Si no existe generamos la copia | |
if ($testdM -eq $False){ | |
# Generamos los directorios | |
Write-Output "Se genera el directorio en la ruta $destinoM\$d" | |
New-Item -Path "$destinoM\$dM" -ItemType Directory -Force | |
for ($z = 0; $z -le $filecountM; $z++){ | |
# Extraemos la ruta del fichero a copiar | |
[string]$fiM=$fileM.Item($z).FullName | |
[string]$fM=$fileM.Item($z).Name | |
# Validamos que existe el fichero | |
Write-Output "Fichero que podemos copiar $fiM" | |
$existeM=("$fiM" | sls -Pattern "$dM\$fM" -CaseSensitive -SimpleMatch) | |
# Si la ruta del fichero contiene la que contienen los directorios, se copia el fichero | |
if ($existeM -ne $null){ | |
Write-Output "Existe la ruta, se copia fichero $fileM.Item($z).Name en el directorio $destinoM\$dM" | |
Copy-Item -Path "$fiM" -Destination "$destinoM\$dM" -Recurse -Force -PassThru | |
} | |
# Sino, no se copia | |
else{ | |
Write-Output "No hay más ficheros que copiar en el directorio $destinoM\$dM" | |
} | |
} | |
} | |
# Si existe no realizamos la copia | |
else{ | |
Write-Output "No existen más directorios que generar" | |
} | |
#BORRAMOS FICHERO TXT DE PRECARGA | |
Remove-Item -Path "$destinoM\dr-$usuario-$y.txt" | |
} | |
for ($t = 0; $t -le $filecountMraiz; $t++){ | |
if ($filecountMraiz -gt 1){ | |
#Copiar cada fichero. | |
[string]$fiMraiz=$fileMraiz.Item($t).FullName | |
#Aqui se copia | |
Copy-Item -Path "$fiMraiz" -Destination "$destinoM" -Force -PassThru | |
} | |
else{ | |
Copy-Item -Path $fileMraiz.Fullname -Destination "$destinoM" -Force -PassThru | |
} | |
} | |
} | |
## PARA EL LOG | |
Stop-Transcript |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment