Powershell: Script búsqueda de ficheros en perfiles Citrix
Hoy os voy a enseñar un script que sirve para buscar ficheros en perfiles de una organización cuando están en diferentes tecnologías como FSLogix o UPM, incluso buscamos en la sesión cuando un perfil carga por error un perfil local.
Os explico un poco lo que hace:
- Dispongo de varias tecnologías de perfilado para Citrix, RDS,…pero también me interesan los usuarios que trabajan en local.
- Todos conectados a dominio
- Se lanza en el logon del usuario mediante GPO
- Buscamos un tipo de fichero concreto en la carpeta/subcarpetas del Escritorio
- Adicionalmente, necesito un dato dentro de cada fichero encontrado
- Preparo el script para poder modificar el valor cuando exista
- Llevo todos los resultados a CSV y TXT individuales por nombre de usuario
- Limpio rastro del script en los perfiles
Lo subo a mi perfil GitHub: https://gist.github.com/raulunzue/d6101db08c56fb3c44a85d19f6af0f8d
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# Script ElBlogdeNegu de Raúl Unzué # Se recorre el escritorio de perfiles FSLogix y UPM buscando ficheros WS # Si no hay ficheros WS genera un fichero en blanco # SABER EL USUARIO $usuario=C:\windows\system32\whoami.exe # ELIMINAR DOMINIO PARA LIMPIAR NOMBRE $usuariomodificado=$usuario.Substring(8) # Chequear si se encuentra el archivo $rutaperfil = "\\NAS01\perfiles_citrix$\$usuariomodificado.NEGU\Desktop" $Existe = Test-Path $rutaperfil $rutaperfil2 = "\\NAS01\perfiles_citrix$\$usuariomodificado.V2\Desktop" $Existe2 = Test-Path $rutaperfil2 If ($Existe -eq $True) { #Write-Host "Existe ruta .NEGU" # BUSCAR FICHEROS WS EN ESCRITORIO Get-ChildItem -Path \\NAS01\perfiles_citrix$\$usuariomodificado.NEGU\Desktop\ -Recurse -Include "*.ws" -Name | Out-file -Filepath \\NAS01\perfiles_citrix$\$usuariomodificado.NEGU\Desktop\listadows.txt # BUSCAR VARIABLE $table = @() ForEach ($file in (Get-Content \\NAS01\perfiles_citrix$\$usuariomodificado.NEGU\Desktop\listadows.txt)) { # Reemplazar texto en fichero WS #(Get-Content \\NAS01\perfiles_citrix$\$usuariomodificado.NEGU\Desktop\$file) | ForEach-Object { $_ -replace "24x80", "27x132" } | Set-Content \\NAS01\perfiles_citrix$\$usuariomodificado.NEGU\Desktop\$file #Write-Host "Fichero que estamos trabajando $file" $clave= Select-String -Path \\NAS01\perfiles_citrix$\$usuariomodificado.NEGU\Desktop\$file -Pattern 'WorkStationID=' #Extraer a texto plano variable ScreenSize Select-String -Path \\NAS01\perfiles_citrix$\$usuariomodificado.NEGU\Desktop\$file -Pattern 'ScreenSize=' > \\NAS01\aplicaciones\WS_USERS\screensize-$usuariomodificado-$file.txt # EXPORTAR VARIABLES A CSV $objRecord = New-Object psobject -Property @{Logon=$usuario;Usuario=$usuariomodificado;Fichero=$file;WorkStationID=$clave} $Table += $objrecord } } ElseIf ($Existe2 -eq $True) { #Write-Host "No existe" # BUSCAR FICHEROS WS EN ESCRITORIO Get-ChildItem -Path \\NAS01\perfiles_citrix$\$usuariomodificado.V2\Desktop\ -Recurse -Include "*.ws" -Name | Out-file -Filepath \\NAS01\perfiles_citrix$\$usuariomodificado.V2\Desktop\listadows.txt # BUSCAR VARIABLE $table = @() ForEach ($file in (Get-Content \\NAS01\perfiles_citrix$\$usuariomodificado.V2\Desktop\listadows.txt)) { # Reemplazar texto en fichero WS #(Get-Content \\NAS01\perfiles_citrix$\$usuariomodificado.V2\Desktop\$file) | ForEach-Object { $_ -replace "24x80", "27x132" } | Set-Content \\NAS01\perfiles_citrix$\$usuariomodificado.V2\Desktop\$file #Write-Host "Fichero que estamos trabajando $file" $clave= Select-String -Path \\NAS01\perfiles_citrix$\$usuariomodificado.V2\Desktop\$file -Pattern 'WorkStationID=' #Extraer a texto plano variable ScreenSize Select-String -Path \\NAS01\perfiles_citrix$\$usuariomodificado.V2\Desktop\$file -Pattern 'ScreenSize=' > \\NAS01\aplicaciones\WS_USERS\screensize-$usuariomodificado-$file.txt # EXPORTAR VARIABLES A CSV $objRecord = New-Object psobject -Property @{Logon=$usuario;Usuario=$usuariomodificado;Fichero=$file;WorkStationID=$clave} $Table += $objrecord } } Else { #Write-Host "No existe" # BUSCAR FICHEROS WS EN ESCRITORIO Get-ChildItem -Path C:\Users\$usuariomodificado\Desktop\ -Recurse -Include "*.ws" -Name | Out-file -Filepath C:\Users\$usuariomodificado\Desktop\listadows.txt # BUSCAR VARIABLE $table = @() ForEach ($file in (Get-Content C:\Users\$usuariomodificado\Desktop\listadows.txt)) { # Reemplazar texto en fichero WS #(Get-Content C:\Users\$usuariomodificado\Desktop\$file) | ForEach-Object { $_ -replace "24x80", "27x132" } | Set-Content C:\Users\$usuariomodificado\Desktop\$file #Write-Host "Fichero que estamos trabajando $file" $clave= Select-String -Path C:\Users\$usuariomodificado\Desktop\$file -Pattern 'WorkStationID=' #Extraer a texto plano variable ScreenSize Select-String -Path C:\Users\$usuariomodificado\Desktop\$file -Pattern 'ScreenSize=' > \\NAS01\aplicaciones\WS_USERS\screensize-$usuariomodificado-$file.txt # EXPORTAR VARIABLES A CSV $objRecord = New-Object psobject -Property @{Logon=$usuario;Usuario=$usuariomodificado;Fichero=$file;WorkStationID=$clave} $Table += $objrecord } } # EXPORTAMOS FICHERO CSV $table | export-csv \\NAS01\aplicaciones\WS_USERS\report-$usuariomodificado.csv -NoTypeInformation If ($Existe -eq $True) { # ELIMINAMOS FICHERO TEMPORAL Remove-Item \\NAS01\perfiles_citrix$\$usuariomodificado.NEGU\Desktop\listadows.txt } ElseIf ($Existe2 -eq $True) { Remove-Item \\NAS01\perfiles_citrix$\$usuariomodificado.V2\Desktop\listadows.txt } Else { Remove-Item C:\Users\$usuariomodificado\Desktop\listadows.txt } |
Espero os parezca interesante…
¿Te ha gustado la entrada SÍGUENOS EN TWITTER?
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?