Quantcast
Channel: Blog Virtualizacion
Viewing all articles
Browse latest Browse all 679

Powershell: Comprimir perfiles FSLogix

$
0
0

Powershell: Comprimir perfiles FSLogix

Os muestro un script que nos va a permitir un mantenimiento de los perfiles FSLogix de nuestros usuarios. El proyecto lo podéis ver en el siguiente enlace:

https://github.com/FSLogix/Invoke-FslShrinkDisk

Yo he reutilizado el script que os he presentado en otra entrada, que revisa el estado y el tamaño de esos perfiles, avisando a los usuarios para que liberen espacio:

https://www.maquinasvirtuales.eu/powershell-script-para-comprobar-perfiles-vhdx-fslogix-en-citrix/

La idea es combinar ambos scripts, en tareas separadas. De forma, que se compriman, y si una vez comprimidos, no se libera espacio y el perfil tiene más de 4GB avise a los usuarios en el otro script.

Para éste script, lo que vamos a hacer, es revisar todos los perfiles de más de 3GB, de forma que no se compriman mas que lo que pasan de cierto tamaño. Os dejo el script:

GITHUB: https://gist.github.com/raulunzue/e14bd899e1d5f5640cb38d48d49f617e

######################
# FUNCION SABER LINEA
######################
    function linea
         {
         $input | Select-String '.' | Select-Object -Property LineNumber, Line
         }
###############################
# LISTAR DISCOS Y TAMAÑOS VHDX
###############################
    $usuarios=Get-ChildItem -Path "C:\Scripts\Invoke-FslShrinkDisk-master" -Filter "*.vhdx" -File | Select-Object Name, @{n = 'SizeInGB'; e = {[math]::round($_.length/1GB,2)}}
    # SEPARAMOS Y LIMPIAMOS VALORES EN DOS LISTADOS
    #DISCOS-USUARIOS
    $usuarios.Name | ForEach-Object { $_ -replace ".vhdx","" } > "C:\SCRIPTS\vhdx.txt"
    # Limpiamos los espacios en blanco y exportamos a TXT
    (Get-Content C:\SCRIPTS\vhdx.txt) | ? {$_.trim() -ne "" } | Set-Content C:\SCRIPTS\vhdx.txt
    #$vhdx=(Get-Content -Path "C:\SCRIPTS\vhdx.txt")
    #ESPACIO OCUPADO
    $usuarios.SizeInGB > "C:\SCRIPTS\gigas.txt"
    # Limpiamos los espacios en blanco y exportamos a TXT
    (Get-Content C:\SCRIPTS\gigas.txt) | ? {$_.trim() -ne "" } | Set-Content C:\SCRIPTS\gigas.txt
    #$gigas=(Get-Content -Path "C:\SCRIPTS\gigas.txt")
#####################
# TRATAMOS LOS DATOS
#####################
    $dia=Get-date -Format "MM-dd-yyyy"
    ForEach ($file in (Get-Content -Path "C:\SCRIPTS\vhdx.txt"))
        {
            #SABER LA LINEA EN EL LISTADO DEL VHDX
            $linea= (Get-Content -Path "C:\SCRIPTS\vhdx.txt") | sls -Pattern $file | linea
            $linea=$linea.LineNumber
            #PUNTO DE CONTROL
            Write-Output "Fila $linea para valor $file"
            #BUSCAMOS EL TAMAÑO DEL PERFIL
            #HAGO UN FILTRO AL PRIMER VALOR PARA QUE NO LO CORTE
            if ($linea -eq 1) {
                 $gigas=(Get-Content -Path "C:\SCRIPTS\gigas.txt" -TotalCount $linea)
                 #PUNTO DE CONTROL
                 Write-Output "Para el disco VHDX $file el valor es $gigas GBs"
                         ####################
                         # HACEMOS UN FILTRO
                         ####################
                         $hora=Get-Date -Format "HH:mm:ss"
                         # SI EL TAMAÑO ES DE MAS DE 3GB
                         if ($gigas -ge 3)
                         {
                            #################
                            # COMPRIMIR VHDX
                            #################
                            cd "C:\Scripts\Invoke-FslShrinkDisk-master"
                            .\Invoke-FslShrinkDisk.ps1 "$file.vhdx" -Recurse -PassThru 

                            ##########################
                            # GENERA LOG DE ACCIONES
                            ##########################
                            #PUNTO DE CONTROL
                            Write-Output "Perfil mayor de 3GB"
                             Echo "$hora - Perfil VHDX de $file de $gigas GB, se comprime" >> C:\SCRIPTS\LOGS\comprimirvhdx-$dia.log
                          }

                          else
                          {
                            ##########################
                            # GENERA LOG SIN ACCIONES
                            ##########################
                            #PUNTO DE CONTROL
                            Write-Output "Perfil menor de 3GB"
                            Echo "$hora - Perfil VHDX de $file de $gigas GB. No se comprime" >> C:\SCRIPTS\LOGS\comprimirvhdx-$dia.log
                          }
            }
            Else {
                  $gigas=(Get-Content -Path "C:\SCRIPTS\gigas.txt" -TotalCount $linea)[-1]
                  #PUNTO DE CONTROL
                  Write-Output "Para el disco VHDX $file el valor es $gigas GBs"
                   ####################
                         # HACEMOS UN FILTRO
                         ####################
                         $hora=Get-Date -Format "HH:mm:ss"
                         # SI EL TAMAÑO ES DE MAS DE 3GB
                         if ($gigas -ge 3)
                         {
                            #################
                            # COMPRIMIR VHDX
                            #################
                            cd "C:\Scripts\Invoke-FslShrinkDisk-master"
                            .\Invoke-FslShrinkDisk.ps1 "$file.vhdx" -Recurse -PassThru 

                            ##########################
                            # GENERA LOG DE ACCIONES
                            ##########################
                            #PUNTO DE CONTROL
                            Write-Output "Perfil mayor de 3GB"
                            Echo "$hora - Perfil VHDX de $file de $gigas GB, se comprime" >> C:\SCRIPTS\LOGS\comprimirvhdx-$dia.log
                          }

                          else
                          {
                            ##########################
                            # GENERA LOG SIN ACCIONES
                            ##########################
                            #PUNTO DE CONTROL
                            Write-Output "Perfil menor de 3GB"
                            Echo "$hora - Perfil VHDX de $file de $gigas GB. No se comprime" >> C:\SCRIPTS\LOGS\comprimirvhdx-$dia.log
                          }
            }

        }
# ELIMINAMOS FICHERO TEMPORAL
Remove-Item C:\SCRIPTS\vhdx.txt
Remove-Item C:\SCRIPTS\gigas.txt

 

Espero os parezca interesante…ya que es gratis, comparte ;P

¿Te ha gustado la entrada SÍGUENOS EN TWITTER?

La entrada Powershell: Comprimir perfiles FSLogix se publicó primero en Blog Virtualizacion.


Viewing all articles
Browse latest Browse all 679