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