Che cos'è PowerShell?What is PowerShell?

PowerShell è un framework per la gestione della configurazione e dell'automazione delle attività multipiattaforma, costituito da una shell della riga di comando e un linguaggio di scripting.PowerShell is a cross-platform task automation and configuration management framework, consisting of a command-line shell and scripting language. Diversamente dalla maggior parte delle shell, che accettano e restituiscono testo, PowerShell è basato su .NET Common Language Runtime (CLR) e accetta e restituisce oggetti .NET.Unlike most shells, which accept and return text, PowerShell is built on top of the .NET Common Language Runtime (CLR), and accepts and returns .NET objects. Questa differenza fondamentale introduce strumenti e metodi completamente nuovi per l'automazione.This fundamental change brings entirely new tools and methods for automation.

L'output è basato sugli oggettiOutput is object-based

Diversamente dalle interfacce della riga di comando tradizionali, i cmdlet di PowerShell sono progettati per gestire oggetti.Unlike traditional command-line interfaces, PowerShell cmdlets are designed to deal with objects. Un oggetto è un'informazione strutturata che è molto più della semplice stringa di caratteri visualizzata sullo schermo.An object is structured information that is more than just the string of characters appearing on the screen. L'output dei comandi include sempre informazioni aggiuntive da usare in caso di necessità.Command output always carries extra information that you can use if you need it.

Se in passato sono stati usati strumenti di elaborazione del testo per elaborare i dati, si noterà che questi strumenti si comportano in modo diverso se usati in PowerShell.If you've used text-processing tools to process data in the past, you'll find that they behave differently when used in PowerShell. Nella maggior parte dei casi, non sono necessari strumenti di elaborazione del testo per estrarre informazioni specifiche.In most cases, you don't need text-processing tools to extract specific information. È possibile accedere direttamente a parti dei dati usando la sintassi a oggetti standard di PowerShell.You directly access portions of the data using standard PowerShell object syntax.

La famiglia di comandi è estendibileThe command family is extensible

Interfacce come cmd.exe non consentono di estendere direttamente il set di comandi predefinito.Interfaces such as cmd.exe don't provide a way for you to directly extend the built-in command set. È possibile creare strumenti da riga di comando esterni da eseguire in cmd.exe.You can create external command-line tools that run in cmd.exe. Tuttavia, questi strumenti esterni non includono servizi, come l'integrazione della Guida.But these external tools don't have services, such as Help integration. cmd.exe non riconosce automaticamente questi strumenti esterni come comandi validi.cmd.exe doesn't automatically know that these external tools are valid commands.

I comandi di PowerShell sono noti come cmdlet.The commands in PowerShell are known as cmdlets. È possibile usare ogni cmdlet separatamente, ma il potenziale di questi semplici strumenti viene espresso appieno combinandoli per eseguire attività complesse.You can use each cmdlet separately, but their power is realized when you combine them to perform complex tasks. Come molte shell, PowerShell consente di accedere al file system nel computer.Like many shells, PowerShell gives you access to the file system on the computer. I provider di PowerShell consentono di accedere ad altri archivi dati, ad esempio il Registro di sistema e gli archivi di certificati, con la stessa facilità con cui si accede al file system.PowerShell providers enable you to access other data stores, such as the registry and the certificate stores, as easily as you access the file system.

È possibile creare moduli di funzioni di cmdlet personalizzati usando codice compilato o script.You can create your own cmdlet and function modules using compiled code or scripts. I moduli possono aggiungere cmdlet e provider alla shell.Modules can add cmdlets and providers to the shell. PowerShell supporta anche script analoghi a quelli della shell UNIX e ai file batch di cmd.exe.PowerShell also supports scripts that are analogous to UNIX shell scripts and cmd.exe batch files.

Supporto per gli alias dei comandiSupport for command aliases

PowerShell supporta l'uso di alias per fare riferimento ai comandi tramite nomi alternativi.PowerShell supports aliases to refer to commands by alternate names. L'uso di alias permette agli utenti che hanno esperienza in altre shell di usare i nomi di comando comuni che conoscono già per operazioni simili in PowerShell.Aliasing allows users with experience in other shells to use common command names that they already know for similar operations in PowerShell.

L'uso di alias associa un nuovo nome a un altro comando.Aliasing associates a new name with another command. Ad esempio, PowerShell include una funzione interna denominata Clear-Host che cancella la finestra di output.For example, PowerShell has an internal function named Clear-Host that clears the output window. È possibile digitare l'alias cls o clear al prompt dei comandi.You can type either the cls or clear alias at a command prompt. PowerShell interpreta questi alias ed esegue la funzione Clear-Host.PowerShell interprets these aliases and runs the Clear-Host function.

Questa funzionalità semplifica l'apprendimento di PowerShell per gli utenti.This feature helps users to learn PowerShell. Prima di tutto, la maggior parte degli utenti di cmd.exe e Unix ha a disposizione un vasto repertorio di comandi di cui conosce già il nome.First, most cmd.exe and Unix users have a large repertoire of commands that users already know by name. Gli equivalenti in PowerShell possono non produrre risultati identici.The PowerShell equivalents may not produce identical results. Tuttavia, i risultati sono sufficientemente simili perché gli utenti possano usarli senza conoscere il nome del comando di PowerShell.However, the results are close enough that users can do work without knowing the PowerShell command name. La "memoria muscolare" è un'altra importante fonte di frustrazione quando si apprende una nuova shell di comandi."Muscle memory" is another major source of frustration when learning a new command shell. Dopo aver usato cmd.exe per anni, si potrebbe digitare in automatico il comando cls per cancellare lo schermo.If you have used cmd.exe for years, you might reflexively type the cls command to clear the screen. Senza l'alias per Clear-Host, si riceverebbe un messaggio di errore e potrebbe non essere chiaro che cosa fare per cancellare l'output.Without the alias for Clear-Host, you receive an error message and won't know what to do to clear the output.

PowerShell gestisce l'input e la visualizzazione della consolePowerShell handles console input and display

Quando si digita un comando, PowerShell elabora sempre l'input della riga di comando direttamente.When you type a command, PowerShell always processes the command-line input directly. PowerShell formatta anche l'output visualizzato sullo schermo.PowerShell also formats the output that you see on the screen. Questa differenza è significativa perché riduce le attività necessarie per ogni cmdlet.This difference is significant because it reduces the work required of each cmdlet. Assicura inoltre che sia sempre possibile eseguire le operazioni allo stesso modo con qualsiasi cmdlet.It ensures that you can always do things the same way with any cmdlet. Gli sviluppatori di cmdlet non devono scrivere codice per analizzare gli argomenti della riga di comando o formattare l'output.Cmdlet developers don't need to write code to parse the command-line arguments or format the output.

Gli strumenti da riga di comando tradizionali hanno i propri schemi per la richiesta e la visualizzazione della Guida.Traditional command-line tools have their own schemes for requesting and displaying Help. Alcuni strumenti da riga di comando usano /? per attivare la visualizzazione della Guida, mentre altri usano -?, /H o addirittura //.Some command-line tools use /? to trigger the Help display; others use -?, /H, or even //. Alcuni visualizzano la Guida in una finestra GUI, invece che nella visualizzazione della console.Some will display Help in a GUI window, rather than in the console display. Se si usa un parametro errato, lo strumento può ignorare l'input digitato e avviare l'esecuzione di un'attività automaticamente.If you use the wrong parameter, the tool might ignore what you typed and begin executing a task automatically. Poiché PowerShell analizza ed elabora automaticamente la riga di comando, il parametro -? significa sempre "Mostra la Guida per questo comando".Since PowerShell automatically parses and processes the command line, the -? parameter always means "show me Help for this command".

Note

Se si esegue un'applicazione grafica in PowerShell, viene visualizzata la finestra dell'applicazione.If you run a graphic application in PowerShell, the window for the application opens. PowerShell interviene solo per l'elaborazione dell'input della riga di comando immesso o dell'output dell'applicazione restituito nella finestra della console,PowerShell intervenes only when processing the command-line input you supply or the application output returned to the console window. senza influire sul funzionamento interno dell'applicazione.It does not affect how the application works internally.

PowerShell ha una pipelinePowerShell has a pipeline

Le pipeline sono senza dubbio il concetto più importante usato nelle interfacce della riga di comando.Pipelines are arguably the most valuable concept used in command-line interfaces. Se usate correttamente, le pipeline riducono la necessità di usare comandi complessi e semplificano la visualizzazione del flusso di lavoro.When used properly, pipelines reduce the effort of using complex commands and make it easier to see the flow of work. Ogni comando in una pipeline passa il relativo output, elemento per elemento, al comando successivo.Each command in a pipeline passes its output, item by item, to the next command. I comandi non devono gestire più di un elemento per volta.Commands don't have to handle more than one item at a time. Ne risultano un utilizzo inferiore delle risorse e la possibilità di ottenere l'output immediatamente.The result is reduced resource consumption and the ability to get output immediately.

La notazione usata per le pipeline è simile a quella usata in altre shell.The notation used for pipelines is similar to the notation used in other shells. A prima vista, può non essere evidente come si differenziano le pipeline in PowerShell.At first glance, it may not be apparent how pipelines are different in PowerShell. Anche se sullo schermo viene visualizzato testo, PowerShell invia tramite pipe oggetti, e non testo, tra i comandi.Although you see text on the screen, PowerShell pipes objects, not text, between commands.

Ad esempio, se si usa il cmdlet Out-Host per forzare una visualizzazione pagina per pagina dell'output di un altro comando, l'output avrà lo stesso aspetto del normale testo visualizzato sullo schermo, suddiviso in pagine:For example, if you use the Out-Host cmdlet to force a page-by-page display of output from another command, the output looks just like the normal text displayed on the screen, broken up into pages:

Get-ChildItem | Out-Host -Paging
    Directory: /mnt/c/Git/PS-Docs/PowerShell-Docs/reference/7.0/Microsoft.PowerShell.Core

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          05/22/2020    08:30                About
-----          05/20/2020    14:36           9044 Add-History.md
-----          05/20/2020    14:36          12227 Clear-History.md
-----          05/20/2020    14:36           3566 Clear-Host.md
-----          05/20/2020    14:36          29087 Connect-PSSession.md
-----          05/20/2020    14:36           5705 Debug-Job.md
-----          05/20/2020    14:36           3515 Disable-ExperimentalFeature.md
-----          05/20/2020    14:36          25531 Disable-PSRemoting.md
-----          05/20/2020    14:36           7852 Disable-PSSessionConfiguration.md
-----          05/20/2020    14:36          25355 Disconnect-PSSession.md
-----          05/20/2020    14:36           3491 Enable-ExperimentalFeature.md
-----          05/20/2020    14:36          13310 Enable-PSRemoting.md
-----          05/20/2020    14:36           8401 Enable-PSSessionConfiguration.md
-----          05/20/2020    14:36           9531 Enter-PSHostProcess.md
...
<SPACE> next page; <CR> next line; Q quit

La divisione in pagine riduce anche l'utilizzo della CPU perché i trasferimenti vengono elaborati nel cmdlet Out-Host quando è pronta per la visualizzazione una pagina completa.Paging also reduces CPU utilization because processing transfers to the Out-Host cmdlet when it has a complete page ready to display. I cmdlet precedenti nella pipeline sospendono l'esecuzione finché non è disponibile la pagina di output successiva.The cmdlets that precede it in the pipeline pause execution until the next page of output is available.

Oggetti nella pipelineObjects in the pipeline

Quando si esegue un cmdlet in PowerShell, viene visualizzato output di testo perché è necessario rappresentare gli oggetti come testo in una finestra della console.When you run a cmdlet in PowerShell, you see text output because it is necessary to represent objects as text in a console window. L'output di testo può non visualizzare tutte le proprietà dell'oggetto restituito.The text output may not display all of the properties of the object being output.

Ad esempio, si consideri il cmdlet Get-Location.For example, consider the Get-Location cmdlet. L'output di testo è un riepilogo delle informazioni e non una rappresentazione completa dell'oggetto restituito da Get-Location.The text output is a summary of information, not a complete representation of the object returned by Get-Location. L'intestazione nell'output viene aggiunta dal processo che formatta i dati per la visualizzazione sullo schermo.The heading in the output is added by the process that formats the data for onscreen display.

Get-Location
Path
----
C:\

L'invio inviato tramite pipe al cmdlet Get-Member consente di visualizzare informazioni sull'oggetto restituito da Get-Location.Piping the output to the Get-Member cmdlet displays information about the object returned by Get-Location.

Get-Location | Get-Member
   TypeName: System.Management.Automation.PathInfo

Name         MemberType Definition
----         ---------- ----------
Equals       Method     bool Equals(System.Object obj)
GetHashCode  Method     int GetHashCode()
GetType      Method     type GetType()
ToString     Method     string ToString()
Drive        Property   System.Management.Automation.PSDriveInfo Drive {get;}
Path         Property   string Path {get;}
Provider     Property   System.Management.Automation.ProviderInfo Provider {get;}
ProviderPath Property   string ProviderPath {get;}

Get-Location restituisce un oggetto PathInfo che contiene il percorso corrente e altre informazioni.Get-Location returns a PathInfo object that contains the current path and other information.

Sistema della Guida incorporatoBuilt-in help system

Analogamente alle pagine man Unix, PowerShell include articoli della Guida dettagliati che illustrano i concetti e la sintassi dei comandi di PowerShell.Similar to Unix man pages, PowerShell includes detailed help articles that explain PowerShell concepts and command syntax. Usare il cmdlet Get-Help per visualizzare questi articoli nel prompt dei comandi o leggere la versione più recente di questi articoli online nella documentazione di PowerShell.Use the Get-Help cmdlet to display these articles at the command prompt or view the most recently updated versions of these articles in the PowerShell documentation online.

Passaggi successiviNext steps

Per altre informazioni su PowerShell, vedere la sezione Imparare a usare PowerShell di questo sito.To learn more about PowerShell, see the Learning PowerShell section of this site.