Trabajar con archivos, carpetas y claves del Registro

Este ejemplo solo se aplica a las plataformas Windows.

En PowerShell se usa el término Item para hacer referencia a los elementos contenidos en una unidad de PowerShell. Cuando se trabaja con el proveedor FileSystem de PowerShell, un elemento Item puede ser un archivo, una carpeta o la unidad de PowerShell. Enumerar estos elementos y trabajar con ellos son tareas críticas básicas en la mayoría de las configuraciones administrativas, de modo que conviene abordar estas tareas en profundidad.

Enumeración de archivos, carpetas y claves del Registro

Dado que la obtención de una colección de elementos desde una ubicación determinada es una tarea común, el cmdlet Get-ChildItem está diseñado específicamente para devolver todos los elementos que se encuentren dentro de un contenedor, por ejemplo, una carpeta.

Si desea que se devuelvan todos los archivos y carpetas contenidos directamente dentro de la carpeta C:\Windows, escriba:

PS> Get-ChildItem -Path C:\Windows
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-16   8:10 AM          0 0.log
-a---        2005-11-29   3:16 PM         97 acc1.txt
-a---        2005-10-23  11:21 PM       3848 actsetup.log
...

La lista es similar a lo que se obtendría si se especificara el comando dir en cmd.exe o el comando ls en un shell de comandos de UNIX.

Puede confeccionar listas complejas mediante los parámetros del cmdlet Get-ChildItem. La sintaxis del cmdlet Get-ChildItem se puede ver escribiendo lo siguiente:

Get-Command -Name Get-ChildItem -Syntax

Estos parámetros se pueden mezclar y relacionar para obtener resultados muy personalizados.

Enumeración de todos los elementos contenidos

Para ver tanto los elementos que hay dentro de una carpeta de Windows como todos los elementos de sus subcarpetas, use el parámetro Recurse de Get-ChildItem. La lista muestra todos los elementos dentro de la carpeta de Windows y los elementos de sus subcarpetas. Por ejemplo:

PS> Get-ChildItem -Path C:\WINDOWS -Recurse

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM    1852416 AcGenral.dll
...

Filtrado de elementos por nombre

Para mostrar solo los nombres de los elementos, use el parámetro Name de Get-Childitem:

PS> Get-ChildItem -Path C:\WINDOWS -Name
addins
AppPatch
assembly
...

Enumeración forzosa de los elementos ocultos

Los elementos que están ocultos en el Explorador de archivos o cmd.exe no se muestran en la salida de un comando Get-ChildItem. Para mostrar los elementos ocultos, use el parámetro Force de Get-ChildItem. Por ejemplo:

Get-ChildItem -Path C:\Windows -Force

Este parámetro se llama Force porque permite anular de manera forzada el comportamiento normal del comando Get-ChildItem. Force es un parámetro muy usado que fuerza una acción que un cmdlet normalmente no realizaría, si bien no puede llevar a cabo ninguna acción que ponga en peligro la seguridad del sistema.

Coincidencia de nombres de elementos con caracteres comodín

El comando Get-ChildItem acepta caracteres comodín en la ruta de acceso de los elementos que se van a enumerar.

Dado que las coincidencias con caracteres comodín se controla mediante el motor de PowerShell, todos los cmdlets que acepten caracteres comodín usan la misma notación y tienen el mismo comportamiento de búsqueda de coincidencias. La notación de caracteres comodín de PowerShell incluye:

  • El asterisco (*) coincide con cero o más repeticiones de cualquier carácter.
  • El signo de interrogación (?) coincide exactamente con un carácter.
  • Los caracteres de corchete de apertura ([) y de cierre (]) rodean un juego de caracteres que debe coincidir.

A continuación presentamos algunos ejemplos de cómo funciona la especificación de caracteres comodín.

Escriba el siguiente comando para encontrar todos los archivos en el directorio de Windows con el sufijo .log y exactamente cinco caracteres en el nombre base:

PS> Get-ChildItem -Path C:\Windows\?????.log

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
...
-a---        2006-05-11   6:31 PM     204276 ocgen.log
-a---        2006-05-11   6:31 PM      22365 ocmsn.log
...
-a---        2005-11-11   4:55 AM         64 setup.log
-a---        2005-12-15   2:24 PM      17719 VxSDM.log
...

Escriba lo siguiente para encontrar todos los archivos que comienzan por la letra x en el directorio de Windows:

Get-ChildItem -Path C:\Windows\x*

Escriba lo siguiente para encontrar todos los archivos cuyos nombres comienzan por "x" o "z":

Get-ChildItem -Path C:\Windows\[xz]*

Para obtener más información sobre los caracteres comodín, vea el artículo Caracteres comodín.

Exclusión de elementos

Puede excluir elementos concretos mediante el parámetro Exclude de Get-ChildItem. Esto le permite realizar filtrados complejos en una sola instrucción.

Por ejemplo, imagine que está buscando el archivo .dll del servicio de hora de Windows en la carpeta System32 y solo recuerda que el nombre del archivo .dll comienza por "W" y contiene "32".

Una expresión como w*32*.dll buscará todos los archivos .dll que cumplan las condiciones, pero es posible que quiera filtrar aún más los archivos y omitir los archivos Win32. Puede omitir estos archivos mediante el parámetro Exclude con el patrón win*:

PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude win*

    Directory: C:\WINDOWS\System32

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           3/18/2019  9:43 PM         495616 w32time.dll
-a---           3/18/2019  9:44 PM          35328 w32topl.dll
-a---           1/24/2020  5:44 PM         401920 Wldap32.dll
-a---          10/10/2019  5:40 PM         442704 ws2_32.dll
-a---           3/18/2019  9:44 PM          66048 wsnmp32.dll
-a---           3/18/2019  9:44 PM          18944 wsock32.dll
-a---           3/18/2019  9:44 PM          64792 wtsapi32.dll

Mezcla de parámetros Get-ChildItem

Puede usar varios parámetros del cmdlet Get-ChildItem en el mismo comando. Antes de mezclar parámetros, asegúrese de que comprende el concepto de búsqueda de coincidencias con caracteres comodín. Por ejemplo, el siguiente comando no devuelve ningún resultado:

Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll

No hay ningún resultado, a pesar de que hay dos archivos DLL que comienzan por la letra "z" en la carpeta de Windows.

No se devolvieron resultados porque hemos especificado el carácter comodín como parte de la ruta de acceso. Aunque el comando es recursivo, el cmdlet Get-ChildItem ha restringido los elementos a aquellos que están en la carpeta de Windows y cuyos nombres terminan en .dll.

Para especificar una búsqueda recursiva de archivos cuyos nombres coinciden con un patrón especial, use el parámetro Include.

PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32\Setup

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM       8261 zoneoc.dll

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM     337920 zipfldr.dll