2010-09-01 14 views

risposta

4

PowerShell può fare un sacco di cose che un'applicazione di console .NET può fare, ma è ancora un linguaggio di scripting. Ma è molto meglio della lingua del file batch o VBScript/JScript. I suoi punti di forza includono la possibilità di usare pipe e filtri simili a UNIX ma con oggetti al posto del testo stupido. Può anche creare oggetti CLR e COM e richiamarne proprietà e metodi.

Tuttavia, se stai scrivendo qualcosa di complesso, ti conviene scrivere un programma compilato in modo da avere i vantaggi di trovare errori in fase di compilazione e di avere un IDE migliore. Inoltre, se si desidera eseguire uno script PowerShell, PowerShell deve essere installato sul computer in cui viene eseguito.

+0

Quindi non dovrebbe davvero essere confrontandola con le applicazioni .NET, ma per i file batch e VBScript? –

+0

Corretto, anche se è anche una buona alternativa a semplici app di console .NET di breve durata (come, ad esempio, una semplice manipolazione di file). – Jacob

10

PowerShell è una shell interattiva come KornShell, Bash ed er CMD.exe. E come quelle shell supporta un linguaggio di scripting (KSH, Bash, Batch). Tuttavia PowerShell è costruito su .NET e presenta tipi .NET e consente di creare e manipolare molti tipi .NET. Pertanto, con ilè possibile utilizzare PowerShell per creare script in grado di eseguire ciò che una normale app della console .NET potrebbe eseguire.

Un fattore da considerare quando si scrivono piccole applicazioni della console di utilità è quanto impegno si spende a scrivere il codice di utilizzo di & rispetto al codice richiesto per raggiungere lo scopo fondamentale dell'exe. Ho passato a scrivere molte utility come script PowerShell perché PowerShell fornisce un motore di analisi dei parametri con molte funzioni interessanti: parametri nominali/posizionali, parametri obbligatori/facoltativi, valori predefiniti per i parametri, specifiche parziali dei nomi dei parametri, ecc.

PowerShell 2.0 aggiunge ancora più funzioni in quest'area (attributi di convalida, ecc.) Con funzioni avanzate. È possibile scrivere facilmente "pagine man" come commenti per i propri script o funzioni avanzate. Considerando che trascorrevo il 50-80% del mio tempo a digitare il codice di parsing dei parametri flaky, non standard (is it - or/or both?) In un'app console C#, ho lasciato che PowerShell lo gestisse per me. Tuttavia, ritengo che Jacob abbia ragione nel dire che le attività complesse che richiedono un codice .NET di livello inferiore sarebbero più facili da ottenere (controlli di tempo di compilazione statici) e il debug in C#/VB/Visual Studio.

Mi piacerebbe vedere il parametro PowerShell che analizza la funzionalità esposta tramite un set di tipi .NET nel BCL in modo da poter scrivere un'app console e ottenere la funzionalità di analisi di PowerShell. Molto tempo fa ho usato un componente open source chiamato Gengis ma penso che sia stato abbattuto. A un certo punto durante le beta 4.0 di .NET, un parser della riga di comando è apparso nel framework ma è stato rimosso prima di RTM. Non penso che questo parser della riga di comando abbia avuto alcuna connessione con PowerShell - e dovrebbe avere IMO. Quindi probabilmente una buona cosa è stata tirata.

2

Il punto di forza di Powershell è la semplicità e l'interoperabilità specifiche dei prodotti Microsoft. Ad esempio, all'interno di Exchange 2007 e 2010, non è possibile modificare alcuni attributi senza utilizzare Powershell. Non fino a SP2, potresti persino gestire le cartelle pubbliche in Exchange 2007.

In secondo luogo, mi piace molto, come tutto in PoSh è un oggetto. Cose come la lettura in un file CSV sono semplici come

$csv = import-csv c:\MyUsers.csv 

Ora avete un oggetto indicizzato, con ogni colonna raggiungibile con la sua testa di colonna. Non qualcosa di facilmente realizzabile in molte altre lingue, afaik.

$csv[1].UserName

Problemi correlati