PowerShell per principianti (Parte 10): Filtraggio e Where-Object

Abbiamo già imparato molto su PowerShell. L’ultima volta che abbiamo lavorato con WMI: PowerShell per principianti (Parte 9): Ottenere tutto da Windows con PowerShell e WMI Ora, a mio parere, è il momento migliore per concentrarsi sul tema “Filtraggio con PowerShell”. Ma prima, diamo un’occhiata all’esercizio dall’ultima parte.

Tutte le parti della serie possono essere trovate qui: PowerShell per principianti (Serie)

Recensione (Parte 9)

Ecco l’assegnazione e la soluzione dalla parte 9:

Recuperare informazioni sul disco rigido. Utilizzare Get-WmiObject o Get-CimInstance. Innanzitutto, cerca l’Oggetto WMI e una volta trovato mostra il Nome, le partizioni, il modello, il firmware e il numero di serie.

Per prima cosa, dobbiamo scoprire il nome dell’istanza WMI. Poiché l’attività si riferisce al disco rigido, potremmo cercare *disk*, ad esempio.

Get-WmiObject *disk* -List

Unbenannt.PNG

Win32_DiskDrive suona bene. Ricorda il metodo in due passaggi della parte 8 per ottenere di più da PowerShell:

Get-CimInstance win32_diskdrive | Get-Member

Lì troverai gli attributi appropriati. Ora usa Select-Object per ottenerli tutti.

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

Unbenannt.PNG

Recensione

WMI (Strumenti di gestione di Windows) fornisce accesso in lettura e scrittura a quasi tutte le impostazioni di Windows. Esistono due cmdlet importanti: Get-WmiObject e Get-CimInstance.

Perché filtrare?

Il filtraggio è una tecnologia chiave in PowerShell. Una volta che sai come filtrare, otterrai di più da PowerShell.

Bene, il mio compito per questa parte è spiegare perché il filtraggio è importante. Ok diciamo che hai più di un disco rigido. L’output sopra mostra tutti i dischi rigidi. Ma si desidera visualizzare solo i dischi rigidi Samsung, per esempio.

Unbenannt.PNG

Perché vorresti farlo? Forse il tuo capo ti chiede quanti dischi Samsung sono in uso. Su TUTTI i computer. Ricorda, WMI e PowerShell ti consentono di eseguire query remote. Ok torna all’argomento. Vogliamo solo il Samsung SSD con 500 GB. Guarda il parametro del filtro!

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

Unbenannt.PNG

Quanto segue è un po ‘ fuori dall’ordinario e per i nerd PowerShell più avanzati, ma perché no? Il seguente comando ottiene tutti gli SSD Samsung da tutti i computer di dominio, ma non dai server.

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

Se i tuoi colleghi pensano che tu stia affrontando un problema irrisolvibile, premi i pulsanti e mostra loro cosa puoi fare. Ok

Ok, andiamo agli esempi per principianti.

Oggetti filtranti

Ti ricordi il comando Get-ChildItem? Ho usato questo comando molto spesso in questa serie.

Se esegui Get-Help Get-ChildItem troverai molti esempi di filtraggio nella guida.

Get-Help Get-ChildItem -Online

Preferisco usare l’aiuto locale.

Get-Help Get-ChildItem -Examples

Unbenannt.PNG

Cosa abbiamo imparato finora?

Il filtraggio è una tecnologia chiave in PowerShell. Una volta capito come filtrare, otterrai di più da PowerShell.

Filtraggio degli oggetti Active Directory

Se sei un IT-Pro, probabilmente lavori in un ambiente Active Directory. Il filtraggio è una tecnica chiave quando si lavora con oggetti Active Directory.

Il seguente comando utilizza il parametro Filter per ottenere tutti gli utenti disabilitati:

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

Unbenannt.PNG

Potresti chiederti come conosco i nomi degli attributi? Ricorda il metodo in 2 fasi per ottenere di più dagli oggetti: 1. utilizzare Get-Membro 2. utilizzare Select-Object.

Unbenannt.PNG

Il parametro del filtro

Diamo un’occhiata in giro. Quali comandi utilizzano il parametro filter? Nota che sono su un controller di dominio.

Get-Command -ParameterName Filter

Come puoi vedere il parametro filter è usato principalmente nei comandi di Active Directory. E devo ammettere che ho sempre usato il parametro filter solo per Active Directory. E ‘cosi’ che va. Quindi, concentriamoci su Active Directory. Diciamo che vogliamo tutti i computer di dominio (sistema operativo server e sistema operativo client) ordinati per sistema operativo. Per questo dobbiamo usare il parametro filter con *.

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

Unbenannt.PNG

In termini di filtraggio, questo era un compito semplice.

Il metodo di filtraggio

Ora cerchiamo di ottenere tutti i computer che hanno installato Windows 10. Per questo, dobbiamo mettere il parametro del filtro tra parentesi curve.

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

È ora di scomporre i dettagli.

Le parentesi

Mettono il filtro in parentesi curve.

Unbenannt.PNG

Gli attributi

Quindi scopri il nome delle proprietà (attributi). Ne abbiamo già discusso in PowerShell per principianti (Parte 8): Il potere di PowerShell – Entrare in contatto con gli oggetti (Get-Member, Select-Object). Ricorda il metodo in due fasi!

Unbenannt.PNG

Get-ADComputer client01 -Properties * | Get-Member

Unbenannt.PNG

Nota a margine: Nota il parametro properties. In Active Directory non tutte le proprietà vengono visualizzate per impostazione predefinita.

Gli operatori

utilizzano successivamente un operatore.

Unbenannt.PNG

Un operatore potrebbe essere-like, -as, -equal, -ne e così via type Per ulteriori informazioni sui parametri digitare

help about_operators

Questo apre un file di testo memorizzato sul computer.

L’istruzione

Se vogliamo filtrare qualcosa, abbiamo bisogno di una condizione. Questa condizione deve essere inserita tra virgolette.

Unbenannt.PNG

Recensione

Se stai lavorando con i filtri, vedi prima la sezione Aiuto. I filtri vengono solitamente posizionati tra parentesi. Spesso viene utilizzato anche un operatore.

Alcuni altri esempi di filtri without senza parlare molto

Ricerca di utenti che hanno un numero di password errato pari a 0. Ecco un esempio dell’account di Petra:

Unbenannt.PNG

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

Unbenannt.PNG

Ricerca di utenti che hanno un numero di password errato pari a 0 e sono abilitati. (Vedrai Petra non è abilitato).

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

Unbenannt.PNG

Visualizza tutti i computer di dominio Windows Server, ma solo quelli che eseguono Windows Server 2016 e il cui nome inizia con DC.

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

Unbenannt.PNG

Ma a volte dobbiamo trovare un altro modo. Vale a dire quando non è disponibile alcun filtro. Quindi usiamo Dove-Oggetto.

Filtraggio con Where-Object

Where-Object è sempre sul lato destro della pipe. Filtraggio a sinistra. Che cosa significa, i pro ei contro alla fine del post. Per questa parte, ci concentreremo su Dove-Oggetto.

Ecco alcuni esempi della guida di PowerShell.

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

Tuttavia, vorrei utilizzare un esempio da uno dei miei contributi.

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

Unbenannt.PNG

Presta attenzione all’HotFixID. Si riferisce a un attributo.

La procedura consigliata (a causa della retrocompatibilità) è la seguente:

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

Unbenannt.PNG

C’è qualcosa di nuovo ora. Cosa significa$_?

$_ è una variabile che itera su ogni oggetto/elemento passato dal precedente (pipe). In poche parole: prendi l’hotfixID da ogni oggetto che proviene dalla pipe.

Filtro vs Where-Object

Se non è disponibile alcun filtro, utilizzare Where-Object. Se si è in grado di utilizzare un filtro sul lato sinistro del tubo usarlo! Perché? Bene, è una differenza se invii 1000 oggetti sulla pipe o solo 500, nel caso di Where-Object tutti gli oggetti devono passare attraverso la pipe e solo allora vengono filtrati. Ricorda la pipe dalla parte 7: PowerShell per principianti (Parte 7): La Pipe (e molti esempi con cui giocare)

Recensione

Dove-Object è sempre sul lato destro della pipe. Filtraggio a sinistra. Se avete la scelta tra un filtro sul lato sinistro del tubo o Where-Object sul lato destro, quindi scegliere il lato sinistro.

Esercizio

Ecco l’esercizio fino alla parte successiva.

Where-Object:

Usa Get-Service e Where-Object per mostrare solo i servizi in esecuzione.

Filter (Active Directory required):

Utilizzare il parametro Filter per ottenere tutti gli utenti disabilitati.

Ci vediamo la prossima volta all’argomento: PowerShell per principianti (Parte 11): Divertirsi con le unità PowerShell

Patrick Gruenauer, MVP PowerShell

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.