Scoprire PowerShell

PowerShell è una shell della riga di comando e un linguaggio di scripting in uno. PowerShell è stato avviato in Windows per automatizzare le attività amministrative. Ora viene eseguito multipiattaforma e può essere usato per varie attività.

La cosa che rende PowerShell univoco è che accetta e restituisce oggetti .NET, anziché testo. Questa funzionalità semplifica la connessione di comandi diversi in una pipeline.

Per quale può essere usato PowerShell?

L'utilizzo di PowerShell è cresciuto dai giorni in cui era solo Windows. Viene ancora usato per l'automazione delle attività di Windows, ma oggi è possibile usarlo per attività come:

  • Gestione del cloud. PowerShell può essere usato per gestire le risorse cloud. Ad esempio, è possibile recuperare informazioni sulle risorse cloud, nonché aggiornare o distribuire nuove risorse.
  • CI/CD. Può anche essere usato come parte di una pipeline di integrazione continua/distribuzione continua.
  • Automatizzare le attività per Active Directory ed Exchange. È possibile usarlo per automatizzare quasi tutte le attività in Windows, ad esempio la creazione di utenti in Active Directory e cassette postali in Exchange.

Esistono molte altre aree di utilizzo, ma l'elenco precedente fornisce un suggerimento che PowerShell ha avuto un lungo cammino.

Chi usa PowerShell?

PowerShell è uno strumento potente che può aiutare gli utenti a lavorare in una moltitudine di ruoli. Tradizionalmente, PowerShell è stato usato dal ruolo System Amministrazione istrator, ma ora viene usato dalle persone che si chiamano DevOps, Cloud Ops e persino Sviluppatori.

Cmdlet di PowerShell

PowerShell include centinaia di comandi preinstallati. I comandi di PowerShell vengono chiamati cmdlet (pronunciati command-let).

Il nome di ogni cmdlet è costituito da una coppia Verb-Noun . Ad esempio: Get-Process. Questa convenzione di denominazione semplifica la comprensione delle operazioni del cmdlet. Semplifica anche la ricerca del comando che si sta cercando. Quando si cerca un cmdlet da usare, è possibile filtrare in base al verbo o al sostantivo.

Uso dei cmdlet per esplorare PowerShell

Quando si sceglie PowerShell per la prima volta, potrebbe sentirsi intimidire perché sembra che ci sia molto da imparare. PowerShell è progettato per aiutare a imparare un po' alla volta, in quanto necessario.

PowerShell include cmdlet che consentono di individuare PowerShell. Usando questi tre cmdlet, è possibile individuare i comandi disponibili, le operazioni eseguite e i tipi su cui operano.

  • Get-Verb. L'esecuzione di questo comando restituisce un elenco di verbi a cui la maggior parte dei comandi è conforme. La risposta include una descrizione delle operazioni eseguite da questi verbi. Poiché la maggior parte dei comandi segue questa convenzione di denominazione, imposta le aspettative sulle operazioni eseguite da un comando. In questo modo è possibile selezionare il comando appropriato e il nome di un comando, se necessario crearne uno.
  • Get-Command. Questo comando recupera un elenco di tutti i comandi installati nel computer.
  • Get-Member. Opera sull'output basato su oggetti ed è in grado di individuare l'oggetto, le proprietà e i metodi disponibili per un comando.
  • Get-Help. Richiamando questo comando con il nome di un comando come argomento, viene visualizzata una pagina della Guida che descrive varie parti di un comando.

Usando questi comandi, è possibile individuare quasi tutto ciò che è necessario conoscere su PowerShell.

Verbo

Il verbo è un concetto importante in PowerShell. Si tratta di uno standard di denominazione seguito dalla maggior parte dei cmdlet. È anche uno standard di denominazione che si prevede di seguire quando si scrivono comandi personalizzati. L'idea è che il verbo dice quello che si sta tentando di fare, ad esempio leggere o modificare i dati. PowerShell include un elenco standardizzato di verbi. Per ottenere un elenco completo di tutti i verbi possibili, usare il Get-Verb cmdlet :

Get-Verb

Il cmdlet restituisce un lungo elenco di verbi. La descrizione fornisce il contesto per le operazioni che il verbo deve eseguire. Ecco le prime righe di output:

Verb    AliasPrefix   Group     Description
----    -----------   -----     -----------
Add     a             Common    Adds a resource to a container, or attaches an item to another item
Clear   cl            Common    Removes all the resources from a container but does not delete the container
Close   cs            Common    Changes the state of a resource to make it inaccessible, unavailable, or unusab…
Copy    cp            Common    Copies a resource to another name or to another container
Enter   et            Common    Specifies an action that allows the user to move into a resource
Exit    ex            Common    Sets the current environment or context to the most recently used context
...

Trovare i comandi con Get-Command

Il Get-Command cmdlet restituisce un elenco di tutti i comandi disponibili installati nel sistema. L'elenco che si torna è abbastanza grande. È possibile limitare la quantità di informazioni restituite filtrando la risposta usando parametri o cmdlet helper.

Filtrare in base al nome

È possibile filtrare l'output di Get-Command usando parametri diversi. Il filtro consente di trovare comandi con determinate proprietà. Il parametro Name consente di trovare un comando specifico in base al nome.

Get-Command -Name Get-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management

Cosa accade se si vogliono trovare tutti i comandi che funzionano con i processi? È possibile usare un carattere jolly * per trovare le corrispondenze con altre forme della stringa. Ad esempio:

Get-Command -Name *-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Debug-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Start-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Stop-Process      7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Wait-Process      7.0.0.0    Microsoft.PowerShell.Management

Applicazione di filtri in base al sostantivo e al verbo

Esistono altri parametri che filtrano in base ai valori verbi e sostantivi. La parte verbo del nome di un comando è la parte più a sinistra. Il verbo deve essere uno dei valori restituiti dal Get-Verb cmdlet . La parte più a destra di un comando è la parte sostantiva. Un sostantivo può essere qualsiasi cosa.

  • Filtrare in base al verbo. Nel comando Get-Processla parte verbo è Get. Per filtrare la parte verbo, usare il parametro Verb .

    Get-Command -Verb 'Get'
    

    In questo esempio vengono elencati tutti i comandi che usano il verbo Get.

  • Filtra in base al sostantivo. Nel comando Get-Process, la parte sostantivo è Process. Per filtrare il sostantivo, usare il parametro Noun . Nell'esempio seguente vengono restituiti tutti i cmdlet con nomi che iniziano con la lettera U.

    Get-Command -Noun U*
    

È anche possibile combinare i parametri per restringere la ricerca, ad esempio:

Get-Command -Verb Get -Noun U*
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Get-UICulture                7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Unique                   7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Uptime                   7.0.0.0    Microsoft.PowerShell.Utility

Usare i cmdlet helper per filtrare i risultati

È anche possibile usare altri cmdlet per filtrare i risultati.

  • Select-Object. Questo comando versatile consente di scegliere proprietà specifiche da uno o più oggetti. È anche possibile limitare il numero di elementi restituiti. Nell'esempio seguente vengono restituiti i valori della proprietà Name e Source per i primi 5 comandi disponibili nella sessione corrente.

    Get-Command | Select-Object -First 5 -Property Name, Source
    
    Name                      Source
    ----                      ------
    Add-AppPackage            Appx
    Add-AppPackageVolume      Appx
    Add-AppProvisionedPackage Dism
    Add-AssertionOperator     Pester
    Add-ProvisionedAppPackage Dism
    

    Per altre informazioni, vedere Select-Object.

  • Where-Object. Questo cmdlet consente di filtrare gli oggetti restituiti in base ai valori delle proprietà. Il comando accetta un'espressione che può testare il valore di una proprietà. Nell'esempio seguente vengono restituiti tutti i processi in cui inizia ProcessName con p.

    Get-Process | Where-Object {$_.ProcessName -like "p*"}
    

    Il Get-Process cmdlet restituisce una raccolta di oggetti processo. Per filtrare la risposta, inviare tramite pipe l'output a Where-Object. Il piping indica che due o più comandi sono connessi tramite un carattere pipe | . L'output di un comando viene inviato come input per il comando successivo. L'espressione di filtro per Where-Object usa l'operatore -like per trovare le corrispondenze con i processi che iniziano con la lettera p.

Esplorare gli oggetti con Get-Member

Dopo aver individuato il cmdlet desiderato, è necessario ottenere altre informazioni sull'output prodotto. Il Get-Member cmdlet visualizza il tipo, le proprietà e i metodi di un oggetto. Inviare tramite pipe l'output da esaminare a Get-Member.

Get-Process | Get-Member

Il risultato visualizza il tipo restituito come TypeName e tutte le proprietà e i metodi dell'oggetto . Ecco un estratto di tale risultato:

TypeName: System.Diagnostics.Process

Name        MemberType     Definition
----        ----------     ----------
Handles     AliasProperty  Handles = Handlecount
Name        AliasProperty  Name = ProcessName
...

Usando il parametro MemberType è possibile limitare le informazioni restituite.

Get-Process | Get-Member -MemberType Method

Per impostazione predefinita, PowerShell visualizza solo alcune proprietà. Nell'esempio precedente sono stati visualizzati i Namemembri , MemberType e Definition . È possibile usare Select-Object per specificare le proprietà da visualizzare. Ad esempio, si vogliono visualizzare solo le Name proprietà e Definition :

Get-Process | Get-Member | Select-Object Name, Definition

Ricerca per tipo di parametro

Get-Member ci ha mostrato che Get-Process restituisce oggetti di tipo Process . Il parametro ParameterType di Get-Command può essere usato per trovare altri comandi che accettano oggetti Process come input.

Get-Command -ParameterType Process
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Debug-Process                7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Enter-PSHostProcess          7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Get-Process                  7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Get-PSHostProcessInfo        7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Stop-Process                 7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Wait-Process                 7.0.0.0    Microsoft.PowerShell.Managem…

Conoscere il tipo di output di un comando può aiutare a restringere la ricerca di comandi correlati.

Risorse aggiuntive