Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken

Historisch gezien zijn opdrachtregelhulpprogramma's op Unix-systemen beter ontwikkeld dan op Windows, maar met de komst van een nieuwe oplossing is de situatie veranderd.

Met Windows PowerShell kunnen systeembeheerders de meeste routinetaken automatiseren. Met zijn hulp kunt u instellingen wijzigen, services stoppen en starten en ook onderhoud uitvoeren aan de meeste geïnstalleerde applicaties. Het zou verkeerd zijn om het blauwe venster als een andere commando-interpreter te zien. Deze aanpak weerspiegelt niet de essentie van de door Microsoft voorgestelde innovaties. In feite zijn de mogelijkheden van Windows PowerShell veel breder: in een korte reeks artikelen zullen we proberen erachter te komen hoe de Microsoft-oplossing verschilt van de tools waarmee we meer vertrouwd zijn.

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken

Belangrijkste kenmerken 

Natuurlijk is Windows PowerShell in de eerste plaats een scriptshell, oorspronkelijk gebouwd op het .NET Framework en later op .NET Core. In tegenstelling tot shells die tekstgegevens accepteren en retourneren, werkt Windows PowerShell met .NET-klassen die eigenschappen en methoden hebben. Met PowerShell kunt u algemene opdrachten uitvoeren en krijgt u ook toegang tot COM-, WMI- en ADSI-objecten. Het maakt gebruik van verschillende opslagplaatsen, zoals het bestandssysteem of het Windows-register, voor toegang waartoe zogenaamde. aanbieders. Het is de moeite waard om de mogelijkheid te vermelden om uitvoerbare PowerShell-componenten in andere applicaties in te sluiten om verschillende bewerkingen te implementeren, incl. via een grafische interface. Het omgekeerde is ook waar: veel Windows-applicaties bieden via PowerShell toegang tot hun beheerinterfaces. 

Met Windows PowerShell kunt u:

  • Wijzig de instellingen van het besturingssysteem;
  • Beheer diensten en processen;
  • Serverrollen en componenten configureren;
  • Installeer de software;
  • Beheer geïnstalleerde software via speciale interfaces;
  • Uitvoerbare componenten insluiten in programma's van derden;
  • Creëer scripts om beheertaken te automatiseren;
  • Werk met het bestandssysteem, het Windows-register, het certificaatarchief, enz.

Shell en ontwikkelomgeving

Er is Windows PowerShell in twee vormen: naast de console-emulator met een opdrachtshell is er een Integrated Scripting Environment (ISE). Om toegang te krijgen tot de opdrachtregelinterface selecteert u eenvoudigweg de juiste snelkoppeling in het Windows-menu of voert u powershell.exe uit vanuit het menu Uitvoeren. Er verschijnt een blauw venster op het scherm, dat qua mogelijkheden merkbaar verschilt van het antediluviaanse cmd.exe. Er is automatische aanvulling en andere functies die bekend zijn bij gebruikers van opdrachtshells voor Unix-systemen.

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken

Om met de shell te werken, moet u enkele sneltoetsen onthouden:

  • De pijlen omhoog en omlaag scrollen door de geschiedenis om eerder getypte opdrachten te herhalen;
  • De pijl naar rechts aan het einde van een regel typt de vorige opdracht teken voor teken opnieuw;
  • Ctrl+Home verwijdert de getypte tekst vanaf de cursorpositie tot aan het begin van de regel;
  • Ctrl+End verwijdert tekst van de cursor tot het einde van de regel.

F7 toont een venster met getypte opdrachten en stelt u in staat er één te selecteren. De console werkt ook met tekstselectie met de muis, kopiëren en plakken, cursorpositionering, verwijderen, backspace - alles wat we leuk vinden.

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken
Windows PowerShell ISE is een complete ontwikkelomgeving met een code-editor met tabbladen en syntaxis, een opdrachtbouwer, een ingebouwde debugger en andere programmeermogelijkheden. Als u in de ontwikkelomgeving-editor een koppelteken achter de opdrachtnaam schrijft, krijgt u in de vervolgkeuzelijst alle beschikbare opties te zien met een indicatie van het type. U kunt PowerShell ISE starten via een snelkoppeling in het systeemmenu of via het uitvoerbare bestand powershell_ise.exe.

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken

Cmdlets 

In Windows PowerShell wordt het zogenaamde. cmdlets. Dit zijn gespecialiseerde .NET-klassen die een verscheidenheid aan functionaliteit bieden. Ze worden genoemd volgens het ‘Actie-Object’-principe (of ‘Werkwoord-Noun, als je dat liever hebt), en het door koppeltekens gescheiden verbindingswoord lijkt op het predikaat en het onderwerp in zinnen in natuurlijke taal. Get-Help betekent bijvoorbeeld letterlijk “Get-Help” of in een PowerShell-context: “Show-Help”. In feite is dit een analoog van het man-commando in Unix-systemen, en handleidingen in PowerShell moeten op deze manier worden opgevraagd, en niet door cmdlets aan te roepen met de –help of /?-sleutel.. Vergeet de online documentatie voor PowerShell: Microsoft heeft het behoorlijk gedetailleerd.

Naast Get gebruiken cmdlets andere werkwoorden om acties aan te duiden (en strikt genomen niet alleen werkwoorden). In de onderstaande lijst geven we enkele voorbeelden:

Add - toevoegen;
Clear - duidelijk;
Enable - aanzetten;
Disable - Uitzetten;
New - creëren;
Remove - verwijderen;
Set - vragen;
Start - loop;
Stop - stop;
Export - exporteren;
Import - importeren.

Er zijn systeem-, gebruikers- en optionele cmdlets: als resultaat van de uitvoering retourneren ze allemaal een object of een array van objecten. Ze zijn niet hoofdlettergevoelig, d.w.z. vanuit het standpunt van de opdrachtinterpreter is er geen verschil tussen Get-Help en get-help. Het teken ';' wordt gebruikt voor scheiding, maar het is verplicht om dit alleen te plaatsen als er meerdere cmdlets op dezelfde regel worden uitgevoerd. 

Windows PowerShell-cmdlets zijn gegroepeerd in modules (NetTCPIP, Hyper-V, enz.) en er is een Get-Command-cmdlet om te zoeken op object en actie. U kunt de hulp hiervoor als volgt weergeven:

Get-Help Get-Command

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken

Standaard geeft de opdracht korte hulp weer, maar parameters (argumenten) worden indien nodig doorgegeven aan cmdlets. Met hun hulp kunt u bijvoorbeeld gedetailleerde (parameter -Detailed) of volledige (parameter -Full) hulp krijgen, en voorbeelden weergeven (parameter -Examples):

Get-Help Get-Command -Examples

Help in Windows PowerShell wordt bijgewerkt door de Update-Help-cmdlet. Als de opdrachtregel te lang blijkt te zijn, kunnen de cmdlet-argumenten naar de volgende worden verplaatst door het serviceteken '`' te schrijven en op Enter te drukken. Het gewoon voltooien van het schrijven van de opdracht op de ene regel en doorgaan op een andere regel zal niet werken.

Hier volgen enkele voorbeelden van veelvoorkomende cmdlets: 

Get-Process - lopende processen in het systeem tonen;
Get-Service — showdiensten en hun status;
Get-Content - toon de inhoud van het bestand.

Voor veelgebruikte cmdlets en externe hulpprogramma's heeft Windows PowerShell korte synoniemen: aliassen (uit het Engels. Alias). dir is bijvoorbeeld een alias voor Get-ChildItem. De lijst met synoniemen bevat ook analogen van opdrachten van Unix-systemen (ls, ps, enz.), en de Get-Help-cmdlet wordt aangeroepen door de help-opdracht. Een volledige lijst met synoniemen kan worden bekeken met behulp van de Get-Alias-cmdlet:

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken

Scripts, functies, modules en de PowerShell-taal

Windows PowerShell-scripts worden opgeslagen als platte tekstbestanden met de extensie .ps1. U kunt ze niet starten door te dubbelklikken: u moet met de rechtermuisknop klikken om het contextmenu op te roepen en het item "Uitvoeren in PowerShell" te selecteren. Vanaf de console moet u het volledige pad naar het script opgeven, of naar de juiste map gaan en de bestandsnaam schrijven. Het uitvoeren van scripts wordt ook beperkt door het systeembeleid. Om de huidige instellingen te controleren, kunt u de cmdlet Get-ExecutionPolicy gebruiken, die een van de volgende waarden retourneert:

Restricted — het starten van scripts is uitgeschakeld (standaard);
AllSigned — alleen scripts die zijn ondertekend door een vertrouwde ontwikkelaar mogen worden uitgevoerd;
RemoteSigned - toegestaan ​​om ondertekende en eigen scripts uit te voeren;
Unrestricted - toegestaan ​​om scripts uit te voeren.

De beheerder heeft twee opties. De veiligste is het ondertekenen van scripts, maar dit is een behoorlijk serieuze tovenarij - we zullen er in toekomstige artikelen op ingaan. Laten we nu de weg van de minste weerstand kiezen en het beleid veranderen:

Set-ExecutionPolicy RemoteSigned

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken
PowerShell moet hiervoor als beheerder worden uitgevoerd, hoewel u het beleid voor de huidige gebruiker kunt wijzigen met een speciale instelling.

Scripts zijn geschreven in een objectgeoriënteerde programmeertaal, waarvan de commando's worden genoemd volgens hetzelfde principe als de eerder besproken cmdlets: "Action-Object" ("Verb-Noun"). Het belangrijkste doel is het automatiseren van beheertaken, maar het is een volwaardige geïnterpreteerde taal die alle noodzakelijke constructies bevat: voorwaardelijke sprongen, lussen, variabelen, arrays, objecten, foutafhandeling, enz. Elke teksteditor is geschikt voor het schrijven van scripts, maar het handigst is om Windows PowerShell ISE uit te voeren.

U kunt parameters aan het script doorgeven, deze verplicht maken en standaardwaarden instellen. Bovendien kunt u met Windows PowerShell functies maken en aanroepen op dezelfde manier als cmdlets, met behulp van de functieconstructie en accolades. Een script met functies wordt een module genoemd en heeft de extensie .psm1. Modules moeten worden opgeslagen in mappen die zijn gedefinieerd in de PowerShell-omgevingsvariabelen. Je kunt ze bekijken met het volgende commando:

Get-ChildItem Env:PSModulePath | Format-Table -AutoSize

Transportbanden

In het laatste voorbeeld hebben we een constructie gebruikt die bekend is bij Unix-shellgebruikers. In Windows PowerShell kun je met de verticale balk ook de uitvoer van het ene commando doorgeven aan de invoer van een ander, maar er is een aanzienlijk verschil in de implementatie van de pijplijn: we hebben het niet langer over een reeks tekens of een soort tekst. Ingebouwde cmdlets of door de gebruiker gedefinieerde functies retourneren objecten of arrays van objecten en kunnen deze ook als invoer ontvangen. Net als de Bourne-shell en zijn vele opvolgers maakt PowerShell complexe taken eenvoudiger met een pijplijn.

Het eenvoudigste voorbeeld van een pijplijn ziet er als volgt uit:

Get-Service | Sort-Object -property Status

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken
Eerst wordt de cmdlet Get-Service uitgevoerd en vervolgens worden alle services die erdoor worden ontvangen, doorgegeven aan de cmdlet Sort-Object om te sorteren op de eigenschap Status. Aan welk argument het resultaat van de vorige sectie van de pijplijn wordt doorgegeven, hangt af van het type - meestal is dit InputObject. Dit probleem zal in meer detail worden besproken in een artikel gewijd aan de PowerShell-programmeertaal. 

Als u wilt, kunt u de keten voortzetten en het resultaat van de Sort-Object-bewerking doorgeven aan een andere cmdlet (deze worden van links naar rechts uitgevoerd). Trouwens, Windows-gebruikers hebben ook toegang tot de constructie voor paginering die bekend is bij alle Unixoids: 

Get-Service | Sort-Object -property Status | more

Taken uitvoeren op de achtergrond 

Heel vaak is het nodig om een ​​bepaald commando op de achtergrond uit te voeren, om niet te wachten op het resultaat van de uitvoering ervan in de shell-sessie. Windows PowerShell heeft verschillende cmdlets voor dit geval:

Start-Job - het starten van een achtergrondtaak;
Stop-Job — stop de achtergrondtaak;
Get-Job — de lijst met achtergrondtaken bekijken;
Receive-Job — het resultaat van de uitvoering van de achtergrondtaak bekijken;
Remove-Job — een achtergrondtaak verwijderen;
Wait-Job - het terugzetten van de achtergrondtaak naar de console.

Om een ​​achtergrondtaak te starten, gebruiken we de Start-Job cmdlet en specificeren we een opdracht of een reeks opdrachten tussen accolades:

Start-Job {Get-Service}

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken
Achtergrondtaken in Windows PowerShell kunnen worden gemanipuleerd door hun namen te kennen. Laten we eerst leren hoe we ze kunnen weergeven:

Get-Job

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken
Laten we nu het resultaat van de taak Job1 bekijken:

Receive-Job Job1 | more

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken
Alles is vrij eenvoudig.

Uitvoering van opdrachten op afstand

Met Windows PowerShell kunt u opdrachten en scripts niet alleen op de lokale computer uitvoeren, maar ook op een externe computer en zelfs op een hele groep machines. Er zijn verschillende manieren om dit te doen:

  • Veel cmdlets hebben een parameter -ComputerName, maar op deze manier zal het bijvoorbeeld niet werken om een ​​transportband te maken;
  • cmdlet Enter-PSSession stelt u in staat een interactieve sessie op een externe machine te creëren; 
  • De cmdlet gebruiken Invoke-Command u kunt opdrachten of scripts uitvoeren op een of meer externe computers.

Versies van PowerShell

PowerShell is veel veranderd sinds de eerste release in 2006. De tool is beschikbaar voor veel systemen die op verschillende hardwareplatforms draaien (x86, x86-64, Itanium, ARM): Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux en OS X. Nieuwste release 6.2 uitgebracht op 10 januari 2018. Scripts die voor eerdere versies zijn geschreven, werken waarschijnlijk ook in latere versies, maar backporting kan problematisch zijn omdat PowerShell in de loop van de jaren van ontwikkeling een groot aantal nieuwe cmdlets heeft geïntroduceerd. U kunt de versie van de opdrachtshell die op de computer is geïnstalleerd achterhalen met behulp van de eigenschap PSVersion van de ingebouwde variabele $PSVersionTable:

$PSVersionTable.PSVersion

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken
U kunt ook de cmdlet gebruiken:

Get-Variable -Name PSVersionTable –ValueOnly

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken
Hetzelfde kan worden gedaan met behulp van de Get-Host-cmdlet. In feite zijn er veel opties, maar om ze te gebruiken moet je de programmeertaal PowerShell leren, en dat is wat we zullen doen in volgend artikel

Resultaten van 

Microsoft is erin geslaagd een echt krachtige shell te creëren met een handige geïntegreerde omgeving voor het ontwikkelen van scripts. Het verschilt van de tools die ons bekend zijn in de wereld van Unix door diepe integratie met besturingssystemen van de Windows-familie, maar ook met software daarvoor en het .NET Core-platform. PowerShell kan een objectgeoriënteerde shell worden genoemd omdat cmdlets en door de gebruiker gedefinieerde functies objecten of arrays van objecten retourneren en deze als invoer kunnen gebruiken. Wij vinden dat alle serverbeheerders op Windows deze tool zouden moeten bezitten: de tijd is verstreken dat ze zonder de opdrachtregel konden. Er is vooral een geavanceerde consoleshell nodig onze goedkope VPS met Windows Server Core, maar dat is een heel ander verhaal.

Wat is Windows PowerShell en waarmee wordt het gegeten? Deel 1: belangrijkste kenmerken

Alleen geregistreerde gebruikers kunnen deelnemen aan het onderzoek. Inloggen, Alsjeblieft.

Welke onderwerpen moeten als eerste aan bod komen in de volgende artikelen in de serie?

  • 53,2%Programmeren in PowerShell123

  • 42,4%PowerShell98-functies en modules

  • 22,1%Hoe ondertekent u uw eigen scripts? 51

  • 12,1%Werken met repositories via providers (providers)28

  • 57,6%Computerbeheer automatiseren met PowerShell133

  • 30,7%Software beheren en uitvoerbare PowerShell-bestanden insluiten in producten van derden71

231 gebruikers hebben gestemd. 37 gebruikers onthielden zich van stemming.

Bron: www.habr.com

Voeg een reactie