Diventa professionista: la guida per utenti esperti di PowerShell
Se hai lottato con Windows 10, hai senza dubbio sentito parlare di PowerShell. Se di recente hai provato a fare qualcosa di stravagante con Win7 / 8.1, probabilmente è uscito anche PowerShell. Dopo anni passati a fare affidamento sulla riga di comando di Windows e file batch raggruppati, è ora di concentrarsi su qualcosa di più potente, più adattivo, migliore.
PowerShell è un'enorme aggiunta alla casella degli strumenti di Windows e può provocare un po 'di paura data l'enormità. È un linguaggio di scripting, una shell di comando, una cera per pavimenti? È necessario collegare un cmdlet con una classe .Net istanziata per eseguirlo con i provider? E perché tutti i documenti di supporto parlano di amministratori: devo essere un amministratore di Windows professionale per utilizzarlo?
Rilassare. PowerShell è potente, ma non deve essere intimidatorio.
La seguente guida è rivolta a coloro che hanno eseguito uno o due comandi di Windows o hanno jimmied un file batch. Considerala una trasformazione passo passo da PowerShell curioso a PowerShell capace.
Passaggio 1: alzalo
La prima cosa di cui avrai bisogno è PowerShell stesso. Se utilizzi Windows 10, hai già PowerShell 5, la versione più recente, installata. (Win10 Anniversary Update ha 5.1, ma non saprai la differenza con Fall Update 5.0.) Windows 8 e 8.1 vengono forniti con PowerShell 4, che è abbastanza buono per bagnarti i piedi. Installare PowerShell su Windows 7 non è difficile, ma richiede un'attenzione particolare e devi installare .Net Framework separatamente. JuanPablo Jofre spiega in dettaglio come installare WMF 5.0 (Windows Management Framework), che include PowerShell, oltre agli strumenti che probabilmente non utilizzerai all'avvio, su MSDN.
PowerShell offre due interfacce. Gli utenti avanzati sceglieranno la GUI completa, nota come Integrated Scripting Environment (ISE). I principianti, tuttavia, sono serviti al meglio dalla console di PowerShell, una semplice interfaccia di testo che ricorda la riga di comando di Windows o persino da DOS 3.2.
Per avviare PowerShell come amministratore da Windows 10, fare clic su Start e scorrere l'elenco delle app fino a Windows PowerShell. Fare clic su quella riga, fare clic con il pulsante destro del mouse su Windows PowerShell e scegliere Esegui come amministratore. In Windows 8.1, cerca Windows PowerShell nella cartella Sistema di Windows. In Win7, si trova nella cartella Accessori. È possibile eseguire PowerShell come un utente "normale" seguendo la stessa sequenza ma con un clic sinistro.
In qualsiasi versione di Windows, puoi utilizzare la ricerca di Windows per cercare PowerShell. In Windows 8.1 e Windows 10, è possibile inserirlo nel "Menu di alimentazione" Ctrl-X (fare clic con il pulsante destro del mouse su un punto vuoto sulla barra delle applicazioni e scegliere Proprietà; nella scheda Navigazione, selezionare la casella Sostituisci prompt dei comandi). Una volta aperto, è una buona idea aggiungere PowerShell alla barra delle applicazioni. Sì, ti piacerà così tanto.
Passaggio 2: digita i vecchi comandi di Windows
Saresti stupito di quanto la sintassi della riga di comando di Windows funzioni come previsto in PowerShell.
Ad esempio, cd
cambia le directory (ovvero le cartelle) e dir
continua a elencare tutti i file e le cartelle inclusi nella cartella corrente.
A seconda di come si avvia la console di PowerShell, è possibile iniziare da c:\Windows\system32
o da c:\Users\
. Nell'esempio dello screenshot, utilizzo cd ..
(nota lo spazio) per salire di un livello alla volta, quindi corro dir
per elencare tutti i file e le sottocartelle nella C:\
directory.
Passaggio 3: installa i file della guida
Comandi come cd
e dir
non sono comandi di PowerShell nativi. Sono alias, sostituti dei veri comandi di PowerShell. Gli alias possono essere utili per quelli di noi con la memoria del dito che è difficile da superare. Ma non iniziano nemmeno a toccare le parti più importanti di PowerShell.
Per iniziare ad avere un'idea di PowerShell stesso, digita help
seguito da un comando che conosci. Ad esempio, nello screenshot, digito help dir
.
La guida di PowerShell mi dice che dir
è un alias per il comando PowerShell Get-ChildItem
. Abbastanza sicuro, se digiti get-childitem
al PS C:\>
prompt, vedi esattamente quello che hai visto con il dir
comando.
Come notato nella parte inferiore dello screenshot, i file della guida per PowerShell non vengono installati automaticamente. Per recuperare loro (si fa desidera ottenere loro), accedere al PowerShell in modalità amministratore, quindi digitare update-help
. L'installazione dei file della guida richiederà diversi minuti e potrebbero mancare alcuni moduli: l'installazione della Guida per NetWNV e SecureBoot non è riuscita sulla mia macchina di prova. Ma quando hai finito, il sistema completo di aiuto sarà a tua completa disposizione.
Da quel momento in poi, digita get-help
seguito dal comando ("cmdlet" in PowerShell speak, pronunciato "command-let") che ti riguarda e visualizza tutto l'aiuto per quell'elemento. Ad esempio, get-help get-childitem
produce un riepilogo delle get-childitem
opzioni. Ti chiede anche di digitare variazioni sul tema. Pertanto, quanto segue:
get-help get-childitem -examples
produce sette esempi dettagliati di come utilizzare get-childitem
. Il comando PowerShell
get-help get-childitem -detailed
include questi sette esempi, nonché una spiegazione dettagliata di ogni parametro disponibile per il get-childitem
cmdlet.
Passaggio 4: ottenere assistenza sui parametri
Nello help dir
screenshot, potresti aver notato che ci sono due elenchi sotto SYNTAX
per get-childitem
. Il fatto che esistano due sintassi separate per il cmdlet significa che esistono due modi per eseguire il cmdlet. Come tenete separate le sintassi e cosa significano i parametri? La risposta è facile, se conosci il trucco.
Per ottenere tutti i dettagli sui parametri per il get-childitem
cmdlet o qualsiasi altro cmdlet, utilizzare il -full
parametro, in questo modo:
get-help get-childitem -full
Ciò produce un elenco riga per riga di ciò che è possibile fare con il cmdlet e di ciò che può (o non può) accadere. Guarda lo screenshot.
Passando al setaccio i dettagli del parametro, è abbastanza facile vedere che get-childitem
può essere utilizzato per recuperare elementi "figlio" (come i nomi delle sottocartelle o dei nomi dei file) in una posizione specificata, con o senza corrispondenze di caratteri specifiche. Per esempio:
get-childItem “*.txt” -recurse
recupera un elenco di tutti i *.txt
file " " nella cartella corrente e di tutte le sottocartelle (a causa del -recurse
parametro). Considerando quanto segue:
get-childitem “HKLM:\Software”
restituisce un elenco di tutte le chiavi di registro di alto livello in HKEY_LOCAL_MACHINE\Software
.
Se hai mai provato ad entrare nel registro utilizzando una riga di comando di Windows o un file batch, sono sicuro che puoi vedere quanto deve essere potente questo tipo di accesso.
Passaggio 5: inchioda i nomi
C'è un motivo per cui i cmdlet che abbiamo visto fino ad ora hanno lo stesso aspetto: get-childitem
, update-help
e get-help
tutti seguono la stessa convenzione verbo-nome. Per fortuna, tutti i cmdlet di PowerShell usano questa convenzione, con un verbo che precede un nome (singolare). Quelli di voi che hanno passato settimane a lottare con comandi VB e VBA con nomi incoerenti possono tirare un sospiro di sollievo.
Per vedere dove stiamo andando, dai un'occhiata ad alcuni dei cmdlet più comuni (grazie al blog Hey, Scripting Guy! Di Ed Wilson!). Inizia con i cmdlet che raggiungono il tuo sistema ed estrai informazioni utili, come le seguenti:
set-location
: Imposta la posizione di lavoro corrente su una posizione specificataget-content
: Ottiene il contenuto di un fileget-item
: Ottiene file e cartellecopy-item
: Copia un elemento da una posizione a un'altraremove-item
: Elimina file e cartelleget-process
: Ottiene i processi in esecuzione su un computer locale o remotoget-service
: Ottiene i servizi in esecuzione su un computer locale o remotoinvoke-webrequest
: Ottiene il contenuto da una pagina Web su Internet
Per vedere come funziona un particolare cmdlet, usa get-help
, come in
get-help copy-item -full
In base alla descrizione della guida, è possibile capire immediatamente cosa vuole il cmdlet. Ad esempio, se desideri copiare tutti i tuoi file e cartelle da Documents
a c:\temp
, dovresti utilizzare:
copy-item c:\users\[username] \documents\* c:\temp
Mentre digiti quel comando, vedrai alcuni bei tocchi integrati nell'ambiente di PowerShell. Ad esempio, se digiti copy-i
e premi il tasto Tab, PowerShell compila Copy-Item
e uno spazio. Se digiti erroneamente un cmdlet e PowerShell non riesce a capirlo, ottieni una descrizione molto completa di cosa è andato storto.
Prova questo cmdlet. (Potrebbe tentare di farti installare un programma per leggere la casella "Informazioni su". In tal caso, ignoralo.)
invoke-webrequest askwoody.com
Si ottiene un elenco sintetico delle dichiarazioni di contenuto, delle intestazioni, delle immagini, dei collegamenti e altro della pagina Web. Vedi come funziona? Si noti get-help
nell'elenco invoke-webrequest
che il invoke-webrequest
cmdlet "restituisce raccolte di moduli, collegamenti, immagini e altri elementi HTML significativi", esattamente ciò che si dovrebbe vedere sullo schermo.
Alcuni cmdlet ti aiutano a controllare o raggruppare PowerShell stesso:
get-command
: Elenca tutti i cmdlet disponibili (è un lungo elenco!)get-verb
: Elenca tutti i verbi disponibili (la metà sinistra dei cmdlet)clear-host
: Cancella la visualizzazione nel programma host
Vari parametri (ricordate get-help
) vi permettono di ridurre i comandi e restringere le opzioni che potrebbero esservi utili. Ad esempio, per visualizzare un elenco di tutti i cmdlet che funzionano con i servizi Windows, prova questo:
get-command *-service
Elenca tutti i verbi disponibili con service
il nome. Ecco il risultato:
Get-Service
New-Service
Restart-Service
Resume-Service
Set-Service
Start-Service
Stop-Service
Suspend-Service
È possibile combinare questi cmdlet con altri cmdlet per scavare in quasi tutte le parti di PowerShell. È qui che entrano in gioco i tubi.
Passaggio 6: portare i tubi
Se hai mai utilizzato la riga di comando di Windows o sei passato attraverso un file batch, conosci il reindirizzamento e le pipe. In termini semplici, sia il reindirizzamento (il >
carattere) che le pipe (il |
carattere) prendono l'output di un'azione e lo attaccano da qualche altra parte. Puoi, ad esempio, reindirizzare l'output di un dir
comando a un file di testo, o "reindirizzare" il risultato di un ping
comando in un find
, per filtrare i risultati interessanti, in questo modo:
dir > temp.txt
ping askwoody.com | find “packets” > temp2.txt
Nel secondo comando sopra, il find
comando cerca la stringa packets
nell'output in pipe di un askwoody.com ping
e inserisce tutte le righe che corrispondono in un file chiamato temp2.txt
.
Forse sorprendentemente, il primo di quei comandi funziona bene in PowerShell. Per eseguire il secondo comando, vuoi qualcosa del genere:
ping askwoody.com | select-string packets | out-file temp2.txt
L'utilizzo di reindirizzamento e pipe espande notevolmente le capacità della riga di comando di Windows: invece di scorrere all'infinito verso il basso di una schermata alla ricerca di una stringa di testo, ad esempio, puoi mettere insieme un comando di Windows in pipe che esegue il controllo per te.
PowerShell ha una funzionalità di piping, ma non è limitato al testo. Invece, PowerShell consente di passare un intero oggetto da un cmdlet a quello successivo, dove un "oggetto" è una combinazione di dati (denominati proprietà) e di azioni (metodi) che possono essere utilizzati sui dati.
La parte difficile, tuttavia, sta nell'allineare gli oggetti. Il tipo di oggetto fornito da un cmdlet deve corrispondere ai tipi di oggetti accettati dal cmdlet ricevente. Il testo è un tipo di oggetto molto semplice, quindi se lavori con il testo, allineare gli elementi è facile. Altri oggetti non sono così rudimentali.
Come capirlo? Benvenuto nel get-member
cmdlet. Se si desidera sapere quale tipo di oggetto produce un cmdlet, collegarlo tramite pipe get-member
. Ad esempio, se stai cercando di capire i processi in esecuzione sul tuo computer e hai ristretto le opzioni al get-process
cmdlet, ecco come scoprire cosa get-process
produce il cmdlet:
get-process | get-member
L'esecuzione di quel comando produce un lungo elenco di proprietà e metodi per get-process
, ma all'inizio dell'elenco puoi vedere il tipo di oggetto che get-process
crea:
TypeName: System.Diagnostics.Process
Il sotto screenshot si dice anche che get-process
ha proprietà chiamati Handles
, Name
, NPM
, PM
, SI
, VM
, e WS
.
Se si desidera manipolare l'output di in get-process
modo da poter lavorare con esso (invece di visualizzare un lungo elenco di processi attivi sul monitor), è necessario trovare un altro cmdlet che funzioni System.Diagnostics.Process
come input. Per trovare un cmdlet disponibile, è sufficiente utilizzare ... attendere che ... PowerShell:
get-command -Parametertype System.Diagnostics.Process
Ciò produce un elenco di tutti i cmdlet che possono essere gestiti System.Diagnostics.Process
.
Alcuni cmdlet sono noti per accettare quasi ogni tipo di input. Primo fra tutti: where-object
. Forse in modo confuso, where-object
scorre ogni elemento inviato lungo la pipeline, uno per uno, e applica qualsiasi criterio di selezione richiesto. C'è un indicatore speciale chiamato $_
. che ti consente di scorrere ogni elemento nel tubo, uno alla volta.
Supponiamo che tu voglia creare un elenco di tutti i processi in esecuzione sulla tua macchina che sono chiamati " svchost
" - in PowerShell parlare, vuoi abbinare una Name
proprietà di svchost
. Prova questo comando di PowerShell:
get-process | where-object {$_.Name -eq “svchost”}
Il where-object
cmdlet esamina ogni System.Diagnostics.Process
elemento, confronta il valore .Name
di tale elemento con " svchost
"; se l'elemento corrisponde, viene sputato dall'estremità del tubo e digitato sul monitor. Guarda lo screenshot.