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
Vi siete mai chiesti cosa distingue PowerShell da una shell Linux tradizionale come Bash, o anche dal prompt dei comandi legacy? La risposta è davvero semplice: le shell tradizionali generano 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 è 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.
La pipeline
Ci sono un sacco di shell Linux con una pipeline, che ti permettono di inviare il testo che un comando genera 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 per il prossimo cmdlet 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
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
Get-Help –Name Stop-Service
Get-Help -Name Stop-Service –Full
- 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 -Name ‘Apple Mobile Device’ | Stop-Service
Compiti a casa
Leggi sulla pipeline degli oggetti
Se avete domande potete twittarmi @taybgibb, o semplicemente lasciare un commento.