PowerShell para principiantes (Parte 10): Filtrado y Objeto dónde

Ya hemos aprendido mucho sobre PowerShell. La última vez que trabajamos con WMI: PowerShell para principiantes (Parte 9): Obtenga todo de Windows con PowerShell y WMI Ahora, en mi opinión, es el mejor momento para centrarse en el tema «Filtrado con PowerShell». Pero primero, veamos el ejercicio de la última parte.

Todas las partes de la serie se pueden encontrar aquí: PowerShell para principiantes (Serie)

Repaso (Parte 9)

Aquí está la tarea y la solución de la parte 9:

Recuperar información sobre el disco duro. Utilice Get – WmiObject o Get-CimInstance. Primero, busque el objeto WMI y, una vez que lo haya encontrado, muestre el Nombre, las Particiones, el Modelo, el Firmware y el Número de serie.

Primero, necesitamos averiguar el nombre de la instancia de WMI. Dado que la tarea se refiere al disco duro, podríamos buscar *disk*, por ejemplo.

Get-WmiObject *disk* -List

Unbenannt.PNG

Win32_DiskDrive suena bien. Recuerde el método de dos pasos de la parte 8 para obtener más rendimiento de PowerShell:

Get-CimInstance win32_diskdrive | Get-Member

Allí encontrará los atributos adecuados. Ahora use Select-Object para obtenerlos todos.

Get-CimInstance Win32_DiskDrive | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Unbenannt.PNG

Revisión

WMI (Instrumentos de administración de Windows) proporciona acceso de lectura y escritura a casi todos los ajustes de Windows. Hay dos cmdlets importantes: Get-WmiObject y Get-CimInstance.

¿Por qué filtrar?

El filtrado es una tecnología clave en PowerShell. Una vez que sepas cómo filtrar, obtendrás más de PowerShell.

Bueno, mi tarea para esta parte es explicar por qué el filtrado es importante. Ok, digamos que tiene más de un disco duro. La salida anterior muestra todos los discos duros. Pero desea mostrar solo los discos duros de Samsung, por ejemplo.

Unbenannt.PNG

¿Por qué querría hacer esto? Tal vez su jefe le pregunte cuántos discos Samsung están en uso. En TODOS los ordenadores. Recuerde que WMI y PowerShell le permiten realizar consultas remotas. Ok volver al tema. Solo queremos el SSD Samsung con 500 GB. Ver el parámetro de filtro!

Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Unbenannt.PNG

Lo siguiente es un poco fuera de lo común y para nerds de PowerShell más avanzados, pero ¿por qué no? El siguiente comando obtiene todos los SSD Samsung de todos los equipos de dominio, pero no de los servidores.

Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" -ComputerName (Get-ADComputer -Filter {operatingsystem -notlike '*server*'}).Name | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Si tus colegas piensan que te enfrentas a un problema irresoluble, simplemente pulsa los botones y muéstrales lo que puedes hacer. Ok

Ok, vamos a los ejemplos para principiantes.

Filtrar objetos

¿Recuerda el comando Get-ChildItem? He usado este comando muy a menudo en esta serie.

Si ejecuta Get-Help Get-ChildItem, encontrará muchos ejemplos de filtrado en la ayuda.

Get-Help Get-ChildItem -Online

Prefiero usar la ayuda local.

Get-Help Get-ChildItem -Examples

Unbenannt.PNG

¿Qué hemos aprendido hasta ahora?

El filtrado es una tecnología clave en PowerShell. Una vez que entienda cómo filtrar, obtendrá más de PowerShell.

Filtrar objetos de Active Directory

Si es un profesional de TI, probablemente trabaje en un entorno de Active Directory. El filtrado es una técnica clave cuando se trabaja con objetos de Active Directory.

El siguiente comando utiliza el parámetro Filtro para obtener todos los usuarios que están deshabilitados:

Get-ADUser -Filter {enabled -eq 'false'} | Select-Object Name

Unbenannt.PNG

Es posible que se pregunte cómo conozco los nombres de los atributos. Recuerde el método de 2 pasos para sacar más provecho de los objetos: 1. utilice Get-Member 2. utilice Select-Object.

Unbenannt.PNG

El parámetro de filtro

Echemos un vistazo. ¿Qué comandos utilizan el parámetro filtro? Tenga en cuenta que estoy en un controlador de dominio.

Get-Command -ParameterName Filter

Como puede ver, el parámetro filtro se utiliza principalmente en los comandos de Active Directory. Y tengo que admitir que siempre he utilizado el parámetro filtro solo para Active Directory. Así son las cosas. Entonces, concentrémonos en Active Directory. Digamos que queremos que todos los Equipos de dominio (Sistema operativo de servidor y sistema operativo de cliente) se ordenen por sistema operativo. Para ello tenemos que utilizar el parámetro filter con *.

Get-ADComputer -Filter * -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address | Sort-Object OperatingSystem | Select-Object Name,OperatingSystem

Unbenannt.PNG

En términos de filtrado, esta fue una tarea sencilla.

El método de filtrado

Ahora tratamos de obtener todos los equipos que tienen instalado Windows 10. Para esto, tenemos que poner el parámetro filtro en corchetes curvos.

Get-ADComputer -Filter {operatingsystem -like '*windows 10*'}

Es hora de romper los detalles.

Los soportes

Colocan el filtro en soportes curvos.

Unbenannt.PNG

Los atributos

A continuación, descubra el nombre de las propiedades (atributos). Ya lo hemos discutido en PowerShell para principiantes (Parte 8): El poder de PowerShell: Ponerse en contacto con Objetos (Get – Member, Select-Object). Recuerde el método de dos pasos!

Unbenannt.PNG

Get-ADComputer client01 -Properties * | Get-Member

Unbenannt.PNG

Nota al margen: Anote el parámetro propiedades. En Active Directory no todas las propiedades se muestran de forma predeterminada.

Los operadores

Utilizan a continuación un operador.

Unbenannt.PNG

Un operador podría ser-like, – as, – equal, – ne y así sucesivamente This Para obtener más información sobre los parámetros, escriba

help about_operators

Esto abre un archivo de texto que se almacena en su computadora.

La instrucción

Si queremos filtrar algo, necesitamos una condición. Esta condición debe colocarse entre comillas.

Unbenannt.PNG

Revisar

Si está trabajando con filtros, consulte primero la sección de ayuda. Los filtros generalmente se colocan entre paréntesis. A menudo también se utiliza un operador.

Algunos ejemplos de filtros más without sin hablar mucho

Buscando usuarios que tengan un número de contraseñas erróneas de 0. Este es un ejemplo de la cuenta de Petra:

Unbenannt.PNG

Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name

Unbenannt.PNG

Buscar usuarios que tengan un número de contraseñas erróneas de 0 y estén habilitados. (Verás que Petra no está habilitado).

Get-ADUser -Filter {(badpwdcount -eq '0') -and (enabled -eq 'true')} | Select-Object Name

Unbenannt.PNG

Muestra todos los equipos de dominio de Windows Server, pero solo aquellos que ejecutan Windows Server 2016 y cuyos nombres comienzan con DC.

Get-ADComputer -Filter {(operatingsystem -like '*2016*') -and (name -like 'dc*')}

Unbenannt.PNG

Pero a veces tenemos que encontrar otra manera. Es decir, cuando no hay filtrado disponible. Luego usamos Where-Object.

Filtrado con where-Object

Dónde Objeto está siempre en el lado derecho de la tubería. Filtrado a la izquierda. Lo que eso significa, los pros y los contras al final del post. Para esta parte, nos concentraremos en Dónde-Objeto.

Estos son algunos ejemplos de la ayuda de PowerShell.

Get-Process | Where-Object {$_.handles -gt 200 -and $_.name -eq "svchost"}
Get-ChildItem c:\scripts | Where-Object {$_.length -gt 100000}

sin Embargo, me gustaría utilizar un ejemplo de uno de mis contribuciones.

Get-Hotfix | Where-Object HotfixID -like KB31*

Unbenannt.PNG

preste atención a HotFixID. Se refiere a un atributo.

El procedimiento recomendado (debido a la compatibilidad con versiones anteriores) se ve así:

Get-Hotfix | Where-Object {$_.HotfixID -like 'KB31*'}

Unbenannt.PNG

Ahora hay algo nuevo. ¿Qué significa??

$ _ es una variable que itera sobre cada objeto / elemento pasado desde la tubería anterior. En pocas palabras: tome el hotfixID de cada objeto que proviene de la tubería.

Filtrado frente a Objeto-Dónde

Si no hay filtro disponible, utilice Objeto-Dónde. Si puedes usar un filtro en el lado izquierdo de la tubería, ¡úsalo! ¿Por qué? Bueno, es una diferencia si envía 1000 objetos a través de la tubería o solo 500, en el caso de Where-Object, todos los objetos deben pasar a través de la tubería y solo entonces se filtran. Recuerde la tubería de la parte 7: PowerShell para principiantes (Parte 7): La tubería (y muchos ejemplos con los que jugar)

Repaso

Donde-Object está siempre en el lado derecho de la tubería. Filtrado a la izquierda. Si tiene la opción de elegir entre un filtro en el lado izquierdo de la tubería o Where-Object en el lado derecho, elija el lado izquierdo.

Ejercicio

Aquí está el ejercicio hasta la siguiente parte.

Where-Object:

Use Get-Service y Where-Object para mostrar solo los servicios que se están ejecutando.Filtro

(Se requiere Active Directory):

Use el parámetro Filtro para obtener todos los usuarios que están deshabilitados.

Nos vemos la próxima vez en el tema: PowerShell para principiantes (Parte 11): Divertirse con las unidades de PowerShell

Patrick Gruenauer, MVP de PowerShell

Deja una respuesta

Tu dirección de correo electrónico no será publicada.