Computer finestre Internet

Descrizione di powershell. Cos'è PowerShell? Iniziare con PowerShell

5 novembre 2014 alle 20:07

Inizia subito in PowerShell (Parte I)

  • Amministrazione di sistema ,
  • PowerShell
  • Esercitazione

Solo automazione. Solo PowerShell.

Prefazione

Come hobby e quando ho tempo, insegno agli studenti dell'UKIT (ex Istituto statale di tecnologie dell'informazione di Mosca). Al momento ho poco tempo da dedicare ad un gruppo di studenti, ma è sufficiente per preparare un post qui su Habré.

Lavoro come amministratore di sistema in una grande azienda non IT con molte risorse IT. Per tipo di attività, sembra che stia risolvendo un gran numero di compiti simili per servire gli utenti.

Ho conosciuto il linguaggio PowerShell circa due anni fa, ma l'ho preso sul serio solo un anno dopo, senza rendermi conto inizialmente delle sue enormi capacità. In questo articolo mi concentrerò innanzitutto su coloro che vogliono iniziare a lavorare con PowerShell, ma non si fidano ancora o non sanno in che modo avvicinarsi a questo miracolo.

Avvertenza: PowerShell crea dipendenza.

introduzione

Wikipedia ci dice:
Windows PowerShell- Strumento di automazione estensibile da Microsoft, costituito da una shell della riga di comando e da un linguaggio di scripting associato.

L'ambiente PowerShell potrebbe assomigliare alla riga di comando:


powershell.exe

Oppure come applicazione:


powershell_ise.exe

Powershell_ise.exe chiamato ambiente di scripting integrato: Windows PowerShell ISE. Ti consente di lavorare con la lingua in un ambiente conveniente con evidenziazione della sintassi, un costruttore di comandi, completamento automatico dei comandi premendo TAB e altri servizi. Ideale per creare e testare script.

Per avviare l'ambiente powershell.exe O powershell_ise.exe Basta digitare lo stesso nome nella riga di esecuzione.

Il file di script di PowerShell ha l'estensione .ps1.

Lo script non può essere lanciato con un doppio LMB. Questo viene fatto appositamente per non danneggiare il sistema con uno script avviato accidentalmente.

Per eseguire, fare clic con il tasto destro e selezionare "Esegui utilizzando PowerShell":

Oltre al fatto che esiste una restrizione sull'esecuzione degli script LMB, per impostazione predefinita l'esecuzione di script nel sistema è vietata, ancora una volta, per il motivo sopra descritto, per non danneggiare il sistema. Per verificare la politica di esecuzione corrente, esegui il comando:

Get-ExecutionPolicy

Otterremo uno dei seguenti valori. Con un'alta probabilità, se questo fosse il primo lancio, lo otterremo Limitato.

  • Limitato- Gli script non possono essere eseguiti;
  • Tutti firmati- È possibile eseguire solo script firmati da un editore attendibile. Verrà richiesta la conferma prima di eseguire lo script dell'editore attendibile;
  • Firmato remoto- Autorizzato a eseguire script creati da noi e script scaricati firmati da un editore attendibile;
  • Senza restrizioni- Nessuna restrizione, tutti gli script possono essere eseguiti.

Per l'esecuzione e il test, abbassare la policy a Firmato remoto eseguendo il comando:

Set-ExecutionPolicy RemoteSigned

Iniziamo

cmdlet
  • I cmdlet sono comandi di PowerShell che contengono varie funzionalità;
  • I cmdlet possono essere creati dall'utente o dal sistema;
  • I cmdlet vengono denominati in base alla regola verbo-nome, che li rende più facili da ricordare;
  • I cmdlet restituiscono i risultati come oggetti o raccolte di oggetti;
  • I cmdlet possono sia ricevere dati per l'elaborazione che trasmettere dati attraverso una pipeline (ulteriori informazioni sulle pipeline verranno fornite più avanti);
  • I cmdlet non fanno distinzione tra maiuscole e minuscole (è possibile scrivere get-process, Get-Process e GeT-pRoCeSs);
  • Non è necessario mettere " dopo i cmdlet ; ", tranne quando eseguiamo più cmdlet su una riga (Get-Process; Get-Services).

Ad esempio, per ottenere i processi correnti, eseguiremo il comando:

E otteniamo il risultato:

Prova tu stesso:

Get-Service #per ottenere lo stato dei servizi in esecuzione sui computer

Get-Content C:\Windows\System32\drivers\etc\hosts #per ottenere il contenuto di un file. In questo caso, il file host

Non è necessario conoscere a memoria tutti i cmdlet. Ottenere aiuto salverà la situazione.
È possibile ottenere informazioni su tutti i cmdlet disponibili eseguendo il comando seguente:

Cmdlet Get-Help -Category

Se utilizziamo PowerShell ISE, semplifichiamo il processo di sviluppo.
Basta inserire un trattino " - " dopo aver inserito il cmdlet, otterremo tutte le opzioni possibili per i parametri e i loro tipi:

Tentativo:

Get-Service -Nome p*

Se, tuttavia, dimentichiamo quali proprietà ha questo o quel cmdlet, lo eseguiremo Get-Membro:

Get-Processo | Get-Member #Sign "|" chiamato trasportatore. Su di lui di seguito.

Non hai abbastanza informazioni? Facciamo riferimento all'aiuto con il parametro -Esempi:

Get-Help Get-Process -Examples

Otteniamo una descrizione Get-Processo, e anche con esempi di utilizzo:

  • I cmdlet possono avere nomi abbreviati: alias. Ad esempio, invece di Ottenere aiuto può essere utilizzato semplicemente Aiuto. Per ottenere tutte le abbreviazioni, corri Ottieni-Alias.

Tentativo:

Blocco note di avvio del processo

Che è simile alla scrittura:

Avvia il blocco note

Ora interrompiamo il processo:

Blocco note Stop-Process-Nome

Spps -Nome blocco note

Poco prima abbiamo detto che i cmdlet vengono nominati secondo la regola Verbo-Nome. Vorrei chiarire che il verbo non deve essere Ottenere. Oltre a ciò che possiamo ricevere, possiamo chiedere Impostato(ricorda, Set-ExecutionPolicy), esegui Inizio, fermare Fermare, produzione Fuori, creare Nuovo e molti altri. Il nome del cmdlet non è limitato a nulla e quando ne creiamo uno nostro, possiamo chiamarlo come desidera il nostro cuore.

Proviamo a generare l'output in un file:

"Ciao, Habr!" | File in uscita C:\test.txt e C:\test.txt

A proposito, puoi scriverlo in questo modo:

"Ciao, Habr!" > C:\prova.txt & C:\prova.txt

Molti utenti conoscono il prompt dei comandi, ma pochissimi hanno sentito parlare di Windows PowerShell. In un certo senso, PowerShell è uno strumento che mira a sostituire la riga di comando e fornire funzionalità più potenti per la gestione del sistema operativo Windows. In questo articolo cercheremo di spiegare in modo chiaro cos’è questo strumento, perché è così potente e chi tende ad utilizzarlo più spesso.

Cos'è PowerShell?

Per una migliore comprensione, dobbiamo prima capire cos'è una shell. In informatica, una shell è un'interfaccia utente che fornisce l'accesso a vari servizi del sistema operativo. La shell può essere basata sulla riga di comando o può includere un'interfaccia utente grafica (GUI).

Windows PowerShell è una shell sviluppata da Microsoft per scopi di automazione delle attività e gestione della configurazione. Questa potente shell è basata sul framework .NET e include una shell della riga di comando e un linguaggio di scripting.

Potrebbe anche essere presente un ISE di Windows PowerShell sopra la shell della riga di comando standard. ISE funge da ambiente di scripting integrato: un'interfaccia utente grafica che consente di creare vari script senza dover immettere tutti i comandi sulla riga di comando.

La prima versione di PowerShell è stata rilasciata nel novembre 2006 per Windows XP, Windows Server 2003 e Windows Vista. L'ultima è la versione 4.0, rilasciata nell'ottobre 2013. Viene fornita per impostazione predefinita con Windows 8.1 e Windows Server 2012 R2.

Cosa puoi fare con PowerShell?

Microsoft ha sviluppato Windows PowerShell come strumento che aiuta ad automatizzare e risolvere rapidamente molte noiose attività amministrative. Ad esempio, puoi utilizzare PowerShell per visualizzare tutti i dispositivi USB installati su uno o più computer della rete oppure puoi impostare un'attività dispendiosa in termini di tempo da eseguire in background mentre svolgi altro lavoro. Puoi anche identificare e terminare i processi che non rispondono oppure filtrare informazioni specifiche sui computer della tua rete ed esportarle in formato HTML.

Le funzionalità di PowerShell ti consentono di semplificare e automatizzare attività ripetitive e dispendiose in termini di tempo creando script e combinando più comandi insieme.

Se sei un amministratore di rete, troverai PowerShell molto utile quando lavori con Active Directory. Considerando che lo strumento contiene centinaia di comandi personalizzabili chiamati cmdlet, la probabilità che PowerShell possa aiutarti a diventare più produttivo è molto alta.

Come eseguire PowerShell su Windows 8.1?

Se non hai un riquadro PowerShell nella schermata Start o un collegamento sul desktop, puoi aprirlo utilizzando la ricerca: questo è uno dei modi più semplici. Premi +Q, digita "powershell" e quindi premi Invio.

Puoi anche aprire PowerShell dalla sezione App della schermata Start: vai alla schermata Start e sposta il cursore nell'angolo in basso a sinistra, appena sotto l'ultimo riquadro nella prima colonna. Clicca sull'icona con la freccia rivolta verso il basso. Quindi fare clic sull'icona di PowerShell nella sezione "Utilità".

Per aprire PowerShell utilizzando la finestra di dialogo Esegui, premere +R, digitare "powershell" e premere Invio.

Come eseguire PowerShell su Windows 7?

In Windows 7, puoi cercare lo strumento cercando "powershell" nel menu Start.

Puoi anche aprire PowerShell tramite il menu Start nella sezione Accessori.

Ovviamente, il comando precedente nella finestra Esegui funziona anche in Windows 7.

Chi usa solitamente PowerShell?

Senza alcun dubbio, PowerShell è la scelta di molti amministratori IT. E per una buona ragione, perché lo strumento semplifica notevolmente le operazioni di gestione e riduce la mole di lavoro nelle grandi reti aziendali.

Supponiamo che tu gestisca una rete di grandi dimensioni contenente oltre cinquecento server e che sia necessario implementare una nuova soluzione di sicurezza che dipenda da alcuni servizi che devono essere eseguiti su tali server. Naturalmente, puoi connetterti a ciascun server e vedere se il servizio richiesto è installato e in esecuzione su di essi. Tuttavia, in questo caso, è improbabile che la tua direzione sia soddisfatta, perché avrai bisogno di troppo tempo per completare l'attività.

Con PowerShell, puoi svolgere questo lavoro in pochi minuti poiché l'intera operazione può essere eseguita con un singolo script che raccoglierà informazioni sui servizi in esecuzione sui server specificati e le salverà come file di testo, ad es.

PowerShell ti consente di fare molto di più di quanto possa essere trattato in un articolo, quindi se sei veramente interessato, ti consigliamo vivamente di acquistare e leggere uno dei tanti libri che trattano la potenza di questo strumento.

Vi auguro una buona giornata!

In questo articolo esamineremo la tecnologia di Microsoft come Windows PowerShell, parleremo di cos'è PowerShell, cosa sono i cmdlet e una pipeline, come scrivere script e moduli e toccheremo anche altre funzionalità altrettanto importanti e utili di Windows PowerShell.

Cosa ha contribuito alla nascita di Windows PowerShell?

Prima di PowerShell esistevano ( e ci sono) i seguenti strumenti per l'automazione e l'amministrazione dei servizi: riga di comando di Windows e Windows Script Host. Ma queste tecnologie presentano degli svantaggi.

La riga di comando di Windows ha anche la capacità di eseguire alcune attività amministrative e la possibilità di registrare un algoritmo di azioni, salvandolo come script (file bat), mentre è possibile utilizzare alcuni elementi di programmazione, ad esempio utilizzare variabili, costrutti condizionali, e anche qualcosa come i cicli.

La maggior parte dei prodotti software dispone di un'interfaccia console, ad es. possiamo controllare il programma utilizzando la riga di comando, risparmiando risorse grazie all'assenza di costi per l'esecuzione dell'interfaccia grafica. Microsoft rilascia anche edizioni senza interfaccia grafica per il sistema operativo server Windows Server ( Server Core, Windows Server 2016 ha anche Nano Server), ma tutto ciò non basta, poiché le funzionalità della riga di comando sono limitate, ad es. Non saremo in grado di scrivere una logica complessa per automatizzare qualcosa e, anche se potessimo, ci vorranno tempo e conoscenza.

Inoltre, uno svantaggio della riga di comando è che per gestire completamente il server utilizziamo varie utilità di console di prodotti software, e quindi utilizzare la riga di comando per l'amministrazione è in realtà difficile, dal punto di vista del fatto che tutte queste utilità hanno diverse sintassi, parametri, modalità di utilizzo e per eseguire compiti tipici, ad es. ogni giorno, devi tenere tutto questo in memoria e per eseguire compiti atipici devi prima leggere la guida o la documentazione.

La tecnologia Windows Script Host consente di eseguire tutte le attività amministrative come riga di comando, inclusa la loro automazione scrivendo script WSH, ma qui possiamo già utilizzare linguaggi di programmazione completi ( VBScript e JScript), cioè. È possibile implementare logiche e algoritmi complessi. Inoltre, con l’aiuto di WSH gestiamo i prodotti software tramite un’interfaccia a oggetti, in altre parole, Windows Script Host è molto di più” più fresco» rispetto alla riga di comando. Ma anche questa tecnologia non è diventata lo strumento ideale per amministrare e automatizzare questa amministrazione per gli amministratori di sistema, poiché Windows Script Host richiedeva la conoscenza dei linguaggi di programmazione di cui sopra, che in realtà è superflua per gli amministratori di sistema. Gli amministratori necessitano solo di un semplice strumento di amministrazione con la possibilità di programmare alcune azioni e non vogliono addentrarsi nei modelli oggetto dei prodotti software nei linguaggi di programmazione VBScript e JScript.

Di conseguenza, Microsoft aveva bisogno di sviluppare uno strumento di amministrazione per gli amministratori di sistema che soddisfacesse al 100% tutte le esigenze degli amministratori di sistema, sia in termini di capacità di amministrazione e automazione, sia in termini di comodità e facilità d'uso, così è apparso Windows PowerShell.

Cos'è Windows PowerShell?

Windows PowerShellè un linguaggio di scripting e una shell di comandi di Windows progettati per l'amministrazione e la configurazione dei sistemi operativi Windows. PowerShell si basa sul framework CRL e su .NET Framework e, a differenza della riga di comando, che accetta e restituisce testo, Windows PowerShell funziona con gli oggetti. Ogni oggetto in PowerShell dispone di proprietà e metodi che è possibile utilizzare per manipolare tali oggetti.

In Windows PowerShell, Microsoft ha sviluppato il concetto di cmdlet ( cmdlet), che è un sistema di denominazione dei comandi " Verbo-Sostantivo" Questo sistema consente agli amministratori di sistema di padroneggiare e semplificare rapidamente il lavoro con PowerShell.

Con Windows PowerShell puoi:

  • Accedere al file system;
  • Gestire il registro;
  • Gestire i servizi;
  • Gestire i processi;
  • Configurare il sistema operativo;
  • Installa il software;
  • Installare ruoli e componenti del server;
  • Amministrare e configurare ruoli e componenti del server;
  • Scrivere e utilizzare script per automatizzare la gestione e l'amministrazione;
  • Eseguire altre attività di amministratore di sistema.

Windows PowerShell contiene molte utilità e comandi di uso comune che è possibile eseguire dalla riga di comando, ad esempio ipconfig, ping e altri. Ciò è stato fatto per facilitare la transizione degli amministratori di sistema dalla riga di comando a PowerShell.

Inoltre, per comodità, molti comandi e utilità utilizzati di frequente in PowerShell hanno sinonimi ( Alias), ad esempio cls è un sinonimo del cmdlet Clear-Host, dir è un sinonimo di Get-ChildItem ( L'elenco completo dei sinonimi può essere visualizzato eseguendo il cmdlet Get-Alias).

Per semplificare la ricerca del comando desiderato, PowerShell dispone di uno speciale cmdlet Get-Command, con il quale è possibile effettuare la ricerca sia per verbo che per sostantivo. Tutti i comandi in Windows PowerShell sono raggruppati in moduli ( ad es. Hyper-V, NetTCPIP), che rende anche più facile trovare il comando giusto.

Una volta trovato il comando richiesto, puoi consultare le istruzioni per lavorare con questo comando, ad es. help, per questi scopi esiste uno speciale cmdlet Get-Help, ad esempio il seguente comando mostrerà la guida per il cmdlet Get-Command:

Ottieni-Aiuto Ottieni-Comando

La Guida in Windows PowerShell può essere breve, dettagliata ( parametro -Dettagliato), pieno ( parametro -Completo), ed è anche possibile visualizzare solo esempi ( parametro - Esempi). Il comando seguente mostrerà solo esempi di utilizzo del cmdlet Get-Command:

Get-Help Get-Command -Esempi

La guida di PowerShell è aggiornabile, ad es. può essere aggiornato con il comando Update-Help.

Versioni di Windows PowerShell

La prima versione di PowerShell 1.0 è apparsa il 14 novembre 2006 ed è stata rilasciata come distribuzione separata che poteva essere installata sulle seguenti versioni dei sistemi operativi Windows: Windows XP Service Pack 2, Windows Server 2003 Service Pack 1 e Windows Vista.

In Windows Server 2008 PowerShell 1.0 veniva fornito come componente da installare.

A partire da Windows 7 e Windows Server 2008 R2, PowerShell è parte integrante del sistema ( quelli. preinstallato, non è necessario installarlo). Di seguito è riportata una tabella di corrispondenza tra la versione di PowerShell e la versione del sistema operativo Windows ( quelli. quale versione di PowerShell è installata per impostazione predefinita su quale versione di Windows):

Versione di PowerShell Versioni di Windows
PowerShell 2.0 Windows 7, Windows Server 2008 R2
PowerShell 3.0 Windows 8, Windows Server 2012
PowerShell 4.0 Windows 8.1, Windows Server 2012 R2
PowerShell 5.0 Windows 10, Windows Server 2016

Con ogni nuova versione, PowerShell diventa uno strumento di amministrazione sempre più potente; per fare un confronto, il primo PowerShell aveva circa 130 cmdlet e in PowerShell 5.0 ce ne sono già più di 600!

Puoi scoprire la versione corrente di PowerShell utilizzando la proprietà PSVersion della variabile incorporata $PSVersionTable, ad esempio, esegui il comando seguente:

$PSVersionTable.PSVersion

Oppure esegui il cmdlet

Get-Variable -Name PSVersionTable –ValueOnly

dove il valore PSVersion sarà la versione di PowerShell.

Linguaggio PowerShell

PowerShellè un linguaggio di programmazione di scripting orientato agli oggetti. Viene utilizzato per scrivere comandi per controllare tutti i componenti del sistema operativo Windows in Windows PowerShell e per scrivere script per automatizzare le attività amministrative nell'ambiente di scripting integrato di Windows PowerShell (ISE). Sebbene il linguaggio PowerShell sia stato creato per attività di amministrazione, è un linguaggio di programmazione di scripting a tutti gli effetti, poiché dispone di costrutti di programma presenti in ogni linguaggio di programmazione, come: condizioni, cicli, gestione degli errori, utilizzo di variabili, oggetti e matrici.

Il linguaggio PowerShell ha una sintassi uniforme per la scrittura dei comandi e una struttura di denominazione per questi comandi basata sul principio “ Verbo-Sostantivo", il che rende questo linguaggio intuitivo sia per i programmatori che per gli amministratori di sistema.

Windows PowerShell

Windows PowerShellè un ambiente per l'esecuzione di comandi e script in PowerShell. Questa shell ha le stesse funzionalità della riga di comando, come ad esempio: memorizzare la cronologia dell'esecuzione dei comandi, personalizzare l'aspetto della shell, completare l'esecuzione dei comandi con la combinazione di tasti Ctrl+C, così come molte altre funzionalità che non sono presenti nella shell della riga di comando, ad esempio una funzionalità meravigliosa come " evidenziazione della sintassi» ( introdotto in PowerShell 5.0).

Esistono diversi modi per avviare PowerShell, ad esempio:

  • Dalla riga di comando digitando PowerShell;
  • Attraverso la finestra di dialogo " Eseguire» ( scorciatoia da tastiera Win+R), digitando anche PowerShell;
  • In Windows 7: Start->Tutti i programmi -> Accessori -> Windows PowerShell -> Windows PowerShell;
  • In Windows 8.1 o Windows Server 2012 R2: Start->Tutti i programmi -> Strumenti di sistema -> Windows PowerShell;
  • In Windows 10 o Windows Server 2016: Start->Tutti i programmi -> Directory di Windows PowerShell ( nel girone W) -> Windows PowerShell.

Esempio di esecuzione di PowerShell in Windows Server 2016

Schermata di PowerShell in Windows Server 2016

Cmdlet in PowerShell

cmdlet (cmdlet) è un comando di Windows PowerShell che consente di interagire con gli oggetti del sistema operativo per gestirli. Questi comandi fanno parte del linguaggio PowerShell. I cmdlet sono costruiti secondo il principio “ Verbo-Sostantivo", separati da un trattino (-); in altre parole, indichiamo prima cosa fare, e con un trattino indichiamo cosa fare. Ad esempio, il cmdlet Get-Help, dove Get è un verbo che significa " Ottenere", e Aiuto è un sostantivo" Aiuto" nel contesto di PowerShell " Mostra aiuto" I cmdlet di PowerShell restituiscono risultati come oggetti, che rappresenta una delle principali differenze rispetto al prompt dei comandi di Windows, in cui i comandi restituiscono solo testo sullo schermo.

Oltre ai cmdlet per l'ottenimento dei dati (Get), esistono anche tipi di cmdlet come:

  • Aggiungi: aggiunta di dati;
  • Chiaro – chiaro;
  • Abilita – abilita;
  • Disabilita: disattiva;
  • Nuovo: crea;
  • Rimuovi – rimuovi;
  • Imposta - imposta;
  • Inizio: inizio;
  • Basta basta;
  • Esportazione – esportazione;
  • Importa – importa;
  • E molti altri.

Un elenco completo dei cmdlet in Windows PowerShell può essere visualizzato utilizzando lo speciale cmdlet Get-Command. Ad esempio, eseguilo con il parametro del cmdlet -CommandType, di conseguenza, sullo schermo verrà visualizzato un elenco di cmdlet.

Cmdlet Get-Command -CommandType

Come hai già capito, i cmdlet hanno parametri con i quali possiamo specificare le azioni del cmdlet. I parametri possono essere obbligatori o facoltativi; ad esempio, il cmdlet Get-Command non ha parametri obbligatori.

L'immagine seguente mostra un modo per cercare un cmdlet in base al verbo ( Parametro del verbo). In questo caso, abbiamo visualizzato un elenco di cmdlet che possono riavviare qualcosa.

Squadra

Get-Command -Verb Riavvia

Per cercare un cmdlet in base al nome, è necessario utilizzare il parametro Noun. Ad esempio, di seguito è riportato un elenco di cmdlet che funzionano con i servizi.

Squadra

Servizio Get-Command-Noun

Se non trovi il cmdlet desiderato con il nome completo, puoi utilizzare una maschera nel formato *Testo*.

Pipeline in PowerShell

Una delle funzionalità principali di Windows PowerShell è la possibilità di utilizzare una pipeline durante l'esecuzione dei comandi.

Trasportatore– questo è il trasferimento del risultato di un cmdlet tramite una barra verticale (|) ad un altro cmdlet. Allo stesso tempo, come ricorderete, in PowerShell i cmdlet funzionano con gli oggetti e restituiscono oggetti, di conseguenza, anche gli oggetti vengono trasferiti lungo la pipeline;

Utilizzando una pipeline, puoi eseguire attività complesse in modo semplice e conveniente senza la necessità di scrivere algoritmi e script complessi.

Ad esempio, troviamo il nome del file più grande nella directory "C:\Windows\System32" ( semplice esempio di pipeline).

Squadra

Get-ChildItem -Percorso "C:\Windows\System32" -File | Lunghezza ordinamento oggetto -Discendente | Seleziona-Oggetto-Primo 1

  • Get-ChildItem – cmdlet per ottenere oggetti nella directory specificata;
  • Sort-Object è un cmdlet per l'ordinamento degli oggetti, nel nostro caso ordiniamo in base alla dimensione del file ( lunghezza -Discendente);
  • Select-Object è un cmdlet per selezionare le proprietà desiderate di un oggetto; nel nostro caso visualizziamo i campi standard e solo il primo oggetto, ovvero file grande ( parametro -Primo 1).

Tutti i cmdlet sono separati gli uni dagli altri da una barra verticale. Il risultato di ciascun cmdlet viene passato come input a un altro cmdlet, ad es. per prima cosa otteniamo tutti gli oggetti nella directory specificata, quindi ordiniamo il risultato e infine selezioniamo il primo oggetto.

Esecuzione in background delle attività

Windows PowerShell ha la capacità di eseguire processi in background, ovvero un meccanismo mediante il quale è possibile eseguire un comando ( ad esempio, che richiede molto tempo per essere completato) sullo sfondo, cioè dopo l'avvio si ritorna alla sessione corrente e si può continuare a lavorare senza attendere il completamento del comando. Avrai bisogno di questa funzionalità quando devi eseguire un comando che richiede molto tempo per essere completato e, come sai, durante questo periodo la sessione di PowerShell viene bloccata fino al completamento del comando e devi continuare a lavorare.

Puoi gestire tutte le attività in esecuzione in background, ad esempio visualizzare l'elenco delle attività, interrompere l'attività, eliminare l'attività e, ovviamente, visualizzare il risultato dell'attività.

Windows PowerShell dispone dei cmdlet seguenti per l'utilizzo dei processi in background:

  • Start-Job: avvia un'attività in background;
  • Stop-Job: interrompe un'attività in background
  • Get-Job: visualizza l'elenco delle attività in background;
  • Receive-Job: visualizza il risultato dell'esecuzione di un'attività in background;
  • Remove-Job: rimuove un'attività in background;
  • Wait-Job: sposta un'attività in background in primo piano per attendere che finisca.

Per eseguire in background, è necessario scrivere il comando Start-Job e tra parentesi graffe () un comando o una serie di comandi che si desidera eseguire in background.

Ad esempio, eseguiamo alcune attività ( mostra l'elenco dei servizi) in background, quindi guarda l'elenco dei lavori in background e visualizza il risultato del nostro lavoro ( quelli. elenco dei servizi).

Esegui un'attività in background

Avvia lavoro (Get-Service)

Osserviamo l'elenco delle attività in esecuzione in background

Visualizzazione del risultato di Job1

Ricevi-Lavoro Lavoro1

Come puoi vedere, ora abbiamo un'attività con lo stato " Completato", cioè. è già stato completato ( Get-Service funziona velocemente).

Per vedere il risultato dell'attività in background, ad es. Get-Service, abbiamo eseguito il comando Receive-Job e gli abbiamo passato il nome del lavoro ( è possibile anche il valore dell'identificatore). Di conseguenza, abbiamo visualizzato un elenco di servizi.

Controllo remoto tramite PowerShell

Windows PowerShell è progettato non solo per l'uso locale, ma anche per l'esecuzione di comandi remoti. Questa funzionalità è necessaria per poter gestire i computer remoti dal tuo posto di lavoro, ad es. eseguire i comandi di PowerShell.

Esistono diversi metodi di controllo remoto:

  • Utilizzando il parametro -Nome del computer (molte squadre ce l'hanno). In altre parole, si passa come parametro il nome del computer su cui si desidera eseguire il comando. Il metodo presenta lo svantaggio di essere limitato all'esecuzione di un comando;
  • Utilizzo delle sessioni. cmdlet Enter-PSSession (sessione interattiva). In questo modo, ti connetti a un computer remoto e tutti i comandi che digiti in PowerShell verranno eseguiti sul computer remoto come se digitassi i comandi direttamente sul computer remoto. Il metodo presenta inoltre lo svantaggio che la sessione è limitata ad un solo computer;
  • Utilizzando un cmdlet Invoca-Comando. Utilizzando questo metodo, puoi eseguire comandi o script su uno o più computer.

Ad esempio, per connettersi a un computer remoto ( nell'esempio seguente ServerName) in una sessione interattiva, esegui il comando seguente:

Immettere-PSSession ServerName

Script, funzioni e moduli in Windows PowerShell

Se hai scritto un algoritmo, molto probabilmente vorrai salvarlo per poterlo utilizzare in futuro. Windows PowerShell dispone di un meccanismo di scripting a questo scopo.

L'essenza di questo meccanismo è la seguente: scrivi la serie di comandi di cui hai bisogno e la salvi come script: si tratta di un semplice file di testo con estensione .PS1.

Quindi, per eseguire questo script, è sufficiente eseguirlo in PowerShell. In questo caso, è necessario specificare il percorso completo del file di script oppure accedere alla directory con lo script e chiamarlo per nome.

Importante!

Per impostazione predefinita, è vietato eseguire script su Windows! Per visualizzare i criteri di esecuzione dello script, eseguire il cmdlet Get-ExecutionPolicy. Di conseguenza, restituirà la politica corrente, ad esempio:

  • Limitato: l'esecuzione di qualsiasi script è bloccata ( valore di default);
  • AllSigned – è consentita l'esecuzione di script dotati di firma digitale;
  • RemoteSigned – è consentita l'esecuzione di script locali, tutti gli script scaricati devono avere una firma digitale;
  • Senza restrizioni: è consentita l'esecuzione di qualsiasi script ( sconsigliato perché pericoloso!).

Per abilitare l'esecuzione degli script, è necessario utilizzare il cmdlet Set-ExecutionPolicy con uno dei parametri sopra indicati.

Ad esempio, per consentire l'esecuzione degli script locali, eseguire il comando seguente e accettare le modifiche premendo Y.

Set-ExecutionPolicy RemoteSigned

È possibile passare parametri a uno script, renderli obbligatori o impostare un valore predefinito.

Windows PowerShell fornisce un meccanismo per creare funzioni personalizzate che, come i cmdlet incorporati, possono essere utilizzate nella shell di PowerShell.

Per fare ciò, è necessario specificare la parola chiave Function e quindi scrivere l'algoritmo per utilizzare questa funzione tra parentesi graffe (), ad es. set di comandi ( ad esempio, alcune procedure utilizzate di frequente: creare un utente con determinati diritti, pulire determinate directory e così via). Quindi devi salvare tutto questo in uno script, ma solo con l'estensione .psm1, poiché questo file sarà già un modulo.

Ma non è tutto, questo file deve essere inserito nella directory in cui PowerShell cerca i moduli. Esistono diverse directory di questo tipo ( directory speciale nel profilo utente, la directory in cui è installato PowerShell), possono essere visualizzati nelle variabili di ambiente di PowerShell. Per fare ciò, esegui il comando seguente

Get-ChildItem Env:\PSModulePath | Formato-Tabella -Dimensione automatica

Una volta posizionato il modulo che hai scritto in una directory speciale, puoi accedere alle tue funzioni come normali comandi di PowerShell.

Ambiente di scripting integrato (ISE) di Windows PowerShell

Per rendere conveniente la scrittura di script, funzioni e, di conseguenza, moduli, Microsoft ha sviluppato uno speciale programma grafico Ambiente di scripting integrato(ISE) - Ambiente di scripting integrato. È molto comodo lavorare con questo programma e ha anche potenti funzionalità ( creazione di più schede con script, area di output, debugger integrato e altro ancora).

Puoi eseguirlo in questo modo:

  • In Windows 7: Start -> Tutti i programmi -> Accessori -> Windows PowerShell -> Windows PowerShell ISE;
  • In Windows 10 o Windows Server 2016: Start->Tutti i programmi -> Directory di Windows PowerShell ( nel girone W) -> Windows PowerShell ISE.

Nota! ISE non verrà eseguito su un sistema Windows Server installato nell'edizione Server Core.

Screenshot dell'ambiente di scripting integrato (ISE) di PowerShell in Windows Server 2016

Per me è tutto, spero che il materiale ti sia stato utile! Buona fortuna!

Windows PowerShell è uno degli strumenti importanti nelle mani di un amministratore di sistema Windows. PowerShell è uno strumento potente da non trascurare. Questo articolo ha lo scopo di fornire competenze di base su Windows PowerShell.

PowerShell è molto più di una semplice shell da riga di comando. La prima versione di PowerShell è apparsa nel 2006, il motivo del suo sviluppo era la primitività della classica riga di comando di Windows, che non consentiva l'esecuzione di algoritmi complessi;

Windows PowerShell è preinstallato su Windows 7, 8, 8.1 e Windows Server 2008 R2, 2012 R2 e può anche essere aggiunto a Windows XP SP3, Vista e Windows Server 2003 SP2. L'interfaccia di PowerShell assomiglia alla familiare interfaccia della riga di comando.


Interfaccia di Windows PowerShell

Come accennato in precedenza, la questione non si limita all'interfaccia della riga di comando. PowerShell fornisce all'amministratore di sistema il proprio linguaggio di scripting che consente di automatizzare azioni complesse.

I comandi eseguiti in PowerShell possono essere sotto forma di cmdlet, funzioni, script ed eseguibili esterni.

Cmdlet è un nuovo tipo di comando integrato in PowerShell. I comandi di questo tipo vengono compilati in librerie dll e caricati nel processo PowerShell all'avvio. I cmdlet stessi non vengono eseguiti come applicazioni.

I nomi dei cmdlet corrispondono al modello "verbo-sostantivo". Il verbo descrive l'azione che vogliamo eseguire e il sostantivo descrive l'oggetto su cui verrà eseguita l'azione. Ad esempio, per cancellare lo schermo della console, è necessario inserire il comando Clear-Host. Puoi visualizzare i comandi disponibili digitando Get-Command nella console.

I cmdlet possono avere parametri. In generale assomiglia a questo:

nome_cmdlet -parametro1 -parametro2 argomento1 argomento2

Gli argomenti sono parametri che non hanno nomi.

Come funziona? Ad esempio, abbiamo il comando dir, che visualizza il contenuto di una directory.

Un esempio del comando dir

Diciamo che ho perso un certo file. Lascia che questo sia un file della guida di Photoshop. Ricordo che il nome del file contiene "photoshop" e che è un file pdf. Per quanto ricordo, il file è in questa directory. Posso elencare tutti i file in una directory come nell'esempio sopra e cercare il file manualmente. Oppure posso utilizzare il parametro -filter, che visualizzerà solo i file che corrispondono a un argomento specifico. L'argomento sarà *photoshop*.pdf . Ci sono degli asterischi attorno alla parola "photoshop" perché non ricordo il nome esatto del file e sto dicendo a PowerShell che possono esserci caratteri prima e dopo "photoshop". Ti dico anche di cercare il file pdf.

Quindi, il file che stavi cercando è stato trovato. Nella vista generale dei cmdlet veniva indicato che un cmdlet può avere diversi parametri. A loro volta, i parametri non hanno sempre argomenti.

Complichiamo un po' il nostro esempio. Diciamo che ora devo trovare un libro di Christopher Dougherty. Squadra dir -filter *dougherty*.pdf non mi ha dato niente. Ciò significa che il libro non è in questa directory, ma ricordo per certo che è da qualche parte qui, ovviamente nelle sottodirectory. Per effettuare la ricerca nelle sottodirectory, aggiungeremo il parametro -recurse.

La ricerca richiederà un po' più tempo, ma il libro che stai cercando verrà trovato.

Come puoi vedere, il parametro -recurse non contiene un argomento. I parametri stessi possono essere in qualsiasi ordine, l'importante è seguire rigorosamente la logica quando l'argomento richiesto segue il parametro a cui è destinato. Quindi il comando dir -filter *dougherty*.pdf -recurse funzionerà esattamente allo stesso modo di dir -recurse -filter *dougherty*.pdf.

I nomi dei parametri possono essere scritti in forma abbreviata, il che è abbastanza comodo per il lavoro quotidiano con la riga di comando. L'abbreviazione deve essere comprensibile per l'interprete, ad es. non consentire doppie interpretazioni. Ad esempio, possiamo abbreviare il parametro -recurse in un semplice -r e abbreviare -filter in -f causerà un errore, perché C'è anche un parametro -force. In questo caso, puoi abbreviare -filter in -fi .

Ora abbiamo un'idea sui cmdlet. La prossima volta .