Historisch gezien zijn de commandoregelhulpmiddelen in Unix-systemen beter ontwikkeld dan in Windows, maar met de komst van een nieuwe oplossing is de situatie veranderd.
Windows PowerShell stelt systeembeheerders in staat om de meeste routinetaken te automatiseren. Hiermee kunnen instellingen worden gewijzigd, services worden gestopt en gestart, en het onderhoud van de meeste geïnstalleerde toepassingen worden uitgevoerd. Het is onjuist om het blauwe venster te beschouwen als een andere opdrachtinterpreter. Deze benadering weerspiegelt niet de essentie van de innovaties die door Microsoft zijn aangeboden. In werkelijkheid zijn de mogelijkheden van Windows PowerShell veel uitgebreider: in een kleine reeks artikelen zullen we proberen te begrijpen hoe de oplossing van Microsoft verschilt van de meer vertrouwde middelen.
Belangrijkste mogelijkheden
Natuurlijk is Windows PowerShell in de eerste plaats een commandoregelomgeving met een scriptsysteem, oorspronkelijk gebouwd op de .NET Framework, en later op .NET Core. In tegenstelling tot omgevingen die tekstgegevens accepteren en retourneren, werkt Windows PowerShell met .NET-klassen die eigenschappen en methoden hebben. PowerShell maakt het mogelijk om reguliere opdrachten uit te voeren en biedt ook toegang tot COM-, WMI- en ADSI-objecten. Het maakt gebruik van verschillende opslagplaatsen, zoals het bestandssysteem of het Windows-register, waarvoor zogenaamde providers zijn ontwikkeld. Het is ook mogelijk om uitvoerbare PowerShell-componenten in andere toepassingen in te voegen om verschillende bewerkingen uit te voeren, ook via een grafische interface. Het omgekeerde is ook waar: veel toepassingen voor Windows bieden toegang tot hun beheerg interfaces via PowerShell.
Windows PowerShell maakt het mogelijk om:
- Instellingen van het besturingssysteem te wijzigen;
- Diensten en processen te beheren;
- Rollen en componenten van de server in te stellen;
- Software te installeren;
- Geïnstalleerde software te beheren via speciale interfaces;
- Uitvoerbare componenten in derden programma's in te voegen;
- Scripts te maken voor het automatiseren van administratie taken;
- Te werken met het bestandssysteem, het Windows-register, het certificaatopslag, enz.;
De omgeving en ontwikkelomgeving
Er zijn twee vormen van Windows PowerShell: naast de console-emulator met de commandoregel is er de geïntegreerde scriptingomgeving (Integrated Scripting Environment - ISE). Om toegang te krijgen tot de commandoregelinterface hoeft u alleen de overeenkomstige snelkoppeling in het Windows-menu te kiezen of powershell.exe uit het menu 'Uitvoeren' te starten. Op het scherm verschijnt een blauw venster dat aanzienlijke mogelijkheden biedt in vergelijking met de verouderde cmd.exe. Hier zijn er functies zoals autocompletion en andere snufjes die gebruikelijk zijn voor gebruikers van commandoline-omgevingen in Unix-systemen.

Om met de shell te werken, moet je enkele toetscombinaties onthouden:
- De pijltjestoetsen omhoog en omlaag scrollen door de geschiedenis om eerder ingevoerde opdrachten te herhalen;
- De pijltjestoets naar rechts aan het einde van de regel herschrijft het vorige commando karaktersgewijs;
- Ctrl+Home verwijdert de ingevoerde tekst van de cursorpositie tot het begin van de regel;
- Ctrl+End verwijdert de tekst van de cursor tot het einde van de regel.
F7 toont een venster met ingevoerde commando's en maakt het mogelijk er een te kiezen. In de console is het ook mogelijk tekst met de muis te selecteren, knippen en plakken, de cursor te positioneren, te verwijderen, backspace — alles zoals we het fijn vinden.

Windows PowerShell ISE is een volwaardige ontwikkelomgeving met een code-editor die tabbladen en syntaxiskleuring ondersteunt, een commando-bouwer, een ingebouwde debugger en andere voordelen voor programmeurs. Als je in de editor van de ontwikkelomgeving na de naam van een commando een koppelteken typt, krijg je in de dropdownlijst alle beschikbare parameters met de bijbehorende typen. PowerShell ISE kan worden gestart via een snelkoppeling in het systeemmenu of via het uitvoerbare bestand powershell_ise.exe.

Cmdlets
In Windows PowerShell zijn er zogenaamde cmdlets (commandlets) verschenen. Dit zijn gespecialiseerde .NET-klassen die diverse functionaliteit bevatten. Ze worden genoemd volgens het principe 'Actie-Object' (of 'Werkwoord-Zelfstandig Naamwoord', als je dat prettiger vindt), en de door een koppelteken gescheiden verbinjng doet denken aan een werkwoord en onderwerp in zinnen in natuurlijke talen. Bijvoorbeeld, Get-Help betekent letterlijk 'Krijg-Hulp' of in de context van PowerShell: 'Toon-Hulp'. Dit is in wezen het equivalent van het man-commando in Unix-systemen, en de handleidingen in PowerShell moeten op deze manier worden opgevraagd, niet door cmdlets met de optie --help of \/? aan te roepen. Vergeet ook de online documentatie over PowerShell niet: Microsoft biedt daar voldoende gedetailleerde informatie.
Naast Get worden in cmdlets ook andere werkwoorden (en niet alleen werkwoorden, strikt genomen) gebruikt om acties aan te duiden. Hieronder geven we enkele voorbeelden:
Add — toevoegen;
Wis — opruimen;
Inschakelen — inschakelen;
Deactiveer — uitschakelen;
Nieuw — creëren;
Verwijder — verwijderen;
Stel in — instellen;
Start — starten;
Stop — stoppen;
Exporteer — exporteren;
Importeer — importeren.
Er zijn systeem-, gebruikers- en optionele cmdlets: als resultaat van de uitvoering geven ze allemaal een object of een array van objecten terug. Ze zijn niet hoofdlettergevoelig, d.w.z. vanuit het perspectief van de interpreter maakt het geen verschil tussen Get-Help en get-help. Scheiding gebeurt door het symbool ‘;’, maar het is alleen verplicht als er meerdere cmdlets op één regel worden uitgevoerd.
Cmdlets in Windows PowerShell worden gegroepeerd in modules (NetTCPIP, Hyper-V, enz.), en voor het zoeken op object en actie bestaat er een cmdlet Get-Command. Help hierover kan als volgt worden weergegeven:
Get-Help Get-Command 
Standaard toont de opdracht korte hulp, maar er kunnen parameters (argumenten) aan cmdlets worden doorgegeven indien nodig. Hiermee kun je bijvoorbeeld gedetailleerde hulp (parameter -Detailed) of volledige hulp (parameter -Full) krijgen, evenals voorbeelden op het scherm (parameter -Examples):
Get-Help Get-Command -ExamplesHulp in Windows PowerShell wordt geüpdatet met de cmdlet Update-Help. Als de opdrachtregel te lang wordt, kunnen de argumenten van de cmdlet naar de volgende regel worden overgebracht door het speciale symbool ‘`’ in te voeren en op Enter te drukken — je kunt de opdracht niet gewoon op één regel beëindigen en op een andere voortzetten.
Hieronder volgen enkele voorbeelden van veelgebruikte cmdlets:
Get-Process — geef de actieve processen in het systeem weer;
Get-Service — geef de services en hun status weer;
Get-Content — toon de inhoud van een bestand.
Voor veelgebruikte cmdlets en externe hulpprogramma's zijn er korte synoniemen — aliassen (van het Engelse Alias) in Windows PowerShell. Bijvoorbeeld, dir is een alias voor Get-ChildItem. Er zijn ook analogieën met Unix-systeemcommando's (ls, ps, enz.), en de cmdlet Get-Help wordt aangeroepen met het commando help. De volledige lijst met aliassen kan worden bekeken met de cmdlet Get-Alias:

Scripts, functies, modules en de taal PowerShell
Windows PowerShell-scripts worden opgeslagen als gewone tekstbestanden met de extensie .ps1. Ze kunnen niet worden uitgevoerd door er dubbel op te klikken: je moet met de rechtermuisknop het contextmenu openen en de optie 'Uitvoeren in PowerShell' kiezen. Vanuit de console moet je ofwel het volledige pad naar het script opgeven, of naar de juiste map navigeren en de bestandsnaam invoeren. Het uitvoeren van scripts is ook beperkt door het systeembeleid, en om de huidige instellingen te controleren kun je de cmdlet Get-ExecutionPolicy gebruiken, die een van de volgende waarden zal retourneren:
Restricted — uitvoeren van scripts is verboden (standaard);
AllSigned — alleen het uitvoeren van ondertekende scripts van vertrouwde ontwikkelaars is toegestaan;
RemoteSigned — uitvoeren van ondertekende en eigen scripts is toegestaan;
Unrestricted — uitvoeren van alle scripts is toegestaan.
De administrator heeft twee mogelijke acties. De meest veilige optie is om scripts te ondertekenen, maar dit is behoorlijk ingewikkeld — we zullen dit in latere artikelen behandelen. Laten we nu de gemakkelijkste weg nemen en het beleid wijzigen:
Set-ExecutionPolicy RemoteSigned 
PowerShell moet hiervoor als administrator worden uitgevoerd, hoewel je met een speciale parameter het beleid ook voor de huidige gebruiker kunt wijzigen.
Scripts worden geschreven in een object-georiënteerde programmeertaal, waarvan de commando's worden benoemd volgens hetzelfde principe als de eerder besproken cmdlets: 'Actie-Object' ('Werkwoord-Zelfstandig Naamwoord'). Het belangrijkste doel is automatisering van administratietaken, maar het is een volwaardig geïnterpreteerde taal met alle nodige constructies: voorwaardelijke overgangen, lussen, variabelen, tabellen, objecten, foutafhandeling, enzovoort. Voor het schrijven van scripts kan elke teksteditor worden gebruikt, maar het is het handigst om Windows PowerShell ISE te starten.
Je kunt parameters aan een script doorgeven, ze verplicht maken en standaardwaarden toewijzen. Bovendien stelt Windows PowerShell je in staat om functies te maken en ze op dezelfde manier aan te roepen als cmdlets: hiervoor wordt de constructie Function en accolades gebruikt. 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 de volgende opdracht:
Get-ChildItem Env:PSModulePath | Format-Table -AutoSizeConveyors
In the last example, we applied a familiar structure to Unix shell users. In Windows PowerShell, the vertical bar also allows the output of one command to be passed as input to another, but there is a significant difference in the implementation of the pipeline: it is no longer a set of characters or a particular text. Built-in cmdlets or user-defined functions return objects or arrays of objects, and they can also accept them as input. As in the Bourne shell and its many descendants, PowerShell simplifies the execution of complex tasks using pipelines.
A simple example of a pipeline looks like this:
Get-Service | Sort-Object -property Status 
First, the Get-Service cmdlet is executed, and then all the received services are passed to the Sort-Object cmdlet to be sorted by the Status property. The exact argument that the result of the previous section of the pipeline is passed to depends on its type — usually, it is InputObject. This issue will be discussed in more detail in an article dedicated to the PowerShell programming language.
If desired, the chain can be continued by passing the result of Sort-Object to another cmdlet (they will execute from left to right). By the way, users of Windows also have access to the familiar Unix-like structure for paginated output:
Get-Service | Sort-Object -property Status | moreRunning tasks in the background
It is often necessary to run a command in the background so that you don't have to wait for its execution result in the shell session. In Windows PowerShell, there are several cmdlets for this purpose:
Start-Job — starts a background job;
Stop-Job — stops a background job;
Get-Job — views the list of background jobs;
Receive-Job — views the result of a background job’s execution;
Remove-Job — removes a background job;
Wait-Job — brings a background job back to the console.
To start a background job, we use the Start-Job cmdlet and specify the command or set of commands in curly braces:
Start-Job {Get-Service} 
You can manipulate background jobs in Windows PowerShell using their names. First, let's learn how to display them:
Get-Job 
Now let’s show the result of the Job1 task:
Receive-Job Job1 | more 
Everything is quite simple.
Remote command execution
Windows PowerShell stelt je in staat om opdrachten en scripts uit te voeren, niet alleen op lokale, maar ook op externe computers en zelfs op een hele groep machines. Hiervoor zijn er verschillende methoden beschikbaar:
- Veel cmdlets hebben een parameter
-ComputerName, maar op deze manier is het bijvoorbeeld niet mogelijk om een pijplijn te creëren; - De cmdlet
Enter-PSSessionmaakt een interactieve sessie op de externe machine mogelijk; - Met de cmdlet
Invoke-Commandkun je opdrachten of scripts uitvoeren op één of meerdere externe computers.
Versies van PowerShell
Sinds de eerste release in 2006 is PowerShell aanzienlijk veranderd. De tool is beschikbaar voor verschillende 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. De laatste release, 6.2, werd op 10 januari 2018 uitgebracht. Scripts geschreven voor eerdere versies zullen hoogstwaarschijnlijk werken op latere versies, maar terugwaartse compatibiliteitsproblemen kunnen zich voordoen, aangezien PowerShell in de loop der jaren veel nieuwe cmdlets heeft geïntroduceerd. Je kunt de versie van de geïnstalleerde commandoregelinterface op de computer achterhalen met de PSVersion-eigenschap van de ingebouwde variabele $PSVersionTable:
$PSVersionTable.PSVersion 
Je kunt ook de cmdlet gebruiken:
Get-Variable -Name PSVersionTable –ValueOnly 
Hetzelfde kan ook met de cmdlet Get-Host. Eigenlijk zijn er talloze opties, maar om ze toe te passen moet je de programmeertaal PowerShell bestuderen, wat we zullen doen in .
Conclusies
Microsoft is erin geslaagd om een werkelijk krachtige commandoregelinterface te creëren met een gebruiksvriendelijke geïntegreerde omgeving voor het ontwikkelen van scripts. Het onderscheidt zich van de bekenden tools in de Unix-wereld door de diepe integratie met de Windows-besturingssystemen, evenals de software ervoor en het .NET Core-platform. PowerShell kan worden beschouwd als een objectgeoriënteerde shell, omdat cmdlets en gebruikersfuncties objecten of objectarrays retourneren en deze als invoer kunnen ontvangen. We denken dat elke serverbeheerder op Windows deze tool zou moeten beheersen: de tijd dat ze zonder commandoregel konden is voorbij. Een geavanceerde commandoregelinterface is vooral nodig op , maar dat is een heel ander verhaal.
Alleen geregistreerde gebruikers kunnen deelnemen aan de enquête. , alstublieft.
Welke onderwerpen moeten in de volgende artikelen van de serie als eerste worden behandeld?
53,2%Programmeren in PowerShell123
42,4%Functies en modules van PowerShell98
22,1%Hoe je je eigen scripts kunt ondertekenen?51
12,1%Werken met opslag via providers (providers)28
57,6%Automatisering van computeradministratie met behulp van PowerShell133
30,7%Beheer van software en integratie van uitvoerbare PowerShell-componenten in externe producten71
231 gebruikers hebben gestemd. 37 gebruikers hebben zich onthouden.
Bron: habr.com
