Geek School: imparare come utilizzare gli oggetti in PowerShell

Sommario:

Geek School: imparare come utilizzare gli oggetti in PowerShell
Geek School: imparare come utilizzare gli oggetti in PowerShell

Video: Geek School: imparare come utilizzare gli oggetti in PowerShell

Video: Geek School: imparare come utilizzare gli oggetti in PowerShell
Video: Come vedere la RAM del PC su Windows 10 - YouTube 2024, Aprile
Anonim
Comprendere gli oggetti è uno dei concetti fondamentali per "ottenere" PowerShell. Unisciti a noi mentre esploriamo gli oggetti e in che modo rendono PowerShell migliore di qualsiasi altra shell esistente oggi.
Comprendere gli oggetti è uno dei concetti fondamentali per "ottenere" PowerShell. Unisciti a noi mentre esploriamo gli oggetti e in che modo 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

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.

Image
Image

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.

È 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.
È 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.

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

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:
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.
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. Di solito, 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.
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 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:
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 -Name ‘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.
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.

Consigliato: