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-Process
la 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 letteraU
.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 iniziaProcessName
conp
.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 aWhere-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 perWhere-Object
usa l'operatore-like
per trovare le corrispondenze con i processi che iniziano con la letterap
.
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 Name
membri , 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.