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
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
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.
¿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
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
¿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
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.
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
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.
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!
Get-ADComputer client01 -Properties * | Get-Member
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.
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.
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:
Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name
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
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*')}
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*
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*'}
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