Windows PowerShell utiliza el sustantivo Item para hacer referencia a elementos que se encuentran en una unidad de Windows PowerShell. Cuando utilice el proveedor FileSystem de Windows PowerShell, un Item puede ser un archivo, una carpeta o la unidad de Windows PowerShell. La enumeración y el uso de estos elementos constituyen una importante tarea básica en la mayoría de las configuraciones administrativas y, por este motivo, queremos tratar detenidamente estas tareas.
Enumerar archivos, carpetas y claves del Registro (Get-ChildItem)
Dado que obtener una colección de elementos de una ubicación concreta es una tarea muy habitual, el cmdlet Get-ChildItem se ha diseñado específicamente para devolver todos los elementos incluidos en un contenedor, como por ejemplo una carpeta.
Si desea devolver todos los archivos y carpetas que contiene directamente la carpeta C:\Windows, escriba:
PS> Get-ChildItem -Path C:\Windows Directory: Microsoft.Windows 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 la que se mostraría al escribir el comando dir en Cmd.exe o el comando ls en un shell de comandos de UNIX.
Puede usar parámetros del cmdlet Get-ChildItem para crear listas muy complejas. Analizaremos varios escenarios a continuación. Para ver la sintaxis del cmdlet Get-ChildItem, escriba:
PS> Get-Command -Name Get-ChildItem -Syntax
Estos parámetros se pueden combinar y comparar para obtener resultados muy personalizados.
Crear una lista de todos los elementos contenidos (-Recurse)
Para ver tanto los elementos incluidos en una carpeta de Windows como los elementos contenidos en las subcarpetas, utilice el parámetro Recurse de Get-ChildItem. La lista mostrará todo el contenido de la carpeta de Windows, así como los elementos incluidos en las subcarpetas. Por ejemplo:
PS> Get-ChildItem -Path C:\WINDOWS -Recurse Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 1852416 AcGenral.dll ...
Filtrar elementos por nombre (-Name)
Para mostrar únicamente los nombres de los elementos, utilice el parámetro Name de Get-Childitem:
PS> Get-ChildItem -Path C:\WINDOWS -Name addins AppPatch assembly ...
Forzar la presentación de los elementos ocultos (-Force)
Los elementos que no se muestran normalmente en el Explorador de Windows o en Cmd.exe tampoco se muestran en el resultado del comando Get-ChildItem. Para mostrar los elementos ocultos, utilice el parámetro Force de Get-ChildItem. Por ejemplo:
Get-ChildItem -Path C:\Windows -Force
Este parámetro recibe el nombre de Force porque invalida forzosamente el comportamiento normal del comando Get-ChildItem. El parámetro Force se usa a menudo y fuerza una acción que un cmdlet no realizaría normalmente, aunque no ejecutará ninguna acción que pueda poner en peligro la seguridad del sistema.
Usar caracteres comodín para buscar nombres de elementos
El comando Get-ChildItem acepta caracteres comodín en la ruta de acceso de los elementos que se van a enumerar.
Dado que el motor de Windows PowerShell controla la búsqueda con caracteres comodín, todos los cmdlets que aceptan caracteres comodín utilizan la misma notación y tienen el mismo comportamiento en la búsqueda de coincidencias. La notación de caracteres comodín de Windows PowerShell es la siguiente:
-
El asterisco (*) busca cero o más instancias de cualquier carácter.
-
El signo de interrogación (?) busca exactamente un carácter.
-
Los caracteres de corchete izquierdo ([) y corchete derecho (]) rodean un conjunto de caracteres de los que se van a buscar coincidencias.
A continuación se muestran algunos ejemplos.
Para buscar todos los archivos del directorio Windows que tengan la extensión .log y exactamente cinco caracteres en el nombre base, escriba el comando siguiente:
PS> Get-ChildItem -Path C:\Windows\?????.log Directory: Microsoft.Windows 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 ...
Para buscar todos los archivos del directorio Windows que comiencen por la letra x, escriba:
Get-ChildItem -Path C:\Windows\x*
Para buscar todos los archivos cuyo nombre comience por la letra x o z, escriba:
Get-ChildItem -Path C:\Windows\[xz]*
Excluir elementos (-Exclude)
Puede excluir elementos específicos usando el parámetro Exclude de Get-ChildItem. Este parámetro permite aplicar filtros complejos en una sola instrucción.
Por ejemplo, suponga que desea buscar el archivo DLL del servicio de hora de Windows en la carpeta System32 y todo lo que recuerda del nombre del archivo DLL es que comienza por "W" y que contiene "32".
Una expresión como w*32*.dll encontrará todos los archivos DLL que cumplan las condiciones indicadas, pero también puede devolver los archivos DLL de compatibilidad con las versiones Windows 95 y Windows de 16 bits que tienen "95" o "16" en sus nombres. Para omitir los archivos cuyo nombre contenga estos números, use el parámetro Exclude con el patrón *[9516]*:
PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude *[9516]*
Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\System32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 174592 w32time.dll
-a--- 2004-08-04 8:00 AM 22016 w32topl.dll
-a--- 2004-08-04 8:00 AM 101888 win32spl.dll
-a--- 2004-08-04 8:00 AM 172032 wldap32.dll
-a--- 2004-08-04 8:00 AM 264192 wow32.dll
-a--- 2004-08-04 8:00 AM 82944 ws2_32.dll
-a--- 2004-08-04 8:00 AM 42496 wsnmp32.dll
-a--- 2004-08-04 8:00 AM 22528 wsock32.dll
-a--- 2004-08-04 8:00 AM 18432 wtsapi32.dll
Combinar parámetros de Get-ChildItem
Puede utilizar varios de los parámetros del cmdlet Get-ChildItem en un mismo comando. Antes de combinar parámetros, asegúrese de que entiende cómo se pueden realizar búsquedas de coincidencias con caracteres comodín. Por ejemplo, el siguiente comando no devuelve ningún resultado:
PS> Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll
No se obtienen resultados, aunque hay dos archivos DLL que comienzan por la letra "z" en la carpeta Windows.
El motivo por el que no se devuelven resultados es que hemos especificado el carácter comodín como parte de la ruta de acceso. Aunque el comando era recursivo, el cmdlet Get-ChildItem ha limitado los elementos a los incluidos en la carpeta Windows cuyo nombre termina en ".dll".
Para especificar una búsqueda recursiva de archivos cuyo nombre coincide con un patrón especial, utilice el parámetro -Include:
PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32\Setup Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 8261 zoneoc.dll Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 337920 zipfldr.dll