Geek School Learning Come utilizzare gli oggetti in PowerShell
Comprendere gli oggetti è uno dei concetti fondamentali per "ottenere" PowerShell. Unisciti a noi mentre esploriamo gli oggetti e come rendono PowerShell migliore di qualsiasi altra shell esistente oggi.
Assicurati di leggere gli articoli precedenti della serie:
- Scopri come automatizzare Windows con PowerShell
- Imparare a utilizzare i cmdlet in PowerShell
E rimanete sintonizzati per il resto della serie per tutta la settimana.
Oggetti
Ti sei mai chiesto cosa distingue PowerShell da una shell Linux tradizionale come Bash, o anche dal prompt dei comandi legacy? La risposta è molto semplice: le shell tradizionali emettono il testo, il che rende difficile fare cose come la formattazione e il filtraggio. Naturalmente, ci sono strumenti per aiutarti a fare il lavoro (sed e grep vengono in mente), ma alla fine della giornata, se vuoi fare qualsiasi tipo di parsing di testo pesante, devi conoscere espressioni regolari come il il retro della tua mano.
PowerShell sfrutta il framework .Net sottostante e adotta un approccio diverso, utilizzando oggetti anziché testo. Gli oggetti sono solo una rappresentazione di qualcosa. Sono una raccolta di parti e azioni per usarli. Diamo un'occhiata alle parti di una bicicletta e come potremmo usarle.
Gli oggetti in .Net sono praticamente gli stessi tranne che per due piccole differenze: vengono chiamate le "Parti" proprietà e vengono chiamate le "Istruzioni" metodi. Se volessimo rappresentare un servizio Windows come oggetto, potremmo decidere che sia appropriato descriverlo usando tre proprietà: Nome servizio, Stato e Descrizione. Dobbiamo anche interagire con il servizio, quindi potremmo dare all'oggetto un metodo Start, Stop e Pause.
È possibile visualizzare le proprietà e i metodi di un oggetto passandolo al cmdlet Get-Member. Gli oggetti che un cmdlet di PowerShell emette sono in gran parte tipi sottostanti dal framework .Net, ma puoi creare i tuoi oggetti se devi usare un linguaggio come C # o usare il tipo PSObject.
La pipeline
Ci sono un sacco di shell Linux con una pipeline, che ti permettono di inviare il testo che un comando emette come input per il prossimo comando nella pipeline. PowerShell porta questo al livello successivo consentendo di prendere gli oggetti che un cmdlet emette e passarli come input al cmdlet successivo nella pipeline. Il trucco è sapere quale tipo di oggetto restituisce un cmdlet, il che è molto semplice quando si utilizza il cmdlet Get-Member.
Get-Service | Get-Member
Per ragioni che esulano dall'ambito di questo articolo, proprietà e metodi vengono chiamati congiuntamente membri della classe, il che spiega perché si utilizza il cmdlet Get-Member per ottenere un elenco di tutti i metodi e le proprietà di un oggetto. Tuttavia, il cmdlet Get-Member restituisce anche un'altra informazione importante, il tipo di oggetto sottostante. Nello screenshot qui sopra, possiamo vedere che Get-Service restituisce oggetti del tipo:
System.ServiceProcess.ServiceController
Poiché PowerShell si occupa di oggetti e non di testo, non tutti i cmdlet possono essere collegati insieme utilizzando la pipeline [1]. Ciò significa che dobbiamo trovare un cmdlet che desideri accettare un oggetto System.ServiceProcess.ServiceController dalla pipeline.
Get-Command -ParameterType System.ServiceProcess.ServiceController
Si noti che esiste un cmdlet chiamato Stop-Service; diamo un'occhiata all'aiuto per questo.
Get-Help -Name Stop-Service
Sembra che il parametro InputObject utilizzi come input un array di oggetti ServiceController. Di solito, se vedi un parametro chiamato InputObject, accetterà l'input dalla Pipeline, ma per sicurezza guardiamo l'aiuto completo per quel parametro.
Get-Help -Name Stop-Service -Full
I nostri sospetti erano corretti. Quindi a questo punto sappiamo quanto segue:
- Get-Service restituisce oggetti ServiceController
- Stop-Service ha un parametro chiamato InputObject che accetta uno o più ServiceControllers come input.
- Il parametro InputObject accetta l'input della pipeline.
Usando queste informazioni potremmo fare quanto segue:
Get-Service -Nome 'Dispositivo mobile Apple' | Stop-Servizio
Questo è tutto per questa volta gente. La prossima volta guarderemo come possiamo formattare, filtrare e confrontare gli oggetti nella pipeline.
Compiti a casa
- Leggi sulla pipeline degli oggetti
Se avete domande potete twittarmi @taybgibb, o semplicemente lasciare un commento.