INFORMACIÓN DEL HARDWARE y SOFTWARE MEDIANTE POWERSHELL CIM (Common Information Model). Es un estándar abierto que establece (define) como intercambiar información entre sistemas, redes, aplicaciones y servicios. WMI: Instrumentación de Administración Windows (Windows Management Instrumentation). Es la implementación de Microsoft de CIM. WMI utiliza lenguajes de scripting (VBScript, Windows PowerShell...) para gestionar local y remotamente equipos y servidores con Microsoft Windows. También está disponible un interface de línea de comandos llamado Windows Management Instrumentation Command-line (WMIC). WMI también está basado en WBEM (Web-Based Enterprise Management), un estándar que define como representar la información de un sistema operativo para facilitar su administración. En WMI toda la información del sistema se representa mediante objetos. • Define la forma en la que los recursos de Windows pueden ser accedidos, gestionados y monitorizados. • Todas las herramientas gráficas administrativas que usamos se basan en WMI. • Antes de WMI el acceso a los recursos del sistema se hacía a través de APIS Win32 WMI está diseñado por programadores que usan C/C++/C#, Microsoft Visual Basic, o lenguaje de scripting de Windows que maneja objetos Microsoft ActiveX. Un ejemplo de wmic sería: WMIC ComputerSystem where Name=“COMPUTER-NAME” call Rename Name=NewName Podríamos decir que WMI funciona como una base de datos que proporciona información muy variada del sistema. WMI está formado por varias clases que representan los distintos elementos del sistema. En lugar de utilizar WMIC usaremos PowerShell para comunicarnos con las clases de WMI/CIM, y extraer la información que nos interesa. Existen dos tipos de cmdlets para trabajar con las diferentes clases: ➢ WMI (conocido como WMI v1, más antiguo ➢ CIM (conocido como WMI v2) Microsoft ha dejado de desarrollar WMI, y no lo incluye en la versión multiplataforma PowerShell Core. Los cmdlets CIM están sustituyendo a los cmdlets WMI porque utilizan el protocolo (WinRM) para comunicarse con máquinas remotas y porque devuelven más y mejor información que WMI. CMDLETS WMI v1 Get-Command "*wmi*" -> Lista los cmdlets para trabajar con WMI: Uno de los más importantes es Get-WmiObject. Para mostrar las diferentes Clases disponibles: Get-WmiObject -list | Out-Host -Paging -> Paginamos la salida como con el comando more (Get-WmiObject -List).count -> Contabilizamos cuantas clases diferentes hay Get-WmiObject -List | Where-Object {$_.Name -like "*bios*"} -> Buscamos las clases relacionadas con un elemento / componente que nos interese. Where-Object permite filtrar información de forma similar a la cláusula WHERE en SQL Una vez encontrada la clase que nos interese, podemos ver todas las propiedades disponibles mediante el cmdlet get-member. Get-WmiObject -Class win32_Bios | get-Member -> Listado propiedades. Get-WmiObject -Class win32_Bios | fl * -> Información de la BIOS Get-WmiObject -Class win32_processor | fl * -> Información de la CPU Get-WmiObject -Class Win32_DiskDrive | fl * -> Información de los discos Get-WmiObject -Class Win32_DiskDrive | where-object {$_.Model -eq "WD-GREEN56"} Get-WmiObject -Class Win32_BaseBoard | fl * -> Información de la placa base Get-WmiObject -ClassName Win32_ NetworkAdapter | where-object {$_.DeviceID -eq 1} Get-WmiObject -ClassName Win32_NetworkAdapter -Filter "DeviceID=1"| fl -> Red Get-WmiObject -Class Win32_PhysicalMemory -> Información de la memoria RAM Get-WmiObject -Class Win32_OperatingSystem | fl * -> Información del SSOO Get-WmiObject -Class Win32_Win32_Share | fl * -> Información de los recursos compartidos Get-WmiObject -Class win32_computersystem | fl * -> Información del sistema (fabricante, dominio, propietario del equipo...) CMDLETS WMI v2 (CIM) Get-Command "*cim*" -> Lista los cmdlets para trabajar con CIM: Uno de los más importantes es Get-CimInstance. Para mostrar las diferentes Clases disponibles: Get-CimClass | Out-Host -Paging -> Paginamos la salida como con el comando more (Get-CimClass).count -> Contabilizamos cuantas clases diferentes hay Get-CimClass "*bios*" -> Buscamos las clases relacionadas con un elemento / componente que nos interese. Get-CimInstance -ClassName Win32_BIOS | fl * -> Información de la BIOS Get-CimInstance -ClassName Win32_PROCESSOR -Computername . | fl * -> Información CPU Get-CimInstance -ClassName Win32_DiskDrive -Computername . | fl * -> Información DISCOS Get-CimInstance -ClassName Win32_LogicalDisk | fl * -> Información Unidades Lógicas Get-CimInstance -ClassName Win32_BaseBoard | fl * -> Información de la placa base Get-CimInstance -ClassName Win32_Computersystem | fl * -> Información del sistema Get-CimInstance -Class Win32_NetworkAdapter -Filter "DeviceID=1"| fl -> Red Get-CimInstance -Class Win32_networkadapter | format-table -property deviceid, name, Manufacturer, adaptertype, servicename Get-CimInstance -Class Win32_PhysicalMemory -> Información de la memoria RAM Get-CimInstance -Class Win32_OperatingSystem | fl * -> Información del SSOO Get-CimInstance -Class Win32_Win32_Share | fl * -> Información de los recursos compartidos Get-CimInstance -Class win32_computersystem | fl * -> Información del sistema (fabricante, dominio, propietario del equipo...) Get-CimInstance -Class win32_VideoController | fl * -> Información de la tarjeta gráfica Get-CimInstance -Class win32_DesktopMonitor | fl * -> Información del monitor Get-CimInstance -Class win32_Battery | fl * -> Información de la batería Get-CimInstance -Class win32_PortableBattery | fl * Get-CimInstance -Class win32_Product | fl * -> Información del software