jueves, 19 de enero de 2023

Power Query: Nombres de usuario en mi equipo

Antes de que comiences la lectura indicarte que este es la primera parte de un desarrollo que nos permitirá personalizar los accesos al contenido en la nube, como por ejemplo, OneDrive, DropBox, etc... siempre que tengamos dicho contenido sincronizado en local!!.

Todos sufrimos con las rutas absolutas o relativas de nuestro contenido en la nube, e intentamos desarrollar nuestro código para que pueda ser empleado en diferentes máquinas, lo que no siempre es sencillo. (lee algo más aquí)
Bajo la premisa que tenemos sincronizado nuestro contenido en nuestro equipo, en alguna unidad local (probablemente C: aunque no siempre!!) realizaremos un barrido general en busca de nuestro usuario y también de la unidad raiz donde podremos localizar la copia local sincronizada de nuestra 'nube'... lo que servirá y se adaptará en cualquier equipo de trabajo...

Dando por supuesto, quizá algún experto en sistemas pueda corregirme, que las unidades pueden ser nombradas por una sola letra (de la A a la Z), realizaremos un barrido por todas esas unidades buscando una información en concreto...
Power Query: Nombres de usuario en mi equipo

Veamos cómo.
Abriremos una consulta en blanco dentro de nuestro Editor de Power Query donde escribiremos el siguiente código M:
let
    //de la lista de letras de la A a la Z
    //concatenado con la carpeta \Users\ donde encontraremos todos los usuarios 
    //del equipo
    //verificamos cuáles existen, eliminado el resto....
    Origen=List.RemoveNulls(
            List.Transform({"A".."Z"}, 
                each 
                    let 
                    tbl=Folder.Contents(_ & ":\Users\"),
                    check=if (try tbl{0} otherwise null)<>null then tbl else null
                    in 
                    check)),

    //La lista resultante de unidades existentes con ese Carpeta
    //la convertimos en Tabla
    ConvertidoTablaRecords = Table.FromColumns({Origen},{"Registros"}),
    //y las combinamos en una única Tabla para facilitar el trabajo
    ListaContenidos = Table.Combine(ConvertidoTablaRecords[Registros]),

    Origen2=ListaContenidos,
    //Expandimos la columna de Atributos en busca de ciertas características
    //que hacen únicos a nuestros usuarios
    ExpandeAttributes = Table.ExpandRecordColumn(Origen2, 
            "Attributes", 
            {"Kind", "ReadOnly", "Hidden"}, 
            {"Kind", "ReadOnly", "Hidden"}),
    //filtramos y mostramos dos columnas importantes: Nombre del usuario y unidad de la raiz
    FiltrosTRUE_FALSE = Table.SelectRows(ExpandeAttributes, each ([Kind] = "Folder") and ([Hidden] = false) and ([ReadOnly] = false))[[Name],[Folder Path]]
in
    FiltrosTRUE_FALSE

Power Query: Nombres de usuario en mi equipo

En mi ejemplo aparecen dos usuarios, con dos unidades raiz distintas (c: y d:) ya que trabajo con dos discos duros (cada uno con un sistema operativo instalado)...
También nos podríamos topar con un serie de diferentes usuarios logados en nuestro equipo...
Los filtros aplicados en el último paso están destinados a discriminar los no deseados, y quedarnos únicamente con el nuestro.

En el siguiente artículo emplearemos el usuario y ruta conseguida para acceder a la copia local de nuestro contenido en OneDrive ;-)

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.