Recuerda los buenos viejos tiempos del comando dir
de DOS? ¿Qué tal el comando ls
de Linux? Si es así, el cmdlet Get-ChildItem es básicamente eso pero llevado al siguiente nivel.
De hecho, incluso tenemos dir
y ls
en PowerShell en forma de un alias. El cmdlet Get-ChildItem de PowerShell no solo puede listar archivos y carpetas en un sistema de archivos a través de la consola de PowerShell o un script de PowerShell, sino que también puede enumerar claves y valores de registro, certificados en varios almacenes de certificados e incluso Active Directory, por mencionar algunos.
Si eres un principiante o intermedio en el scripting de PowerShell, ¡asegúrate de consultar mi mini-curso GRATUITO sobre la construcción de una herramienta de PowerShell! Más de 9,000 palabras de explicación detallada e información sobre cómo construir una herramienta de PowerShell.
Para entender Get-ChildItem, primero piensa en él en relación a dir
y ls
, pero en lugar de solo archivos, trata muchos objetos como un elemento secundario y los enumera. Puedes usar el alias o el nombre completo del comando para utilizarlo.
Dado que este comando ha estado disponible desde PowerShell v1, puedes estar seguro de que funcionará con tu versión de PowerShell.
Get-ChildItem recorre un árbol
A file system is a hierarchy. It has a folder structure with files inside of folders and those folders inside of other folders. A file system is like a tree. That tree has a trunk (C:\
for example) and “branches” coming off of it (folders). In fact, we even have a tree
command.
Puedes apuntar este comando a rutas locales en la computadora local, utilizar un scriptblock remoto de PowerShell y usar Get-ChildItem
dentro de él o simplemente apuntarlo a una ruta UNC. Todos funcionan de la misma manera. Tal vez solo quiero listar todos los archivos en el directorio actual.
Los proveedores de PowerShell
Microsoft se dio cuenta de que navegar por esta estructura “en forma de árbol” del sistema de archivos también podría aplicarse a otros sistemas. Un sistema de archivos “en forma de árbol” tiene carpetas y archivos, pero un registro tiene claves y valores, mientras que el sistema de certificados en Windows tiene almacenes y certificados dentro de esos almacenes. Cada una de estas áreas específicas puede representarse como un árbol, de ahí que naciera el proveedor de PowerShell. ¿Por qué toda esta charla sobre los proveedores de PowerShell? Porque el cmdlet Get-ChildItem
es parte de los cmdlets *-Item
que interactúan con las unidades de PowerShell que expone cada proveedor.
El cmdlet Get-ChildItem
puede generar cualquier cantidad de objetos en una unidad de PowerShell y le permite procesar cada elemento a través del pipeline o quizás en un bucle foreach de PowerShell. Entiende el concepto de una unidad de PowerShell que le permite especificar una Ruta
de una carpeta del sistema de archivos, una clave de registro o un almacén de certificados todo en uno.
Puedes ver a continuación que este comando puede enumerar la carpeta C:\, la raíz del Usuario Actual (HKEY Current User) así como el almacén de certificados de PowerShell.
Filtrado
El comando Get-ChildItem
de PowerShell no solo puede extraer todos los objetos en una unidad, sino que también puede filtrar la información a través de varios parámetros diferentes: Filter
, Include
y Exclude
. Siempre querrás usar el ubicuo parámetro Filter
de PowerShell cuando sea posible. Este parámetro pasa directamente la sintaxis de filtro al proveedor individual. Aunque mucho más rápido, esta sintaxis depende únicamente del proveedor que se esté consultando.
Por ejemplo, una sintaxis de Filter
de Name -eq 'foo'
puede ser completamente aceptable al consultar archivos, pero no funcionará en absoluto al consultar el registro porque ¡el proveedor de registro ni siquiera tiene un filtro!
Sin embargo, cuando todo lo demás falla, siempre tienes los parámetros Include
y Exclude
también.
Este comando en PowerShell también tiene algunos parámetros específicos del sistema de archivos como Force
, que mostrará archivos y carpetas ocultos, File
y Directory
, que solo encuentran archivos o carpetas. Echa un vistazo al desglose completo de Get-ChildItem
a través de Get-Help
o en la documentación de Microsoft.
Otra característica interesante de Get-ChildItem
es su capacidad para resolver rutas cuando se utiliza el carácter comodín. En PowerShell, el carácter comodín generalmente representa cualquier cosa. Por ejemplo, si deseas ver todos los archivos con la extensión de archivo .txt, simplemente especifica la ruta a la carpeta y *.txt
.
Podríamos también filtrar por atributos de archivo. Tal vez solo queremos encontrar los archivos de solo lectura en una carpeta.
Resumen
Este comando PowerShell es uno de esos cmdlets que usarás repetidamente. La mayor parte del tiempo, probablemente estarás utilizando el proveedor FileSystem, pero es importante recordar que este cmdlet es capaz de mucho más. Úsalo para consultar archivos, carpetas, claves de registro, valores de registro, certificados, usuarios de Active Directory, computadoras o incluso variables de entorno, funciones ¡y más!
Cuando tengas dudas, ejecuta el comando Get-PSDrive
para ver una lista de todas las unidades de PowerShell cargadas que Get-ChildItem
puede consultar por ti.