PowerShell: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Adriano.93 (discussione | contributi)
Nessun oggetto della modifica
fix "code"
 
(40 versioni intermedie di 25 utenti non mostrate)
Riga 1:
{{Avvisounicode}}
{{Software
|Nome = PowershellPowerShell
|Logo =
|Screenshot = Windows PowerShell 1.0 PD.png
|Didascalia = Windows Powershell in [[esecuzione (informatica)|esecuzione]] su [[Windows 7]]
|Sviluppatore = [[Microsoft Corporation]]
|UltimaVersione =5.1.14393 <!-- Elemento Wikidata -->
|DataUltimaVersione =2 agosto<!-- 2016Elemento Wikidata -->
|UltimaVersioneBeta =
|DataUltimaVersioneBeta =
|SistemaOperativo = Windows, Linux e Mac OS
|Linguaggio =
|Genere = terminale
|Licenza = [[SoftwareLicenza liberoMIT]] dalla versione 6.0.0
|Lingua =
|SoftwareLibero = si
|SistemaOperativo2 = macOS
|SitoWeb = https://github.com/powershell/powershell
|SistemaOperativo3 = Linux
}}
 
'''PowerShell''', noto inizialmente come '''Microsoft Shell''' o, '''MSH''' (o col nome in codice '''Monad''') e poi come '''Windows''' '''ShellPowerShell''', è una [[shell (informatica)|shell]] caratterizzata dall'[[interfaccia a riga di comando]] (CLI) e da un [[linguaggio di scripting]], sviluppata da [[Microsoft]]. È, basato sulla [[programmazione a oggetti]] e sul ''[[framework]]'' [[Microsoft .NET]].
 
Microsoft intendeva in origine distribuire PowerShell insieme con [[Windows Vista]], ma in seguito ha definito delle date di distribuzione diverse per PowerShell. WindowsNecessita PowerShelldella costituisceversione la2.0 basedel dell'interfaccia[[.NET amministrativaFramework]] pered è supportato su [[MicrosoftWindows ExchangeXP]], [[Windows Server|Microsoft Exchange2003]], Windows Vista, [[Windows Server 20072008]], dove[[Windows qualsiasi7]], operazione[[Windows è8]] svoltae tramite[[Windows riga10]] didisponibile comandonelle edizioni [[x86]], [[x64]] e l'interfaccia[[Itanium GUI2|Itanium]]. Era presente in versione 2 su Windows 7 dal quale non è posizionatadisinstallabile. L'installazione di Powershell su uno[[Windows strato2000]] superioreè apossibile detti(previa comandiinstallazione del framework), ma il sistema che ne risulta è completamente non standard e non supportato.
 
Costituisce inoltre la base dell'interfaccia amministrativa per [[Microsoft Exchange Server|Microsoft Exchange Server 2007]] dove qualsiasi operazione è svolta tramite riga di comando e l'interfaccia [[GUI]] è posizionata su uno strato superiore a detti comandi.
PowerShell necessita della versione 2.0 del [[.NET Framework]] ed è supportato su [[Windows XP]], [[Windows Server 2003]], [[Windows Vista]], [[Windows Server 2008]], [[Windows 7]], [[Windows 8]] e [[Windows 10]] disponibile nelle edizioni [[x86]], [[x64]] ed [[Itanium 2|Itanium]]. Era presente in versione 2 su Windows 7 dal quale non è disinstallabile. L'installazione di Powershell su Windows2000/2000_Server è possibile (previa installazione del framework), ma il sistema che ne risulta è completamente non standard e non supportato.
 
Inizialmente noto come Windows PowerShell è stato reso ''[[open source]]'' e multi piattaforma il 18 agosto 2016 con l'introduzione di PowerShell Core. Il primo è costruito su .NET Framework, il secondo su .NET Core.
Dalla versione 6 (rilasciata il 2 agosto 2016 in concomitanza all' Anniversary Update di Windows 10) PowerShell è diventato software libero e Microsoft lo ha reso disponibile anche per Linux e Mac OS.
 
== Storia ==
Ogni distribuzione di [[MS-DOS]] e [[Microsoft Windows]] ha sempre incorporato un'[[Interfaccia a riga di comando]]: [[command.com]] nelle versioni basate su [[MS-DOS]],; [[cmd.exe]] in quelle basate su [[Windows NT]]: non erano, però, in grado di riprodurre, o di automatizzare tutte le funzioni amministrative disponibili tramite [[interfaccia grafica|GUI]], sebbene la situazione sia migliorata con [[Windows Server 2003]]. Ciò era dovuto ad una combinazione di limitazioni intrinseche agli strumenti equivalenti a riga di comando o al fatto che Microsoft non ha fornito, per lungo tempo, [[Utility (informatica)|utility]] affidabili di questo tipo.<ref>{{Cita news|lingua=it|autore=|url=https://www.wired.it/gadget/computer/2017/01/17/ms-dos-ancora-vivo/|titolo=Il DOS è ancora vivo, nascosto dentro Windows 10 - Wired|pubblicazione=Wired|data=2017-01-17|accesso=2017-02-04}}</ref>
 
Inoltre, a differenza degli ambienti [[Unix]], né command.com né cmd.exe rispettano lo standard [[POSIX|POSIX.2]]. [[Microsoft Services for UNIX|Services for UNIX]] include una [[Korn shell|pdksh]] che rispetta tale standard, ma sia questa che altre shell [[UNIX]] che sono disponibili non sono in grado di compiere molti compiti di routine, che restano legati all'interfaccia grafica di Windows. Sebbene la suite di servizi per UNIX facciafosse orastata parteintegrata diin Windows Server 2003 R2, e saràpoi inclusa anche in alcune edizioni di Windows Vista, essain era,un intempo passato,precedente essa era resa disponibile come componente aggiuntivo a pagamento (ad esempio il ''resource kit'' di Windows 2000), cosaimpedendone che nedi impedìfatto l'adozione su larga scala.
 
Gli [[Utente (informatica)|utenti]] sonoerano statiscoraggiati allontanati dalla mancanza di documentazione adeguatadall'uso delle funzionalità a riga di comando a causa della mancanza di documentazione esaustiva. Per contro, anche molte applicazioni grafiche in Unix sonoerano solosostanzialmente dei ''[[wrapper]]'' per tool a riga di comando, che sonocomunque corredati di documentazione.
 
[[Microsoft]] tentò quindi di porre rimedio ad alcune di questetali limitazioni introducendo nel 1998 [[Windows Script Host]] nel 1998, in concomitanza con la distribuzione di [[Windows 98]]. Si trattava di un nuovo livello interprete di scriptingistruzioni, che potevapotevano implementareessere espresse con un buon numero di [[linguaggio di scripting|linguaggi di scripting]], peral fine di controllare le applicazioni. Tuttavia, lo ''Script Host'' aveva anche significative limitazioni: non era integrato con la shell, la sua documentazione non era molto accessibile, e fu presto considerato un pericolo per la sicurezza del sistema, dopo che diversi [[Virus (informatica)|virus]] misero in luce la debolezza sostanziale del suo modello di sicurezza.
 
Windows Server 2003 e alcune versioni di Windows XP includono un host per script a riga di comando denominato Cscript.exe (si tratta, essenzialmente, di una porzione autonoma del Windows Script Host di cui sopra), non integrato con la shell preesistente (cmd.exe). Questi [[sistema operativo|sistemi operativi]] forniscono anche altre righe di comando ''[[ad hoc]]'' (adper esempio [[netsh]]), anch'esse non del tutto integrate.
 
Una limitazione fondamentale all'automatizzazione dei task in Windows era il fatto che le sue interfacce di amministrazione native erano aperte ai tool grafici proprietari di Microsoft, e ad ogni interfaccia di script che Microsoft poteva scegliere di fornire. Poiché la GUI costituiva l'interfaccia primaria, risultava difficile fornire "''wrapper"'' in grado di essere inseriti in script - una situazione che è esattamente agli antipodi di quella della maggior parte delle implementazioni di [[UNIX]], in cui una riga di comando in grado di eseguire degli script forniva le funzionalità base.
 
Microsoft progettò PowerShell per rendere meno insormontabili questi problemi, e per rendere meno oneroso il processo di sviluppo di nuove applicazioni grafiche ede a riga di comando integrando un linguaggio di scripting più sicuro in una nuova shell di comando estendibile, che fosse in grado di svolgere ede automatizzare gli stessi compiti amministrativi fondamentali che vengono svolti tramite interfaccia grafica in Windows. L'interfaccia utente di gestione di [[Microsoft Exchange Server|Exchange Server 2007]], per esempio, si basa su PowerShell. Nella maggior parte dei compiti di tutti i giorni, PowerShell può sostituire cmd.exe e Windows Script Host (WSH). Tuttavia, per motivi di retrocompatibilità, sia cmd.exe che WSH continueranno ada essere supportati da Windows. Microsoft si è impegnata a costruire i tool grafici del futuro sopra PowerShell, assicurandosi che le funzionalità amministrative di base continuino ada essere utilizzabili tramite riga di comando, sulla falsariga di un sistema operativo Unix.
 
Microsoft ha pubblicato la seconda [[Versione beta|beta]] pubblica di "Monad" l'11 settembre [[2005]], mentre la terza è stata distribuita il 10 gennaio [[2006]].
 
Microsoft ha annunciato il 25 aprile [[2006]] che WSH avrebbe cambiato nome in Windows PowerShell, e sarebbe divenuta una parte significativa della sua offerta di strumenti di gestione del sistema<ref name="powershell">{{cita web|url=https://blogs.msdn.com/powershell/archive/2006/04/25/583344.aspx|titolo=Windows PowerShell (Monad) Has Arrived|anno=25 aprile 2006|accesso=26 aprile 2006|cognome=Snover|nome=Jeffrey|sito=Windows PowerShell team blog|editore=MSDN|lingua=en}}</ref>.
|url=http://blogs.msdn.com/powershell/archive/2006/04/25/583344.aspx
|titolo=Windows PowerShell (Monad) Has Arrived
|anno=25 aprile 2006
|accesso=26 aprile 2006
|cognome=Snover
|nome=Jeffrey
|sito=Windows PowerShell team blog
|editore=MSDN
|lingua=en
}}</ref>.
 
La prima release candidate di PowerShell è stata distribuita contestualmente all'annuncio.
La seconda release candidate è stata distribuita il 26 settembre [[2006]].
La versione 1.0 è stata distribuita il 14 novembre [[2006]].
La versione 2.0 è presente di serie su [[Windows 7]].
La versione 3.0, disponibile per Windows 7 SP1 e Windows 2008 Server R2 SP1 è di serie su Windows 8 e Windows Server 2012, come parte del più ampio Windows Management Framework V3, di cui fa parte anche WinRM.
 
La versione 6 è stata rilasciatapubblicata il 2 agosto 2016 e, rende il software opensource''open source'' sotto [[licenza GNUMIT]]<ref>{{Cita GPLv3web|url=https://github.com/PowerShell/PowerShell/blob/master/LICENSE.txt|titolo=LICENSE.txt|sito=Powershell|editore=Github|lingua=en|accesso=2020-08-22}}</ref> e lo rende disponibile anche per Linux e Mac OS. Il nome viene infatti cambiato eliminando Windows dal vecchio nome e lasciando solo PowerShell.
 
== PrincipiDescrizione ==
=== Principi ===
Il nome in codice di PowerShell, ''Monad'', proviene dalla [[monadologia]] di [[Gottfried Leibniz]], una filosofia in cui l'universo è composto da elementi fondamentali, le ''[[monadi]]'', disposti in una "[[armonia prestabilita]]". In maniera simile, PowerShell è la combinazione di compiti complessi e di una serie di componenti, lei ''cmdletscmdlet'' (''command lets-let'', serie di comandi), che sono classi .NET progettate per sfruttare le caratteristiche dell'ambiente. La differenza fondamentale tra l'approccio Unix e quello di PowerShell risiede nel fatto che piuttosto che creare una "pipeline"''[[Pipeline (lett. software)|pipeline]]''tubo'') basata su [[Input/output|input ede output]] testuali, PowerShell fa passare i dati da unaun ''cmdlet'' all'altra come ''[[Oggetto (informatica)|oggetti'']] (dati dotati di una struttura ben precisa).
 
L'output di unaun ''cmdlet'', se si tenta di accedervi tramite riga di comando, viene automaticamente convertito in testo; se, invece, si tenta di utilizzarlo in un'altra altro ''cmdlet'', esso verrà convertito nell'oggetto più appropriato per l'input di quell'altraaltro ''cmdlet''. In questo modo, varie utility comunemente utilizzate nelle pipelines Unix, quali [[grep]] ede [[awk]], non sono più necessarie, e si permette una combinazione interattiva o in un ambiente di scripting dei singoli elementi, cosa che avrebbe, diversamente, richiesto un [[linguaggio di programmazione]] più complesso. Per esempio, una lista dei processi in esecuzione non sarà costituita dal testo che li descrive, ma dagli oggetti che la compongono, sicché è possibile invocare metodi su questi oggetti senza far esplicito riferimento ad alcuna struttura o [[libreriaLibreria (informaticasoftware)|libreria]].
Il nome in codice di PowerShell, ''Monad'', proviene dalla [[monadologia]] di [[Gottfried Leibniz]], una filosofia in cui l'universo è composto da elementi fondamentali, le ''[[monadi]]'', disposti in una "[[armonia prestabilita]]". In maniera simile, PowerShell è la combinazione di compiti complessi e di una serie di componenti, le ''cmdlets'' (''command lets'', serie di comandi), che sono classi .NET progettate per sfruttare le caratteristiche dell'ambiente. La differenza fondamentale tra l'approccio Unix e quello di PowerShell risiede nel fatto che piuttosto che creare una "pipeline" (lett. ''tubo'') basata su input ed output testuali, PowerShell fa passare i dati da una cmdlet all'altra come ''oggetti'' (dati dotati di una struttura ben precisa).
 
=== Caratteristiche ===
L'output di una cmdlet, se si tenta di accedervi tramite riga di comando, viene automaticamente convertito in testo; se, invece, si tenta di utilizzarlo in un'altra cmdlet, esso verrà convertito nell'oggetto più appropriato per l'input di quell'altra cmdlet. In questo modo, varie utility comunemente utilizzate nelle pipelines Unix, quali [[grep]] ed [[awk]], non sono più necessarie, e si permette una combinazione interattiva o in un ambiente di scripting dei singoli elementi, cosa che avrebbe, diversamente, richiesto un [[linguaggio di programmazione]] più complesso. Per esempio, una lista dei processi in esecuzione non sarà costituita dal testo che li descrive, ma dagli oggetti che la compongono, sicché è possibile invocare metodi su questi oggetti senza far esplicito riferimento ad alcuna struttura o [[libreria (informatica)|libreria]].
* Linguaggio di scripting simile al [[C Sharp|C#]], con molte funzionalità dedicate agli utenti esperti, come il supporto diretto alle ''[[hash table]]'', i costrutti ''[[Switch (programmazione)|switch]]'' basati su [[espressioni regolari]], la scomposizione degli [[array]], la possibilità di memorizzare come dati [[metodoFunzione anonimoanonima|metodi anonimi]] da eseguire in un secondo momento. Sono presenti, naturalmente, tutte le caratteristiche che ci si aspetta di trovare in un linguaggio di scripting, quali l'[[iterazione]] ({{Codice|codice=for|linguaggio=PowerShell}} / {{Codice|codice=foreach|linguaggio=PowerShell}} / {{Codice|codice=while|linguaggio=PowerShell}}), i costrutti condizionali ({{Codice|codice=if|linguaggio=PowerShell}} / {{Codice|codice=switch|linguaggio=PowerShell}}), i campi di [[Visibilità (programmazione)|visibilità]] delle variabili (<code>global</code> / <code>script</code> / <code>local</code> / <code>private</code>) e la possibilità di definire funzioni.
 
* TutteTutti lei ''cmdlet'' ereditano alcune caratteristiche, cosa che permette all'utente di scegliere, ad esempio, il livello di interazione e la modalità di gestione degli errori; si consideri, come esempio, la "sospensione", che permette di entrare in una nuova shell di comando, indagare su un problema, e quindi continuare con il comando originale. Al programmatore viene fornito un semplice meccanismo integrato per definire le richieste da mostrare in situazioni del genere. Lei ''cmdlet'' che restituiscono qualcosa all'esterno supportano le opzioni <code>-WHATIF</code> e <code>-CONFIRM</code>. <code>-WHATIF</code> simula l'esecuzione della procedura, comunicandone il possibile esito all'utente. <code>-CONFIRM</code> informa l'utente su ciò che sta per accadere e gli permette di decidere cosa fare.
== Caratteristiche ==
* Un modello ''provider'' estendibile fornisce la possibilità di accedere e manipolare non solo il [[file system]], ma anche altre strutture dati gerarchiche. Ad esempio, PowerShell integra un provider per il [[Registro di Windows]] che consente l'accesso agli alberi "<code>HKLM"</code> (<code>HKEY_LOCAL_MACHINE</code>) e "<code>HKCU"</code> (<code>HKEY_CURRENT_USER</code>). In questo modo, il registro può essere visualizzato con comandi quali "{{Codice|codice=dir HKLM:\SOFTWARE\Microsoft"|linguaggio=batch}} dal prompt della shell. PowerShell fornisce ''provider'' per la libreria di certificati di sicurezza, le [[Variabile d'ambiente (Windows)|variabili d'ambiente]] e di shell, le funzioni e gli alias; gli utenti possono creare loro propri provider e integrarli in PowerShell.
 
* Le opzioni della riga di comando sono, in genere, parole intere, ma è possibile farvi riferimento più velocemente, specificando solo il numero minimo di lettere necessario a distinguerle dalle altre (adper esempio, l'opzione <code>-mostra-informazioni-dettagliate</code> può essere richiamata specificando solo <code>-m</code> se nessun'altra opzione comincia per ''m'').
* Linguaggio di scripting simile al [[C Sharp|C#]], con molte funzionalità dedicate agli utenti esperti, come il supporto diretto alle [[hash table]], i costrutti switch basati su espressioni regolari, la scomposizione degli [[array]], la possibilità di memorizzare come dati [[metodo anonimo|metodi anonimi]] da eseguire in un secondo momento. Sono presenti, naturalmente, tutte le caratteristiche che ci si aspetta di trovare in un linguaggio di scripting, quali l'[[iterazione]] (for/foreach/while), i costrutti condizionali (if/switch), i campi di visibilità delle variabili (global/script/local/private) e la possibilità di definire funzioni.
* Tutte le cmdlet ereditano alcune caratteristiche, cosa che permette all'utente di scegliere, ad esempio, il livello di interazione e la modalità di gestione degli errori; si consideri, come esempio, la "sospensione", che permette di entrare in una nuova shell di comando, indagare su un problema, e quindi continuare con il comando originale. Al programmatore viene fornito un semplice meccanismo integrato per definire le richieste da mostrare in situazioni del genere. Le cmdlet che restituiscono qualcosa all'esterno supportano le opzioni -WHATIF e -CONFIRM. -WHATIF simula l'esecuzione della procedura, comunicandone il possibile esito all'utente. -CONFIRM informa l'utente su ciò che sta per accadere e gli permette di decidere cosa fare.
* Un modello ''provider'' estendibile fornisce la possibilità di accedere e manipolare non solo il [[file system]], ma anche altre strutture dati gerarchiche. Ad esempio, PowerShell integra un provider per il [[Registro di Windows]] che consente l'accesso agli alberi "HKLM" (HKEY_LOCAL_MACHINE) e "HKCU" (HKEY_CURRENT_USER). In questo modo, il registro può essere visualizzato con comandi quali "dir HKLM:\SOFTWARE\Microsoft" dal prompt della shell. PowerShell fornisce provider per la libreria di certificati di sicurezza, le variabili d'ambiente e di shell, le funzioni e gli alias; gli utenti possono creare loro propri provider e integrarli in PowerShell.
* Le opzioni della riga di comando sono, in genere, parole intere, ma è possibile farvi riferimento più velocemente, specificando solo il numero minimo di lettere necessario a distinguerle dalle altre (ad esempio, l'opzione <code>-mostra-informazioni-dettagliate</code> può essere richiamata specificando solo <code>-m</code> se nessun'altra opzione comincia per 'm').
* Completamento automatico dei comandi estendibile dall'utente. Si pensi che [[cmd.exe]] nelle versioni recenti di Windows può solo completare i nomi di file e directory, a differenza di ciò che accade in shell quali [[bash]] e [[zsh]].
* Possibilità di assegnare l'output di un comando ad una variabile, che diventa un oggetto o un array di oggetti visualizzabile in qualunque maniera si desideri.
 
|titolo== Windows PowerShell (Monad)ISE Has Arrived==
Windows PowerShell ISE (Integrated Scripting Environment) è un’applicazione introdotta a partire da PowerShell 2.0<ref>{{Cita web|url=https://www.memexcomputer.it/windows-powershell/|titolo=Windows PowerShell: cos'è e a cosa serve (guida completa) {{!}}'L'{{!}}|autore=Stefano Serafino|sito=Memex Computer|data=2017-05-18}}</ref>. Con questa versione di PowerShell si possono eseguire comandi, provare e sottoporre a [[debug]] gli script in un’unica interfaccia utente multivista (e con grafica Windows). I riquadri sono specifici per i comandi, per gli script e per i risultati.
 
== Note ==
 
<references />
 
== Bibliografia ==
* {{Cita libro|url=http://www.powershell.it/Libri/Windows-PowerShell-2.0-Guida-completa.aspx|titolo=Windows PowerShell 2.0 - Guida completa|nome=Efran|cognome=Cobisi|isbn=978-88-8233-893-0|citazione=Community lead di powershell.it, la community italiana di Windows PowerShell''|urlmorto=sì|urlarchivio=https://web.archive.org/web/20100701030747/http://www.powershell.it/Libri/Windows-PowerShell-2.0-Guida-completa.aspx|dataarchivio=1º luglio 2010}}
* {{Cita libro|url=httphttps://www.manning.com/payette/|titolo=Windows PowerShell in Action|nome=Bruce|cognome=Payette|isbn=1-932394-90-7|citazione=Membro fondatore del team di Windows PowerShell e uno degli sviluppatori chiave del linguaggio di scripting''}}
* {{Cita libro|url=httphttps://www.oreilly.com/catalog/powershell/|titolo=Monad - Introducing the MSH Command Shell and Language (the ''Toad book''|nome=Andy|cognome=Oakley|isbn=0-596-10009-4}}
* {{Cita libro|url=http://nexus.realtimepublishers.com/EBMPS.htm|titolo=An Introduction to Microsoft PowerShell|nome=Don|cognome=Jones|urlmorto=sì|urlarchivio=https://web.archive.org/web/20061027045650/http://nexus.realtimepublishers.com/EBMPS.htm|dataarchivio=27 ottobre 2006}}
* {{Cita libro|url=http://www.sapienpress.com/powershell.asp|titolo=Windows PowerShell: TFM|nome=Don|cognome=Jones|coautori=Jeffery Hicks|isbn=0-9776597-1-2}}
* {{Cita libro|url=httphttps://www.oreilly.com/catalog/windowspowershell/|titolo=Windows PowerShell Quick Reference|nome=Lee|cognome=Holmes|isbn=0-596-52813-2|citazione=Sviluppatore del team di Windows PowerShell}}
* {{Cita libro|titolo=Microsoft Windows Powershell Programming for the Absolute Beginner|anno=2007|url=https://archive.org/details/microsoftwindows0000ford_t4l6|nome=Jerry Lee|cognome=Ford Jr|isbn=1-59863-354-6}}
* {{Cita libro|url=http://www.wrox.com/WileyCDA/WroxTitle/productCd-0471946931.html|titolo=Professional Windows PowerShell|nome=Andrew|cognome=Watt|citazione=Windows PowerShell MVP|isbn=0-471-94693-1|accesso=21 novembre 2006|dataarchivio=9 novembre 2006|urlarchivio=https://web.archive.org/web/20061109073304/http://www.wrox.com/WileyCDA/WroxTitle/productCd-0471946931.html|urlmorto=sì}}
 
== Altri progetti ==
Line 97 ⟶ 88:
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{cita web|http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx|Homepage di PowerShell|lingua=en}}
 
{{Componenti di Windows}}
{{Controllo di autorità}}
{{Portale|Informatica|Microsoft}}