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