PSItems es un módulo de PowerShell que encuentra archivos y directorios, así como información de archivos y directorios, de forma rápida y sencilla.
Panorama General
https://github.com/PowerShell/PowerShell/releases
El desarrollador trabaja mucho con distribuciones de Linux y no había encontrado una manera en Windows para encontrar archivos o carpetas o su información de una manera RÁPIDA, entonces desarrolló este módulo o funciones. Al principio estaba buscando una alternativa al find
de Linux y desarrolló Find-Item
.
Por supuesto, todas las funciones de este módulo funcionarán en Windows, Linux y macOS.
Get-ChildItem
funciona muy bien para obtener una visión general de los archivos y carpetas actuales, pero es muy, muy lento cuando se trata de una gran cantidad de objetos del sistema de archivos. Así que decidió utilizar las clases .NET directamente y utilizar sólo las funcionalidades que realmente se necesita para el caso particular.
Desde entonces, no hace falta que molestarse con la búsqueda incorporada en el Explorador de Windows ni pelearse con llamar lentamente a Get-ChildItem
.
El término “item” en PSItems o también los nombres de las funciones individuales es un término colectivo para todos los objetos del sistema de archivos, como archivos y directorios. Por lo tanto, por ejemplo, la función se llama Find-Item
y no Find-File
, porque con ella también se pueden encontrar uniones, directorios, accesos directos, etc.
Instalación
La instalación de este módulo es sencilla, basta con instalarlo e importarlo.
Install-Module -Name PSItems
Import-Module -Name PSItems
Uso de PSItems
El uso y algunos ejemplos se pueden encontrar en la carpeta de documentación o utilizando el cmdlet Get-Help
.
Cmdlet | Descripción | Documentación |
---|---|---|
Find-Item | Función simple y rápida para encontrar cualquier elemento en el sistema de archivos (como find en Linux/unix) | Find-Item |
Get-ItemSize | Función simple y rápida para obtener el tamaño de cualquier elemento del sistema de archivos (como du en Linux/unix) | Get-ItemSize |
https://github.com/eizedev/PSItems/blob/master/docs/en-US/Find-Item.md
https://github.com/eizedev/PSItems/blob/master/docs/en-US/Get-ItemSize.md
Funciones
Obtener las funciones del módulo:
Get-Command -Module PSItems -CommandType All
CommandType Name Version Source
----------- ---- ------- ------
Alias ff -> Find-Item 0.2.3 PSItems
Alias fi -> Find-Item 0.2.3 PSItems
Alias gis -> Get-ItemSize 0.2.3 PSItems
Alias search -> Find-Item 0.2.3 PSItems
Alias size -> Get-ItemSize 0.2.3 PSItems
Function Find-Item 0.2.3 PSItems
Function Get-ItemSize 0.2.3 PSItems
Ayuda
Obtener ayuda de la función:
Get-Help Find-Item
NAME
Find-Item
SYNOPSIS
Simple and fast function for finding any item on the filesystem (like find on linux/unix)
SYNTAX
Find-Item [[-Path] <String>] [[-Name] <String[]>] [-Type <String>] [-Recurse] [-IgnoreInaccessible <Boolean>] [-As <String>] [-MatchCasing <String>] [-AttributesToSkip <String[]>] [-MatchType
<String>] [-Depth <Int32>] [-ReturnSpecialDirectories] [<CommonParameters>]
...
Pruebas y Velocidad
El sistema de prueba fue un Lenovo T480 con Windows 10 (SSD + Indexación desactivada).
Prueba 1. Directorio de Windows recursivamente – Devuelve la cadena FullName
Se devuelve un array con la ruta de todos los archivos (FullName).
Measure-Command { $windir = search C:\Windows\ '*' -Recurse -AttributesToSkip 0 }
Encontrar todos los elementos (archivos, directorios…) en el directorio C:Windows
incluyendo todos los subdirectorios (-Recurse
) así como los archivos ocultos y del sistema (-AttributesToSkip 0
) utilizando la función Find-Item
.
Se utilizó el alias search
y para el parámetro -Path
(C:\windows
) y -Name
('*'
) se utilizó la primera y segunda posición:
En aproximadamente 1 minuto la función encontró todos los archivos, directorios, etc. en el directorio completo de Windows y devolvió un array con todas las propiedades de FullName
de los elementos.
Prueba 2. Directorio de Windows de forma recursiva – Devuelve el objeto FileInfo
Se devolverá un array de objetos (FileInfo) de todos los elementos. Lo mismo que usando Get-ChildItem.
Measure-Command { $windir = search C:\Windows\ '*' -Recurse -AttributesToSkip 0 -As FileInfo }
Encontrar todos los elementos (archivos, directorios…) en el directorio C:Windows
incluyendo todos los subdirectorios (-Recurse
) así como los archivos ocultos y del sistema (-AttributesToSkip 0
) utilizando la función Find-Item
.
Se utilizó el alias search
y para el parámetro -Path
(C:\windows
) y -Name
('*'
) se utilizó la primera y segunda posición:
En unos 2 minutos la función encontró todos los archivos, directorios, etc. en el directorio completo de Windows y devolvió un array de objetos FileInfo de todos los elementos con todas las propiedades. Al igual que con Get-ChildItem, puedes simplemente seguir utilizando los objetos individuales.