Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Powershell, copy USB %userdata% and share unit
#######################################
## 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