🎃 Grandes descuentos en libros en línea, eformaciones y vídeos*. Código CALABAZA30. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Windows PowerShell
  3. Buscar y recopilar información
Extrait - Windows PowerShell Administrar puestos cliente Windows (2a edición)
Extractos del libro
Windows PowerShell Administrar puestos cliente Windows (2a edición)
2 opiniones
Volver a la página de compra del libro

Buscar y recopilar información

Introducción

Como administrador, a menudo tendrá que recopilar información en los puestos de trabajo que ejecutan los scripts. Saber recopilar información, pero sobre todo saber dónde encontrarla, es primordial, pues sirve, por ejemplo, para implementar estructuras condicionales (If, ElseIf, Else) en un script. En efecto, en función de una o varias condiciones, puede hacer que el script no ejecute las mismas líneas de comandos.

La recopilación de información también puede servir para auditar los puestos de trabajo, y así recuperar información sobre los distintos componentes de hardware que los componen. Esto puede permitir, por ejemplo, reparar el conjunto de equipos que posean un componente que el fabricante haya declarado como defectuoso, y llevar a cabo rápidamente su sustitución.

Tras la lectura de este capítulo, sabrá cómo recuperar la mayoría de la información, tanto sobre el hardware como sobre el software. Esto le permitirá realizar correctamente el conjunto de tareas que quiera llevar a cabo en función de la máquina que ejecuta las líneas de comandos PowerShell.

Buscar archivos

Windows integra de manera nativa una herramienta de búsqueda de archivos accesible desde el Explorador de archivos. Con Windows PowerShell, es posible realizar este tipo de búsqueda, únicamente con el cmdlet Get-Child Item, visto anteriormente. La búsqueda está cada vez más presente en Windows, y la cantidad de datos es cada vez mayor. Conviene saber realizar búsquedas avanzadas con Windows PowerShell.

1. Buscar archivos en función de sus propiedades

Comenzaremos por una búsqueda en función del tipo de archivo, por ejemplo los archivos de datos de Outlook, cuya extensión es .pst. Para buscar la existencia de estos archivos en el conjunto del disco C:, escriba:

Ejemplo:

PS C:\Windows\system32> Get-ChildItem C:\ -Filter *.pst -Recurse  
  
  
   Directory: C:\CopiaDeSeguridad  
  
  
Mode                LastWriteTime     Length Name  
----                -------------     ------ ----  
-a---        24/03/2014     17:53  190989312 Archive2013.pst  
  
  
   Directory: C:\Users\Julien\Outlook  
  
  
Mode                LastWriteTime     Length Name  
----                -------------     ------ ----  
-a---        11/12/2011     13:45 1527792640 Archive2013.pst  
-a---        29/01/2012     15:21 1003635712 Outlook.PST 

De este modo, puede buscar todos los tipos de archivo, desde el punto del árbol seleccionado. En efecto, resulta inútil buscar en una partición completa los datos si uno sabe dónde se encuentran: esto...

Comparar objetos

Compare-Object permite comparar dos objetos entre sí: el primero se indica mediante el parámetro -ReferenceObject, mientras que el segundo se indica con el parámetro -DifferenceObject. De este modo, es posible comparar el contenido de dos archivos de texto, registros, etc. Compare-Object está bien adaptado para comparar el contenido de dos elementos que contengan texto, o propiedades de objetos.

1. Comparar dos archivos de texto

El resultado devuelto por Compare-Object es un indicador para cada elemento comparado. Así, todo elemento correspondiente a la referencia se indica con el símbolo <=, y todo elemento correspondiente a la diferencia, con el símbolo =>. Especificando el parámetro -IncludeEqual, todo lo que sea común a ambos objetos de referencia y de diferencia se mostrará por pantalla con el indicador ==.

Ejemplo 1: comparación de dos archivos de texto

PS C:\Windows\system32> Compare-Object -ReferenceObject (Get-Content  
C:\Temp\ref.txt) -DifferenceObject (Get-Content C:\Temp\dif.txt)  
  
InputObject                                                 SideIndicator  
-----------                                                 -------------  
Este archivo se llama dif.txt, y es el objeto de diferencia. =>  
Este archivo se llama ref.txt, y es el objeto de referencia.  <= 

Ambos archivos solo se diferencian en una línea. Así, el símbolo devuelto por SideIndicator indica con claridad qué línea está únicamente presente en función del objeto de referencia o de diferencia.

Si retomamos el ejemplo anterior, agregando el parámetro -IncludeEqual, verá que se muestran otras líneas de los archivos de texto:

PS C:\Windows\system32> Compare-Object -ReferenceObject (Get-Content  
C:\Temp\ref.txt) -DifferenceObject (Get-Content C:\Temp\dif.txt)  
-IncludeEqual  
  
InputObject                                                ...

Recuperar la información general del equipo

Es posible recuperar la información general del equipo a través del cmdlet Get-ComputerInfo. El conjunto de información devuelto por este cmdlet es una consolidación de diversos elementos que pueden recuperarse a través de consultas WMI: información acerca del hardware (procesador, tarjeta de red, etc.), la BIOS, el sistema operativo, incluyendo su configuración del sistema (nombre, dominio, etc.), y también parámetros regionales (reloj, idioma y región).

Si bien el uso de consultas WMI se explica en la sección Obtener información gracias a las clases WMI, Get-ComputerInfo permite recuperar rápidamente información genérica relativa al sistema, sin necesidad de poseer conocimientos previos acerca de las clases WMI.

Get-ComputerInfo solo permite mostrar información, de modo que puede utilizarse sin ningún parámetro.

Sin embargo, el cmdlet puede recibir un parámetro para filtrar las propiedades devueltas por el cmdlet.

Parámetro

Descripción

-Property<String[]>

Permite recuperar las propiedades correspondientes a la cadena de caracteres especificada. Se admite el uso del carácter comodín * (wildcard).

He aquí un ejemplo completo de la información que se obtiene con Get-ComputerInfo en una máquina Hyper-V:

PS C:\Users\Administrador> Get-ComputerInfo 
 
 
WindowsBuildLabEx                                       : 17763.1.amd64fre.rs5_release.180914-1434 
WindowsCurrentVersion                                   : 6.3 
WindowsEditionId                                        : ServerStandardEval 
WindowsInstallationType                                 :...

Las variables de entorno

Como ha visto en el capítulo Las unidades de Windows PowerShell, existe una unidad que permite leer las variables de entorno (Env:). Contiene las variables de entorno propias del sistema operativo y de la sesión del usuario actual.

Estas variables dinámicas y globales al sistema permiten pasar información entre los distintos procesos ejecutados por Windows. Proporcionan información en función de la configuración de Windows en el puesto de trabajo.

Tomemos un ejemplo sencillo, con la variable $env:USERPROFILE: esta variable indica la ruta de acceso al perfil del usuario que tiene la sesión abierta. Si se autentica con otra cuenta de usuario, la ruta de acceso es diferente.

Así, para un script PowerShell que pueda ejecutarse sobre puestos de trabajo con configuraciones completamente diferentes, conviene utilizar siempre que sea posible las variables de entorno.

Estas variables se definen automáticamente cuando se inicia una sesión de PowerShell. Para ver el conjunto de variables de entorno y obtener un resumen, puede ejecutar el siguiente comando:

PS C:\Windows\System32> Get-ChildItem Env: 
 
Name                           Value 
----                           ----- 
ALLUSERSPROFILE                C:\ProgramData 
APPDATA                        C:\Users\Administrador\AppData\Roaming 
CommonProgramFiles             C:\Program Files\Common Files 
CommonProgramFiles(x86)        C:\Program Files (x86)\Common Files 
CommonProgramW6432             C:\Program Files\Common Files 
COMPUTERNAME                   WIN-F750E8ANLO4 
ComSpec                        C:\Windows\system32\cmd.exe ...

Obtener información gracias a las clases WMI

Los objetos WMI permiten buscar información. Información que puede estar vinculada con la máquina (BIOS, configuración del hardware, etc.) y con Windows (configuración, aplicaciones instaladas, etc.), todo ello accesible a través de un único cmdlet: Get-WmiObject.

WMI (Windows Management Instrumentation) es una API (Application Programming Interface) creada en 1998 por Microsoft. Su objetivo es simplificar la administración en un entorno distribuido, para facilitar el intercambio de información en un entorno compuesto de equipos no homogéneos.

La base WMI está compuesta de clases, que representan una familia de elementos. Cada una de estas clases contiene información que es fácil de explotar con Windows PowerShell. También es posible interactuar con el sistema operativo, el hardware y las aplicaciones a través de WMI a través de métodos, aunque este no es el objetivo de este capítulo. Veremos un conjunto de clases y sus propiedades para recuperar información y, a continuación, explotar estos datos en función de sus objetivos.

La lista de clases es extensa, muy extensa; para hacerse una idea, puede ejecutar el siguiente comando:

PS C:\Windows\system32> Get-WmiObject -List  
  
  
  NameSpace: ROOT\cimv2  
  
Name                            Methods          Properties  
----                            -------          ----------  
CIM_Indication                  {}               {CorrelatedIndic  
CIM_ClassIndication             {}               {ClassDefinition  
CIM_ClassDeletion               {}               {ClassDefinition  
CIM_ClassCreation               {}               {ClassDefinition  ...

Actualizaciones

Otro aspecto importante en un puesto de trabajo es poder conocer las actualizaciones instaladas. Están todas referenciadas por un número de KB (Knowlegde Base). Microsoft despliega generalmente parches de seguridad el segundo martes de cada mes (Patch Tuesday), con el objetivo de que los administradores informáticos puedan comprobar y validar estos correctivos antes de aplicarlos de manera más generalizada en la infraestructura de una empresa. Sin embargo, Microsoft puede publicar parches de seguridad en cualquier momento.

Tenga en cuenta que las actualizaciones propuestas por Windows Update no lo son solamente para el sistema operativo Windows. Entre ellas podemos encontrar parches de seguridad para la suite Office así como para otros productos.

1. Mostrar las actualizaciones instaladas

Gracias a PowerShell, es fácil recuperar la lista de actualizaciones instaladas. Con un único comando, se muestra diversa información: el identificador de la revisión (número de KB), la cuenta de usuario que ha realizado la actualización, así como la fecha de instalación. Se utiliza el cmdlet Get-HotFix.

He aquí los parámetros:

Parámetro

Descripción

-ComputerName<String[]>

Especifica uno o varios equipos remotos.

-Credential<PSCredential>

Especifica una cuenta de usuario que posee permisos para ejecutar esta acción. El valor por defecto es el usuario actual.

-Description<String[]>

Obtiene únicamente las revisiones con una descripción concreta. Se admiten los caracteres comodín.

-Id<String[]>

Obtiene únicamente las revisiones con los ID de revisión específicos.

Ejemplo: recupera la lista de KB instaladas en el equipo local

PS C:\Windows\System32> Get-HotFix 
 
Source        Description      HotFixID    InstalledBy      InstalledOn 
------        -----------      --------    -----------      ----------- ...