Windows PowerShell è potente come il terminale di Unix / Linux? [chiuso]


45

Windows PowerShell è potente ed efficiente come quello di Linux terminal?

Le persone offline mi dicono, senza spiegare molto, che Windows PowerShell è un tentativo di far sentire gli amministratori di Unix più a loro agio usando Windows. Ma immagino, saranno comodi solo se ha (o quasi) la stessa efficienza.


3
È difficile rispondere, perché non esiste quella shell Linux. Esistono molte shell comunemente usate su Linux (o generalmente su sistemi * nix). Il più usato è bash, quindi potresti volerlo chiedere. <br> Anche "potente" è molto basato sull'opinione.
Kritzefitz,

8
People offline tell me ... that Windows Powershell is an attempt to make UNIX administrators feel more comfortable using Windows.Quelle persone non hanno mai usato Unix o Powershell.
surfasb,

Direi che PowerShell è un riconoscimento da alcune aree di Microsoft che hanno incasinato non avendo a disposizione una shell potente. Tuttavia, non copia affatto lo stile di UNIX. Per conoscere PS, fai davvero bene a capire un po 'come funziona Windows e come funziona .NET.
Julian Knight,

A proposito, Microsoft aveva a disposizione una shell BASH che faceva parte di un toolkit di migrazione che dovrebbe aiutare le persone a passare da UNIX a Windows Server.
Julian Knight,

1
Sono un fan di Unix di vecchia data che preferisce Unix a Windows per molti aspetti; tuttavia, PowerShell batte bash a mani basse perché uno pipe oggetti con coppie chiave / valore e non testo puro. Questo lo rende più simile nel design a jQuery che a bash.
Mario,

Risposte:


56

Bene, il tuo primo problema è che stai confrontando una shell (PowerShell) con un terminale. In Linux, un terminale è qualcosa che invia e riceve I / O basato sui caratteri e si presume che ci sia un utente interattivo dietro (in altre parole, è l'applicazione GUI utilizzata per contenere una shell). Una delle shell più comuni eseguite all'interno del Terminale di Ubuntu è Bash , ma ce ne sono altre.

Le persone offline mi dicono, senza spiegare molto, che Windows PowerShell è un tentativo di far sentire gli amministratori di Unix più a loro agio usando Windows.

In realtà, la cosa corretta da dire è che PowerShell è Windows che espone gran parte del modello a oggetti WMI , COM e .NET in un ambiente a riga di comando interattivo e con script - e che questo ambiente a riga di comando continua a prendere in prestito molti dei concetti - come pipeline e redirezione I / O - da shell di Unix, proprio come il vecchio DOS (2.0 e successive) command.come cmd.exeha fatto. Le pipeline funzionano con oggetti in PowerShell. Puoi fare cose come creare HTML e possibilmente fogli di calcolo Excel al volo se ne sapevi abbastanza. È certamente un aggiornamento / sostituzione dalla vecchia cmd.exeshell che non è cambiata molto da Windows NT 4.0 .

Per quanto riguarda la sintassi, è meno simile alle shell Unix (anche se alla fine nessuno dei cmdlet usa /come switch o indicatore di parametro), ma ci sono molti alias ai classici comandi Unix - come entrare lsin una finestra di PowerShell funzionerà come dir. Ma questi sono solo alias ("Get-Alias" li elenca?).

Per quanto riguarda la capacità di PowerShell, hai davvero avuto una capacità simile, in modo esclusivamente scriptato, da VBScript e CScript , sebbene entrambi precedano .NET.

Una cosa che le persone di Unix non devono fare quando usano Bash per la maggior parte del tempo è quella di avere un'intima familiarità con il modello a oggetti forse molto elaborato di un programmatore o oggetto, necessario per molte attività di PowerShell avanzate e semplici. Ma questo è possibile solo perché esiste una chiara convenzione di output di testo semplice per molti comandi POSIX standard . Windows non ha questa tradizione: sembra che preferisca usare una mmcconsole per le attività di amministrazione, con i comandi aggiunti qua e là nel corso degli anni. Inoltre, molte utility Unix ben noti sono complesse e richiedono un po 'di studio prima di utilizzo - rsync, wgete molti altri. L'efficienza è probabilmente una funzione di quanto si conosce lo strumento che stanno usando più di ogni altra cosa.


8
+1 per menzionare che PowerShell espone .NET alla console e come host di script. Espone la potenza di molte librerie Windows chiave da utilizzare negli script. I casi d'uso tra i due possono essere simili, lo stile è totalmente diverso.
Julian Knight,

3
+1 per menzionare che un terminale contiene una shell. Ho usato Windows e Linux per molto tempo, ma nessuno ha mai avuto la differenza così chiara.
Tyler Collier,

26

Windows PowerShell e Unix shell sono due cose diverse con vantaggi in entrambi.

Unix (shell) ha una filosofia secondo cui tutto è un file. È possibile accedere all'input e all'output di un comando Unix come un file. Questo rende il comando del concatenamento davvero semplice e riutilizzare l'output di un comando da parte di un altro è la potenza della shell Unix.

Con Windows PowerShell, per quanto ne so, tutto è un oggetto. È possibile passare il risultato di un comando a un altro come oggetto. Questo può essere davvero potente, ma non ha il semplice concetto di Unix.

Non credo che PowerShell sia efficiente come una shell Unix, ma altri credono che lo sia.

Ma il confronto è controverso, perché Windows non è un sistema * nix, quindi i concetti * nix non si applicano. Rispetto a MS-DOS , PowerShell è un grande miglioramento.


4
Tutto ciò che è un file non ha nulla a che fare con la shell, è una cosa del kernel.
terdon,

3
Vero, ma influisce su come è progettata la shell unix.
Biapy,

@terdon: esatto, ma la shell funziona bene con questo. Perché è ancora la shell che riconosce simboli come |, <o >.
Kritzefitz,

1
Le persone continuano a parlare di questi oggetti in PowerShell. Utilizzato solo per cmd.exe e bash (o altre shell), puoi elaborare, forse con un semplice esempio?
Luc,

5
Senza allontanarti da questa pagina - quando conduci le cose nei sistemi * nix sul lato destro della pipa ti aspetti un testo semplice, ad esempio --- storia | grep cp --- restituirà solo le righe che contengono cp. D'altra parte quando si pipeline cose in PS sul lato destro si ottiene un oggetto, con proprietà come questa --- Get-History | Where-Object {$ _. CommandLine -eq "cp"} --- $ _ è ogni oggetto, CommandLine è la proprietà, -eq è uguale e infine la stringa cp.
Sconosciuto il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.