18Aug

Geek School: imparare come utilizzare gli oggetti in PowerShell

La comprensione degli 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:

  • Impara come automatizzare Windows con PowerShell
  • Imparare ad usare i cmdlet in PowerShell

E rimanere 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 è 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 ilil 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: le "Parti" sono denominate proprietà e le "Istruzioni" sono denominate 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.

È 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 è possibile creare i propri oggetti se è necessario utilizzare un linguaggio come C # o utilizzare il tipo PSObject.

The 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 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

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 denominato 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. Solitamente, se vedi un parametro chiamato InputObject, accetterà l'input dalla Pipeline, ma per essere sicuro di dare un'occhiata all'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.

Utilizzando queste informazioni potremmo fare quanto segue:

Get-Service -Nome 'Apple Mobile Device' |Stop-Service

Questo è tutto per questa volta gente. La prossima volta guarderemo come possiamo formattare, filtrare e confrontare gli oggetti nella pipeline.

Homework

  • Legge sulla pipeline di oggetti

Se avete domande potete twittarmi @taybgibb, o semplicemente lasciare un commento.