Powershell gebruiken om veelvoorkomende netwerkopdrachten uit te voeren. Tien PowerShell-opdrachten die elke Windows-beheerder zou moeten kennen

In dit artikel zullen we dergelijke technologie van Microsoft bekijken als: Windows PowerShell, zullen we het hebben over wat PowerShell is, wat cmdlets en de pijplijn zijn, hoe u scripts en modules schrijft, en ook andere even belangrijke en nuttige functies van Windows PowerShell.

Wat heeft Windows PowerShell gemaakt?

Voordat PowerShell bestond ( en bestaan) de volgende tools voor het automatiseren en beheren van services: Windows-opdrachtregel en Windows Script Host. Maar deze technologieën hebben nadelen.

De Windows-opdrachtregel heeft ook de mogelijkheid om enkele administratieve taken uit te voeren en de mogelijkheid om een ​​algoritme van acties vast te leggen, dit op te slaan als een script (bat-bestand), terwijl u sommige programmeerelementen kunt gebruiken, bijvoorbeeld variabelen, voorwaarden en zelfs zoiets als lussen.

De meeste softwareproducten hebben een console-interface, d.w.z. we kunnen het programma beheren met behulp van de opdrachtregel, terwijl we middelen besparen vanwege de afwezigheid van de kosten voor het bedienen van de grafische interface. Microsoft brengt zelfs niet-grafische edities uit voor het Windows Server-besturingssysteem ( Server Core, Windows Server 2016 heeft zelfs Nano Server), maar dit alles is niet genoeg, omdat de mogelijkheden van de opdrachtregel beperkt zijn, d.w.z. we kunnen geen complexe logica schrijven om iets te automatiseren, en als we dat kunnen, dan kost het ons tijd en kennis.

Het nadeel van de opdrachtregel is ook dat we voor volledig serverbeheer verschillende consolehulpprogramma's van softwareproducten gebruiken, en daarom is het echt moeilijk om de opdrachtregel voor beheer te gebruiken, gezien het feit dat al deze hulpprogramma's verschillende syntaxis, parameters, gebruiksmethoden, enz. om typische taken uit te voeren, d.w.z. elke dag moet u dit alles in het geheugen bewaren en om atypische taken uit te voeren moet u eerst de help of documentatie lezen.

Met Windows Script Host-technologie kunt u alle administratieve taken uitvoeren als de opdrachtregel, inclusief hun automatisering door WSH-scripts te schrijven, maar hier kunnen we al volwaardige programmeertalen gebruiken ( VBScript en JScript), d.w.z. je kunt complexe logica en algoritmen implementeren. Daarnaast beheren we met behulp van WSH softwareproducten via een objectinterface, oftewel Windows Script Host is veel " koeler»Dan de opdrachtregel. Maar deze technologie werd ook niet die ideale beheertool en automatisering van dit beheer voor systeembeheerders, aangezien Windows Script Host kennis van bovenstaande programmeertalen vereiste, wat eigenlijk overbodig is voor systeembeheerders. Beheerders hebben alleen een eenvoudige beheertool nodig met de mogelijkheid om sommige acties te programmeren, en ze willen niet ingaan op de objectmodellen van softwareproducten in de programmeertalen VBScript en JScript.

Als gevolg hiervan moest Microsoft een beheertool voor sysadmins ontwikkelen die 100 procent zou voldoen aan alle behoeften van sysadmins op het gebied van zowel beheer- als automatiseringsmogelijkheden en bruikbaarheid, en zo werd Windows PowerShell geboren.

Wat is Windows PowerShell?

Windows PowerShell Is een scripttaal en Windows-opdrachtshell die is ontworpen voor het beheer en de configuratie van Windows-besturingssystemen. PowerShell is gebouwd bovenop de CRL en het .NET Framework, en in tegenstelling tot de opdrachtregel, die tekst accepteert en retourneert, werkt Windows PowerShell met objecten. Elk object in PowerShell heeft eigenschappen en methoden die u kunt gebruiken om die objecten te manipuleren.

In Windows PowerShell heeft Microsoft het concept van cmdlets ( cmdlets), wat het naamgevingssysteem voor commando's is " Werkwoord zelfstandig naamwoord". Met dit systeem kunnen systeembeheerders het werk met PowerShell snel leren en vereenvoudigen.

Met Windows PowerShell kunt u:

  • Toegang tot het bestandssysteem;
  • Beheer het register;
  • Diensten beheren;
  • Beheer processen;
  • Configureer het besturingssysteem;
  • Installeer de software;
  • Serverrollen en componenten installeren;
  • Serverrollen en componenten beheren en configureren;
  • Schrijven en gebruiken van scripts om beheer en administratie te automatiseren;
  • Andere taken van systeembeheerders uitvoeren.

Windows PowerShell bevat veel veelgebruikte opdrachtregelhulpprogramma's en -opdrachten, zoals ipconfig, ping en andere. Dit wordt gedaan om de overgang van systeembeheerders van de opdrachtregel naar PowerShell te vergemakkelijken.

Voor het gemak hebben veel veelgebruikte opdrachten en hulpprogramma's in PowerShell ook synoniemen ( Alias), bijvoorbeeld cls is een synoniem voor de Clear-Host cmdlet, dir is een synoniem voor Get-ChildItem ( de volledige lijst met synoniemen kan worden bekeken door de Get-Alias-cmdlet uit te voeren).

Om het makkelijker te maken om de opdracht te vinden die je nodig hebt, heeft PowerShell een speciale Get-Command cmdlet waarmee je zowel naar een werkwoord als naar een zelfstandig naamwoord kunt zoeken. Alle opdrachten in Windows PowerShell zijn gegroepeerd in modules ( bijv. Hyper-V, NetTCPIP), wat het ook gemakkelijker maakt om de gewenste opdracht te vinden.

Nadat de vereiste opdracht is gevonden, kunt u de instructies bekijken om met deze opdracht te werken, d.w.z. Help, er is een speciale Get-Help-cmdlet voor dit doel, de volgende opdracht geeft bijvoorbeeld help weer voor de Get-Command-cmdlet:

Get-Help Get-Command

Help in Windows PowerShell kan kort, gedetailleerd zijn ( parameter -Gedetailleerd) compleet ( de -Volledige parameter), en alleen voorbeelden ( parameter - Voorbeelden). De volgende opdracht toont alleen voorbeelden van het gebruik van de Get-Command-cmdlet:

Get-Help Get-Command -Voorbeelden

PowerShell Help kan worden bijgewerkt, d.w.z. het kan worden bijgewerkt met de opdracht Update-Help.

Windows PowerShell-versies

De eerste versie van PowerShell 1.0 verscheen op 14 november 2006 en werd uitgebracht als een aparte distributie die kon worden geïnstalleerd op de volgende versies van Windows-besturingssystemen: Windows XP Service Pack 2, Windows Server 2003 Service Pack 1 en Windows Vista.

In Windows Server 2008 werd PowerShell 1.0 geleverd als een onderdeel dat ook moest worden geïnstalleerd.

Vanaf Windows 7 en Windows Server 2008 R2 wordt PowerShell geleverd als een integraal onderdeel van het systeem ( die. voorgeïnstalleerd, niet nodig om het te installeren). Hieronder vindt u een correspondentietabel tussen de PowerShell-versie en de versie van het Windows-besturingssysteem ( die. welke versie van PowerShell standaard is geïnstalleerd op welke versie van Windows):

PowerShell-versie Windows-versies
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

Met elke nieuwe versie wordt PowerShell een steeds krachtiger beheertool, in vergelijking had de eerste PowerShell ongeveer 130 cmdlets en in PowerShell 5.0 zijn dat er al meer dan 600!

U kunt de huidige versie van PowerShell achterhalen door de eigenschap PSVersion van de ingebouwde variabele $ PSVersionTable te gebruiken, voer bijvoorbeeld de volgende opdracht uit:

$ PSVersionTable.PSVersion

Of voer de cmdlet uit

Get-Variable -Name PSVersionTable –ValueOnly

waarbij de PSVersion-waarde de PowerShell-versie is.

PowerShell-taal

PowerShell Is een objectgeoriënteerde programmeertaal voor scripts. Het wordt gebruikt om opdrachten te schrijven om alle componenten van het Windows-besturingssysteem in Windows PowerShell te beheren en om scripts te schrijven om administratieve taken in de Windows PowerShell Integrated Scripting Environment (ISE) te automatiseren. Hoewel PowerShell is gemaakt voor beheertaken, is het een volwaardige programmeertaal voor scripts, omdat het programmastructuren heeft die in elke programmeertaal aanwezig zijn, zoals: voorwaarden, lussen, foutafhandeling, werken met variabelen, objecten, arrays.

PowerShell heeft een uniforme syntax voor het schrijven van commando's en een structuur voor het benoemen van deze commando's volgens het principe " Werkwoord zelfstandig naamwoord", wat deze taal intuïtief maakt voor zowel programmeurs als systeembeheerders.

Windows PowerShell

Windows PowerShell Is een PowerShell-opdracht en een scriptuitvoeringsomgeving. Deze shell heeft dezelfde mogelijkheden als de opdrachtregel, zoals: het opslaan van de geschiedenis van het uitvoeren van opdrachten, het aanpassen van het uiterlijk van de shell, het voltooien van de uitvoering van opdrachten met de sneltoets Ctrl + C, evenals vele andere functies die niet beschikbaar in de shell van de opdrachtregel, bijvoorbeeld zo'n geweldige functie als " syntaxis accentueren» ( verscheen in PowerShell 5.0).

Er zijn verschillende manieren om PowerShell te starten, bijvoorbeeld:

  • Vanaf de opdrachtregel door PowerShell te typen;
  • Via het dialoogvenster " uitvoeren» ( sneltoets Win + R), ook PowerShell typend;
  • In Windows 7 - Start -> Alle programma's -> Accessoires -> Windows PowerShell -> Windows PowerShell;
  • In Windows 8.1 of Windows Server 2012 R2 - Start -> Alle programma's -> Systeemwerkset -> Windows PowerShell;
  • In Windows 10 of Windows Server 2016 - Start -> Alle programma's -> Windows PowerShell Directory ( in groep W) -> Windows PowerShell.

Voorbeeld van het starten van PowerShell op Windows Server 2016

Screenshot van PowerShell in Windows Server 2016

PowerShell-cmdlets

cmdlet (cmdlet) Is een Windows PowerShell-opdracht die u kunt gebruiken voor interactie met besturingssysteemobjecten om ze te beheren. Deze opdrachten maken deel uit van de PowerShell-taal. De cmdlets zijn gebouwd volgens het principe “ Werkwoord zelfstandig naamwoord", Gescheiden door een koppelteken (-); met andere woorden, we geven eerst aan wat we moeten doen, en met een koppelteken - waarover. Bijvoorbeeld de Get-Help cmdlet, waarbij Get een werkwoord is dat ' Ontvangen", En Help is het zelfstandig naamwoord" Helpen"In het kader van PowerShell" Hulp laten zien". PowerShell-cmdlets retourneren resultaten als objecten, wat een van de belangrijkste verschillen is met de Windows-opdrachtregel, waarin opdrachten alleen tekst naar het scherm retourneren.

Naast cmdlets voor het ontvangen van gegevens (Get), zijn er ook typen cmdlets als:

  • Toevoegen - gegevens toevoegen;
  • Wissen - om te wissen;
  • Inschakelen - inschakelen;
  • Uitschakelen - uitschakelen;
  • Nieuw - maak;
  • Verwijderen - verwijderen;
  • Stel - stel;
  • Begin - begin;
  • Stop Stop;
  • Exporteren - exporteren;
  • Importeren - importeren;
  • En nog veel meer.

Gebruik de speciale Get-Command-cmdlet voor een volledige lijst met cmdlets in Windows PowerShell. Voer het bijvoorbeeld uit met de -CommandType cmdlet-parameter, als resultaat ziet u een lijst met cmdlets op het scherm.

Get-Command -CommandType cmdlet

Zoals je al begreep, hebben cmdlets parameters waarmee we de acties van de cmdlet kunnen concretiseren. Para meters kunnen verplicht en optioneel zijn, de Get-Command cmdlet heeft bijvoorbeeld geen vereiste para meters.

De onderstaande afbeelding toont een manier om naar een cmdlet te zoeken op een werkwoord ( parameter werkwoord). In dit geval hebben we een lijst met cmdlets die iets opnieuw kunnen starten.

Opdracht

Get-Command -Werkwoord Opnieuw starten

Als u naar een cmdlet op zelfstandig naamwoord wilt zoeken, moet u de parameter Noun gebruiken. Hieronder hebben we bijvoorbeeld een lijst met cmdlets die met services werken.

Opdracht

Get-Command -Noun Service

Als u de vereiste cmdlet niet met zijn volledige naam hebt gevonden, kunt u het masker in de * Tekst * -indeling gebruiken.

PowerShell-pijplijn

Een van de belangrijkste kenmerken van Windows PowerShell is de mogelijkheid om een ​​pijplijn te gebruiken bij het uitvoeren van opdrachten.

transportband Is om de uitvoer van een cmdlet door de pijp (|) naar een andere cmdlet te pipen. Tegelijkertijd worden, zoals u zich herinnert, in PowerShell-cmdlets die respectievelijk met objecten en retourobjecten werken, objecten ook langs de pijplijn doorgegeven.

Met behulp van een pijplijn kunt u complexe taken op een gemakkelijke en handige manier uitvoeren zonder dat u complexe algoritmen en scripts hoeft te schrijven.

Laten we bijvoorbeeld de naam van het grootste bestand in de map C: \ Windows \ System32 ( eenvoudig voorbeeld van een pijpleiding).

Opdracht

Get-ChildItem -Pad "C: \ Windows \ System32" -Bestand | Sorteren-Object lengte -Aflopend | Selecteer-Object -Eerste 1

  • Get-ChildItem - cmdlet om objecten in de opgegeven map op te halen;
  • Sort-Object - een cmdlet voor het sorteren van objecten, in ons geval sorteren we op bestandsgrootte ( lengte -Aflopend);
  • Select-Object is een cmdlet voor het selecteren van de gewenste eigenschappen van een object, in ons geval tonen we standaardvelden en alleen het allereerste object, d.w.z. groot bestand ( parameter -Eerste 1).

Alle cmdlets zijn van elkaar gescheiden door een pijp. De uitvoer van elke cmdlet wordt doorgegeven aan de invoer van een andere cmdlet, d.w.z. eerst krijgen we alle objecten in de opgegeven map, dan sorteren we het resultaat en selecteren we tenslotte het allereerste object.

Achtergronduitvoering van taken

Windows PowerShell heeft de mogelijkheid om taken op de achtergrond uit te voeren, het is een mechanisme waarmee u een opdracht kunt uitvoeren ( bijvoorbeeld, wat lang duurt om uit te voeren) op de achtergrond, d.w.z. na het starten keert u terug naar de huidige sessie en kunt u verder werken zonder te wachten tot de opdracht is afgelopen. U hebt deze functie nodig wanneer u een opdracht moet uitvoeren die lang duurt, en zoals u weet, wordt gedurende deze tijd de PowerShell-sessie geblokkeerd totdat de opdracht is voltooid en u moet blijven werken.

U kunt alle taken beheren die op de achtergrond worden uitgevoerd, bijvoorbeeld de lijst met taken bekijken, een taak stoppen, een taak verwijderen en natuurlijk het resultaat van een taak bekijken.

Windows PowerShell biedt de volgende cmdlets voor het werken met achtergrondtaken:

  • Start-Job - start een achtergrondtaak;
  • Stop-Job - stop een achtergrondtaak
  • Get-Job - bekijk een lijst met achtergrondtaken;
  • Receive-Job - bekijk het resultaat van de uitvoering van de achtergrondtaak;
  • Remove-Job - verwijder een achtergrondtaak;
  • Wait-Job - breng een achtergrondtaak naar voren om te wachten op de voltooiing ervan.

Om op de achtergrond te werken, moet u een Start-Job-opdracht schrijven en tussen accolades () een opdracht of een reeks opdrachten die op de achtergrond moeten worden uitgevoerd.

Laten we bijvoorbeeld een taak uitvoeren ( toon lijst met diensten) op de achtergrond, kijk dan naar de lijst met achtergrondtaken en toon het resultaat van onze taak ( die. lijst met diensten).

Een taak op de achtergrond uitvoeren

Start-Job (Get-Service)

We kijken naar de lijst met taken die op de achtergrond worden uitgevoerd

Het resultaat van de taak weergeven Job1

Ontvangen Job Job1

Zoals je kunt zien, hebben we een taak met de status " Voltooid", d.w.z. het is al uitgevoerd ( gewoon Get-Service werkt snel).

Om het resultaat van de achtergrondtaak te zien, d.w.z. de Get-Service cmdlet, hebben we de opdracht Receive-Job uitgevoerd en de taaknaam eraan doorgegeven ( de waarde van de identifier is ook mogelijk). Als gevolg hiervan hebben we een lijst met services weergegeven.

PowerShell Extern Beheer

Windows PowerShell is niet alleen ontworpen voor lokaal gebruik, maar ook voor het uitvoeren van opdrachten op afstand. Deze functie is nodig om computers op afstand te kunnen bedienen vanaf uw werkplek, d.w.z. voer PowerShell-opdrachten uit.

Er zijn verschillende manieren om op afstand te beheren:

  • De parameter gebruiken: -Computer naam (veel teams hebben). Met andere woorden, u geeft als parameter de naam door van de computer waarop u de opdracht wilt uitvoeren. De methode heeft een nadeel, aangezien deze beperkt is tot het uitvoeren van één commando;
  • Door sessies. cmdlet Enter-PSSession (interactieve sessie). Op deze manier maakt u verbinding met een externe computer en alle opdrachten die u in PowerShell typt, worden op dezelfde manier op de externe computer uitgevoerd alsof u opdrachten rechtstreeks op de externe computer typt. De methode heeft ook het nadeel dat de sessie beperkt is tot één computer;
  • De cmdlet gebruiken Invoke-opdracht... Met deze methode kunt u opdrachten of scripts op één of meerdere computers uitvoeren.

Om bijvoorbeeld verbinding te maken met een externe computer ( in het onderstaande voorbeeld Servernaam) voer in een interactieve sessie de volgende opdracht uit:

Enter-PSSession ServerName

Scripts, functies en modules in Windows PowerShell

Als je een bepaald algoritme hebt geschreven, wil je het hoogstwaarschijnlijk opslaan om het in de toekomst te gebruiken. Windows PowerShell heeft hiervoor een scriptmechanisme.

De essentie van dit mechanisme is als volgt: je schrijft de set commando's die je nodig hebt en slaat het op als een script - dit is een eenvoudig tekstbestand met de extensie .PS1.

Om dit script vervolgens uit te voeren, voert u het eenvoudig uit in PowerShell. In dit geval moet u ofwel het volledige pad naar het scriptbestand specificeren, of naar de map met het script gaan en het bij naam noemen.

Belangrijk!

Scripting is standaard verboden op Windows! Voer de cmdlet . uit om het scriptuitvoeringsbeleid te bekijken Get-ExecutionPolicy... Als gevolg hiervan wordt het geldige beleid geretourneerd, bijvoorbeeld:

  • Beperkt - de uitvoering van scripts is geblokkeerd ( standaard);
  • AllSigned - de uitvoering van digitaal ondertekende scripts is toegestaan;
  • RemoteSigned - uitvoering van lokale scripts is toegestaan, alle gedownloade scripts moeten digitaal ondertekend zijn;
  • Onbeperkt - alle scripts zijn toegestaan ​​( niet aanbevolen omdat het onveilig is!).

Om scripting in te schakelen, moet u de cmdlet . gebruiken Set-uitvoeringsbeleid met een van de bovenstaande parameters.

Als u bijvoorbeeld lokale scripts wilt laten uitvoeren, voert u de volgende opdracht uit en accepteert u de wijzigingen door op Y te drukken.

Set-ExecutionPolicy RemoteSigned

U kunt parameters in een script doorgeven, ze verplicht stellen of een standaardwaarde instellen.

Windows Power shell biedt een mechanisme voor het maken van uw eigen functies, die net als ingebouwde cmdlets in Power shell kunnen worden gebruikt.

Om dit te doen, moet u het sleutelwoord Function specificeren en vervolgens tussen accolades () het algoritme schrijven voor de werking van deze functie, d.w.z. commandoset ( bijvoorbeeld een veelgebruikte procedure: maak een gebruiker met bepaalde rechten, wis bepaalde mappen, enzovoort). Dan moet je dit allemaal in een script opslaan, maar alleen met de .psm1-extensie, aangezien dit bestand al een module is.

Dat is niet alles, dit bestand moet in de map worden geplaatst waar PowerShell naar modules zoekt. Er zijn verschillende van dergelijke mappen ( speciale map in gebruikersprofiel, map waarin PowerShell is geïnstalleerd), kunnen ze worden bekeken in de PowerShell-omgevingsvariabelen. Voer hiervoor de volgende opdracht uit:

Get-ChildItem Env: \ PSModulePath | Opmaak-Tabel -AutoSize

Nadat je de module die je hebt geschreven in een speciale map hebt geplaatst, heb je toegang tot je functies zoals gewone PowerShell-opdrachten.

Windows PowerShell Integrated Scripting Environment (ISE)

Om het schrijven van scripts, functies en dienovereenkomstig modules te vergemakkelijken, heeft Microsoft een speciaal grafisch programma ontwikkeld Geïntegreerde scriptomgeving(ISE) is een geïntegreerde scriptomgeving. Het is erg handig om in dit programma te werken, bovendien heeft het krachtige functionaliteit ( creatie van veel tabbladen met scripts, uitvoergebied, ingebouwde debugger en meer).

Je kunt het als volgt starten:

  • In Windows 7 - Start -> Alle programma's -> Accessoires -> Windows PowerShell -> Windows PowerShell ISE;
  • In Windows 10 of Windows Server 2016 - Start -> Alle programma's -> Windows PowerShell Directory ( in groep W) -> Windows PowerShell ISE.

Opmerking! ISE werkt niet op Windows Server met Server Core.

Screenshot van de Integrated Scripting Environment (ISE) in Windows Server 2016

Dat was alles voor mij, ik hoop dat het materiaal nuttig voor je was! Veel geluk!

We hebben al gezien dat dit een vrij eenvoudig en effectief hulpmiddel is voor het uitvoeren van alledaagse taken. Het is echter absoluut onmogelijk om de ware mogelijkheden van PowerShell te begrijpen aan de hand van een paar voorbeelden en een vluchtige studie, omdat je tot op een bepaald moment het gevoel van gekunstelde lichtheid niet zult verlaten. Dus is PowerShell een essentiële Windows-tool, of is het een geek's toy? Laten we het uitzoeken.

Snelle referentie

PowerShell werd officieel gelanceerd in 2006 en was bedoeld om de zeer beperkte cmd-opdrachtregelinterpreter te vervangen. Dit was al de tweede vervangingspoging, de 8 jaar eerder uitgebrachte Windows Script Host mislukte door gebrek aan ingebouwde documentatie en gebrek aan shell-integratie.

Welnu, PowerShell hield rekening met de meeste fouten van zijn voorgangers, 3 jaar vanaf het moment van de presentatie was het afgewerkt tot een fatsoenlijke look en als resultaat verscheen het op een zeer aangename manier voor het leger van systeembeheerders.

Pijplijn-cmdlets

Power shell is gebaseerd op cmdlets. Als je zelfs maar een beetje Engels kent, dan begrijp je al dat de naam "cmdlets" komt van het welsprekende "cmdlet". Hun structuur omvat het commando zelf (werkwoord) en het object (zelfstandig naamwoord). Bijvoorbeeld: Get-Process, Sort-Object, Rename-Item, enzovoort. De scheiding wordt, zoals u kunt zien, uitgevoerd door het "-" teken. Er is een beperkte lijst met standaard-cmdlets die door het systeem worden gebruikt, maar vanaf PowerShell 2.0 kunt u uw eigen cmdlets maken. U kunt meer lezen over deze procedure op de officiële Microsoft-pagina. Overigens is de huidige versie 5.1 vorig jaar augustus uitgebracht.

Een ander basisconcept in PowerShell is de Pipeline. Een pijp lijn is de procedure voor het doorgeven van de uitvoer van de ene cmdlet als invoer voor de volgende. De transportband wordt aangeduid met "|" , maar in de praktijk ziet zo'n record er uiterst eenvoudig uit:

Get-proces | Sorteer CM

Zoals je kunt zien aan het item, zet je in de code aan het einde van elke regel ";" niet nodig, maar dit teken kan worden gebruikt om cmdlets te scheiden:

Get-proces; Hulp krijgen

Alles is comfortabel en mooi.

Welnu, het belangrijkste in PowerShell zijn natuurlijk scripts. Hier, zoals in elke zichzelf respecterende taal op hoog niveau, is het mogelijk om te werken met variabelen, functies, voorwaardelijke operators, lussen, uitzonderingen, enz. Over het algemeen zult u geen significante beperkingen in functionaliteit voelen.

Gemak en snelheid

Natuurlijk, om hun klanten halverwege te ontmoeten en hun leven zo gemakkelijk mogelijk te maken, heeft het enorme Microsoft-team een ​​product gecreëerd dat handig en begrijpelijk is, zelfs voor iemand die verre van programmeren is. Stelt u zich even voor dat u systeembeheerder op kantoor bent. U moet controleren of werknemers geen onzin op de werkvloer doen. De eenvoudigste manier om dit te doen, is door het "ongeldige" proces op de computer in de actieve map te zoeken en te beëindigen:

$ proc = "Wrong_Proc"
$ strCategory = "computer"
$ objDomain = New-Object System.DirectoryServices.DirectoryEntry
$ objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$ objSearcher.SearchRoot = $ objDomain
$ objSearcher.Filter = ("(objectCategory = $ strCategory)")
$ colProplist = "naam"
foreach ($ i in $ colPropList) ($ objSearcher.PropertiesToLoad.Add ($ i))
$ colResults = $ objSearcher.FindAll ()

Foreach ($ objResultaat in $ colResultaten)
{
$ objComputer = $ objResult.Eigenschappen
$ objComputer.naam
if (Test-verbinding -Tel 2 -Computernaam $ objComputer.naam -Stil)
{
$ ps = Get-WmiObject Win32_Process -Filter "Name =" $ proc "" -ComputerName $ objComputer.name

Foreach ($ i in $ ps)
{
$ resultaat = $ i.Beëindigen ()
if ($ resultaat.ReturnValue -eq 0) ("Succes $ comp")
anders ("Fout $ comp")
}
}
}

Wromg_Proc is de naam van het vereiste proces, bijvoorbeeld wmplayer.exe. Het eerste deel van het script is gewijd aan het vinden van onze computer, het tweede in AD, het tweede - aan het daadwerkelijk werken met het proces. Ondanks het feit dat een dergelijke opname visueel een beginner kan vervreemden, in feite, met kennis van het Engels, kun je de code gemakkelijk ontcijferen.

Maar voor het gemak, zoals het al lang gebruikelijk is, moest Microsoft een behoorlijke prijs betalen. Een van de noodzakelijke opofferingen zijn de "wandelende" syntaxis met vereenvoudigingen, waardoor beginners de code van hun meer ervaren collega's niet vrij kunnen lezen, en ongerechtvaardigde vrijheden in het ontwerp, inclusief de broncode. Maar het belangrijkste dat je moet opofferen, zijn prestaties. PowerShell-code kan meerdere keren langzamer zijn dan zijn Linux-tegenhanger bash. En als dat niet zo opvalt als je alleen met je eigen machine werkt, dan verlies je bij het onderhouden van tientallen en honderden computers op afstand uren tijd in plaats van tientallen minuten.

Sluit af met een bibliografie

Ik weet niet of u geïnteresseerd bent in PowerShell na de resultaten van dit opus, maar als dat zo is, dan zal het niet moeilijk voor u zijn om de rest van de informatie te vinden. In tegenstelling tot veel andere talen is er in het Russische segment van internet veel hoogwaardige PowerShell-informatie voor mensen van alle vaardigheidsniveaus.

Windows PowerShell 2.0 werd uitgebracht met Windows 7 en Windows Server 2008 R2 als een integraal onderdeel van het systeem. Daarnaast is de tweede versie beschikbaar voor andere systemen zoals Windows XP SP3, Windows Server 2003 SP2, Windows Vista SP1 en Windows Server 2008.

Als u om de een of andere reden PowerShell niet hebt geïnstalleerd, dan is hier de link waar u PowerShell kunt downloaden en gedetailleerde informatie over deze shell kunt vinden.

Windows PowerShell is gebouwd op en geïntegreerd met Microsoft NET Framework. Bovendien biedt PowerShell gemakkelijke toegang tot COM en ADSI, en kunt u reguliere opdrachtregelopdrachten uitvoeren om een ​​uniforme omgeving te creëren waarin beheerders verschillende taken op lokale en externe systemen kunnen uitvoeren.

Werken met teams

De PowerShell-ontwikkelaars hebben deze wrapper uitgerust met een aangepaste scripttaal die is gebouwd volgens de .NET Framework-standaard. De opdracht in Power shell wordt in het origineel een cmdlet of cmdlet genoemd. Een cmdlet is als een functie in die zin dat het een specifieke taak uitvoert, zoals het ophalen van de inhoud van een map of het bijwerken van een registervermelding, en parameters heeft die de uitvoer van de opdracht kunnen wijzigen.

Er zijn meer dan 100 opdrachten ingebouwd in PowerShell. U kunt ook extra opdrachten maken, maar u moet een .NET-taal gebruiken, zoals Visual Basic .NET of C #.

Elke variatie van het commando is een combinatie van werkwoord en zelfstandig naamwoord. Dit komt omdat Microsoft een consistent naamgevingsschema wilde gebruiken om het leren en uitbreiden van PowerShell gemakkelijker te maken. Het werkwoord geeft de actie aan die moet worden uitgevoerd en het zelfstandig naamwoord geeft het type object aan waarop deze actie zal worden uitgevoerd. De opdracht Get-ChildItem leest bijvoorbeeld een lijst met items in de huidige werkmap of container, zoals een register. Om een ​​opdracht uit te voeren, voert u deze in bij de PowerShell-opdrachtprompt en drukt u op Enter. Het resultaat van de opdracht wordt direct onder de ingevoerde opdracht weergegeven.

Rijst. 1. Get-ChildItem-opdracht

Opdrachten om hulp te krijgen

PowerShell wordt geleverd met een set helpbestanden en eerst moet u leren werken met deze helpmaterialen. Gebruik de opdracht Get-Command om erachter te komen welke opdrachten beschikbaar zijn in PowerShell. Figuur 2 toont de uitvoer van dit commando, dit is een lijst met commando's. In deze lijst ziet u de namen van de opdrachten en hun syntaxis, maar er is geen beschrijving van wat elke opdracht doet.

Afbeelding 2. Get-Command

U kunt de opdracht Get-Help gebruiken om deze informatie te verkrijgen. Als we alleen Get-Help invoeren, dan krijgen we er zelf hulp voor.

Rijst. 3. Get-Help-commando

Zoals je kunt zien aan de opdracht Get-Help, moet je om hulp voor een specifieke opdracht te krijgen de naam van de opdracht direct na Get-Help invoeren. Laten we eens kijken naar de hulp voor het Get-Command-commando dat we al kennen. Om dit te doen, introduceren we:

Rijst. 4. Hulp in het team. Get-Help Get-Command

Get-Command is in dit geval een parameter voor de opdracht Get-Help, en net als de opdrachtparameters op de opdrachtregel cmd.exe bieden PowerShell-opdrachtparameters de informatie die de opdrachten nodig hebben om hun werk te doen.

Laten we nu eens kijken hoe het allemaal werkt. Laten we een voorbeeld nemen. Een van de typische taken van een systeembeheerder is het lezen van tekstbestanden. Laten we een lijst bekijken met cmdlets die beginnen met Get (Get-Help, Get-Command, enz.). Om dit te doen, gebruiken we Get-Help en specificeren we Get als parameter:

Rijst. 5. Get-Help Commando krijgen

We hebben een lijst met opdrachten die beginnen met Get. Laten we de opdracht Get-Content gebruiken om met bestanden te werken. Laten we de help-informatie over de opdracht Get-Content bekijken. Om dit te doen, introduceren we:

Rijst. 6. Get-Help Commando Get-Content

Zoals weergegeven in Afbeelding 6, retourneert de opdracht Get-Help Get-Content een beschrijving van de opdracht Get-Content en informatie over de syntaxis. We hebben uit deze hulp geleerd dat het Get-Content-commando de inhoud van een element retourneert, wat in dit geval verwijst naar elk type bestand op het systeem. In het verleden moest een beheerder mogelijk de opdracht For gebruiken om met batchbestanden of het File-SystemObject in een Windows Script Host (WSH) -script te werken, maar in PowerShell hoeft u alleen de opdracht Get-Content uit te voeren. Voeg voor meer gedetailleerde syntaxisinformatie de parameter -full toe aan de opdracht:

Rijst. 7. Get-Help Commando Get-Content -full

Merk op dat de parameter -full niet standaard is. Parameters van dit type worden toggle-parameters genoemd omdat ze het gedrag van opdrachten omschakelen.

Afbeelding 7 toont een deel van de informatie die door deze opdracht wordt geretourneerd. De beheerder moet scrollen of het formaat van het venster op zijn computer wijzigen, zodat alle inhoud kan worden bekeken. De sectie PARAMETERS van de help bevat een beschrijving van de parameters die aan een opdracht kunnen worden toegevoegd om het resultaat dat wordt geretourneerd te wijzigen. Besteed aandacht aan twee belangrijke punten over de parameters: Verplicht?(Vereist Engels) en Positie?(Positie nl.).

Paragraaf Verplicht?(Vereist) geef aan of een bepaalde parameter al dan niet vereist is. Wanneer is een variabele nodig? (Vereist Engels) is ingesteld op waar, moet de parameter in de opdracht worden opgenomen. Als dezelfde variabele nodig is? (Vereist) is ingesteld op false, dan is deze parameter optioneel en kan deze worden weggelaten bij gebruik van de opdracht.

Betekenis Positie?(Position English) stelt u in staat te beoordelen of een parameter een naam moet krijgen of waarnaar kan worden verwezen door zijn positie. Wanneer is positievariabel? (Positie Engels) de genoemde waarde wordt toegekend, hieruit volgt dat bij verwijzing naar deze parameter de naam ervan moet worden aangegeven. Wanneer is de waarde van de variabele Positie? (Positie in het Engels) wordt uitgedrukt als een getal, naar een parameter kan worden verwezen met zijn naam of geef eenvoudig de waarde van de parameter op de juiste positie aan.

Bijvoorbeeld, zoals weergegeven in figuur 8, moet u bij het uitvoeren van de opdracht Get-Content de parameter -Path specificeren. Laten we deze parameter in meer detail bekijken.

Rijst. 8. Parameter -Pad

in een variabele Verplicht? de waarde waard waar, wat betekent dat deze parameter vereist is voor de opdracht Get-Content. in een variabele Positie? er is een waarde van 1, dit betekent dat u de naam van de parameter kunt weglaten wanneer u deze invoert, u hoeft deze alleen maar direct achter de opdrachtnaam in te voeren (1e positie).

Rijst. 9. Get-Content Commando E: 01.txt

Waar E: 01.txt de parameter -Path is

Rijst. 10. Bestand E: 01.txt.

Als de parameterwaarde spaties bevat, moet de waarde tussen aanhalingstekens staan.

In de helpsectie OPTIES elke parameternaam wordt gevolgd door informatie tussen punthaken (< >). Deze informatie geeft aan tot welk gegevenstype de parameterwaarde behoort. Zoals weergegeven in Afbeelding 8, moet de waarde van de parameter -Path een tekenreeks zijn. Als de typenaam wordt gevolgd door vierkante haken (string), betekent dit dat een stringarray als parameterwaarde kan worden gebruikt. In het geval van het gebruik van schakelparameters, zoals bijvoorbeeld de parameter -Full, die geen waarden aannemen, wordt het gegevenstype gespecificeerd als .

Rijst. 11. Parameter -Volledig

Een andere parametergerelateerde functie in PowerShell is de functie voor automatisch aanvullen voor combinaties van parameters en namen. De gebruiker hoeft alleen voldoende letters in te voeren waaruit de parameternaam bestaat, zodat deze kan worden onderscheiden van andere parameters. Dus het commando Get-Help Get-Content -full gelijk aan het commando Get-Help Get-Content -ful. In de helpsectie OPMERKINGEN er zijn ook voorbeelden van hoe u dit of dat commando kunt gebruiken. Afbeelding 12 toont 3 voorbeelden van het gebruik van de opdracht Get-Help.

Rijst. 12. Voorbeelden van het gebruik van de opdracht Get-Help

Hulp krijgen bij concepten

PowerShell wordt geleverd met een set helpbestanden die overzichten bieden van verschillende concepten. Elk bestand begint met de tekens " wat betreft_"En eindigt met de naam van de sectie. Voer de volgende opdracht uit om een ​​alfabetische lijst van secties te zien:

Rijst. 13. Get-Help over * commando

Om informatie over een specifiek onderwerp te bekijken, hoeft u alleen de volledige naam van het onderwerp in de parameterwaarde op te nemen. Laten we bijvoorbeeld eens kijken naar de hulp bij aliassen. Voer hiervoor de opdracht uit:

Rijst. 14. Get-Help about_aliases commando

Afbeelding 14 toont een deel van de Help-gegevens die voortkomen uit de opdracht Get-Help about_aliases. Zoals we kunnen zien, biedt het helpbestand een overzicht van de stappen voor het maken en beheren van aliassen in PowerShell.

Aliassen gebruiken

Sommige commandonamen kunnen behoorlijk lang zijn, wat vervelend is als je commando's steeds opnieuw moet invoeren vanaf het toetsenbord. Gelukkig hebben de PowerShell-ontwerpers de mogelijkheid geboden om aliassen te gebruiken om naar opdrachten te verwijzen. Een alias is een alternatieve naam die meestal veel korter is dan de eigenlijke opdrachtnaam. PowerShell bevat een aantal ingebouwde aliassen, daarnaast kunnen gebruikers hun eigen aliassen maken.

Voer de opdracht Get-Alias ​​uit om de aliassen te bekijken die tijdens de huidige sessie beschikbaar zijn:

Rijst. 15. Get-Alias-opdracht

Huidige sessie verwijst naar de huidige verbinding met de Power shell-processor. Wanneer PowerShell start, start de gebruiker een nieuwe sessie; deze sessie gaat door totdat de gebruiker PowerShell sluit, waardoor de verbinding wordt verbroken. Naast alle ingebouwde aliassen en de bijbehorende opdrachten, geeft Get-Alias ​​alle aliassen weer die tijdens de huidige sessie zijn gemaakt, evenals aliassen die zijn ingesteld in profielen, dit zijn door de gebruiker gedefinieerde configuratie-instellingen die in PowerShell worden geladen telkens wanneer de shell wordt gestart .

Als je de aliassen wilt zien die aan een opdracht zijn gekoppeld, wees dan specifiek over de opdracht Get-Alias. Als u bijvoorbeeld de aliassen wilt bekijken die zijn gekoppeld aan Get-ChildItem, voert u de opdracht uit:

Rijst. 16. Get-Alis -definitie Get-ChildItem-opdracht

Zoals weergegeven in Afbeelding 16, bevat PowerShell drie aliassen voor toegang tot de opdracht Get-ChildItem, gci, ls en dir. Elk van hen kan worden gebruikt in plaats van de opdrachtnaam. Elk van de volgende vier opdrachten geeft dus de inhoud van de C:-directory weer:

Rijst. 17. Commando's Get-ChildItem c: en dir c:

Als we onze eigen alias in PowerShell willen maken, dan zal de opdracht Set-Alias ​​ons helpen. Laten we een alias maken voor de opdracht Get-Help. We gebruiken de afkorting hlp. De opdracht die we nodig hebben, ziet er als volgt uit:

Rijst. 18. Set-Alias ​​​​hlp Get-Help-opdracht en gegenereerde hlp-alias

Daarna, wanneer u de opdracht Get-Help moet uitvoeren, kunt u de hlp-alias gebruiken. Deze alias kan worden gebruikt totdat de sessie eindigt (dat wil zeggen, voordat PowerShell wordt gesloten). Merk op dat u geen parameters kunt opnemen bij het definiëren van een alias, alleen de opdrachtnaam kan worden gebruikt. Als u een verwijzing naar een opdracht en naar zijn parameters wilt definiëren, moet u een speciale functie maken.

Conclusie

U hebt geleerd hoe u alle beschikbare opdrachten in PowerShell kunt weergeven en hoe u Help-informatie voor elk van die opdrachten kunt weergeven. Ga je gang en bestudeer wat deze commando's doen. Experimenteer met verschillende parameters en leer aliassen maken en gebruiken en je bent al snel vloeiend in PowerShell.


Er zijn vele jaren verstreken sinds de release van Windows 7 en Server 2008.

Programmeurs, systeembeheerders en ervaren gebruikers hebben veel toepassingen gevonden voor het blauwe venster, vergelijkbaar met de opdrachtregel.

Beginnende gebruikers weten voor het grootste deel niet eens wat PowerShell (PS) is.

Maar scripts voor PowerShell kunnen bijna 100% van de acties en scripts die in het besturingssysteem worden uitgevoerd, automatiseren via de opdrachtregel en de grafische interface.

Laten we kennis maken met de belangrijkste functies van dit programma, waarbij we meer aandacht besteden aan de functies van het maken en uitvoeren van scripts (microprogramma's).

Er zijn talloze handleidingen en documentatie voor het programma, ook in het Russisch. Doel van het artikel- om de gebruiker conceptuele kennis te geven, up-to-date brengen, en of het de moeite waard is om de tolk en de uitvoering van scripts daarin te leren kennen, zal iedereen onafhankelijk beslissen.

Wat is Windows PowerShell?

PowerShell- een tolk gebaseerd op het .NET Framework, voorzien van een eigen scripttaal.

De eerste betekent dat het in tekstmodus werkt: u voert de opdracht in en u ziet het resultaat van de uitvoering op het scherm.

Zoals het was in MS-DOS en oudere versies van UNIX.

De tweede vereenvoudigt, versnelt en automatiseert de administratie, het onderhoud van systemen, applicaties, processen en aanverwante diensten door beheerders en gewone gebruikers.

In vergelijking met andere tolken, PS is anders:

  • integratie met. - stelt u in staat krachtige scripts te maken door er programmacode in in te sluiten;
  • alle geretourneerde gegevens zijn objecten, geen tekst / tekenreeksgegevens, wat inhoudt dat ze worden overgedragen naar andere scripts en elke verwerking.

PowerShell-versie 2 heeft de volgende mogelijkheden, waarvan we er enkele in meer detail zullen bespreken:

  • De mogelijkheid om opdrachten weer te geven als cmdlets- ze worden gestart in de interpreter, anders wordt de opdracht in een apart proces uitgevoerd.
  • Pijpleidingen gebruiken- zijn bedoeld voor het overbrengen van gegevens van het ene commando naar het andere met behoud van hun structuur en type.
  • Geïntegreerde multi-threaded gegevensoverdracht via het netwerk met prioriteitsinstelling en verbindingsvernieuwing.
  • Ondersteuning voor positionele en benoemde parameters.
  • Achtergrondwerk- asynchroon oproepen van opdrachten en starten van scripts op externe machines.
  • Beperkte sessies opzetten met externe klanten en het uitvoeren van scripts op hen.
  • Modules- een manier om scripts te organiseren wanneer ze op zichzelf staand worden en in hun eigen container draaien zonder de omgeving van de module te beïnvloeden.
  • De aanwezigheid van een foutafhandelaar.
  • Grafische omgeving voor taal: syntaxis, debugger, markering, automatische voltooiing van opdrachten met ondersteuning voor Unicode en bladwijzers.
  • Onderbrekingspunten aan lijnen toevoegen, opdrachten, bewerkingen en variabelen voor scriptfoutopsporing.
  • Opmerkingen blokkeren en onderschrijven.
  • Ondersteuning voor het maken van aliassen voor sommige cmdlets die op het moment van uitvoering worden omgezet in reguliere opdrachten.
  • Creatie van beperkte sessies, waar u een strikt gespecificeerde lijst met opdrachten kunt uitvoeren en nog veel meer.

PowerShell-broncode voor iedereen beschikbaar: Elk lid van de gemeenschap kan vrijelijk zijn eigen extensies maken om de functionaliteit van de opdrachtregelinterpreter te vergroten.

U kunt de geïntegreerde scripttaal onder de knie krijgen zonder programmeervaardigheden.

Het is onwaarschijnlijk dat het mogelijk zal zijn om een ​​complex scenario te creëren, maar bijna iedereen zal slagen in het uitvoeren van reeksen primitieve acties.

Hoewel het onwaarschijnlijk is dat u iets in het shell-venster kunt doen zonder de basisconcepten van PowerShell te kennen. Laten we met hen beginnen.

cmdlets

cmdlets- een soort PS-commando's, waarachter allerlei functies schuilgaan. De opdrachten die in de interpreter zijn ingebouwd, worden geïmplementeerd volgens het principe van "werkwoord-zelfstandig naamwoord", bijvoorbeeld Get-Process (een lijst met processen ophalen). Met deze oplossing kunt u de essentie van de opdracht al uit de naam (in het Engels) begrijpen.

Sommige cmdlets ondersteunen het ontvangen/verzenden van gegevens en arrays van informatie met behoud van hun structuur en type. Het werkt als een pijplijn (we zullen hier in de volgende sectie over praten). Hoe dan ook, cmdlets voeren en verwerken objecten in strikte volgorde.

Elke ondersteunde .NET API geschreven in een van de .NET-talen kan worden gebruikt om de cmdlets te implementeren.

Zo krijgt de gebruiker toegang tot de specifieke functies van het programma.

Cmdlets hebben rechtstreeks toegang tot de vereiste informatie of via unieke paden (stationsletters en directorypaden).

Met cmdlets kunt u werken met bestandssysteem- en certificaatarchiefobjecten, geïnstalleerde toepassingen en services.

transportband

Bij het maken van niet erg primitieve scripts of om bewerkingen uit te voeren met de gegevens die zijn verkregen als resultaat van het script, moet u soms ook enkele acties uitvoeren.

Hiervoor is een transportband aanwezig. Net als in UNIX voegt het opdrachten samen door de uitvoer van de ene cmdlet door te geven aan de invoer van een andere, ongewijzigd, met behoud van het type.

Dit vereist geen container- of teken-voor-teken ontleding van informatie.

De structuur van de verzonden informatie kan een functie bevatten. Na het einde van het werk van de gecombineerde commando's, wordt de functie van het converteren van informatie naar een tekstvorm (het converteren van gegevens naar strings) aangeroepen met behulp van tekstopmaak.

Scripts

Ondanks dat de shell veel acties kan automatiseren, moet je commando's handmatig invoeren, wat niet erg handig is.

Vooral wanneer dezelfde bewerkingen continu moeten worden uitgevoerd.

En je kunt niet zonder de menselijke factor: typefouten, fouten, per ongeluk op toetsen drukken bij het schrijven van regels code, corrigeren of opnieuw typen van een regel vragen om een ​​meer gebruiksvriendelijke houding.

Om monotone reeksen acties in PS uit te voeren, worden scripts geïmplementeerd - tekstbestanden met een reeks opdrachten die begrijpelijk zijn voor de tolk erin.

Scripting in PowerShell zal pc-werk en onderhoud verder vereenvoudigen en automatiseren, vooral als het script vorken, voorwaarden, logische bewerkingen en lussen bevat.

Maar hier is “niet alles goud dat blinkt”: een eigen script schrijven of een kant-en-klaar script uploaden (alhoewel door het enigszins aan te passen aan je eigen doelen) zal niet zo gemakkelijk lukken.

Als inMicrosofthet was toegestaan, hoeveel problemen? scripts gemaakt voorPowerShell geschreven door oplichters en kwaadwillenden voor huurling- of hooligan-doeleinden.

Om in Windows PS te werken, moet u de startcontrole doorlopen.

Als het mislukt en het script moet worden uitgevoerd, moet u de configuratie wijzigen van de objecten die verantwoordelijk zijn voor de beveiligingsmacro's.

Voordat u scripts gebruikt

Bij het gebruik van VBS doen zich veel problemen voor, die de PowerShell-ontwikkelaars volledig hebben opgelost, als de scriptbeveiliging niet wordt verlaagd om te voldoen aan de scriptverzoeken van de gebruiker of om de problemen met betrekking tot het beveiligingsniveau van het besturingssysteem op te lossen.

Het uitvoeren van een gedownload script op de computer van een gebruiker is een eenvoudige en effectieve manier om schadelijke software te verspreiden of persoonlijke informatie te stelen door cybercriminelen.

Alles gebeurt door elementaire onwetendheid over de inhoud van het scriptbestand (ps1) en de wens om hun problemen snel op te lossen ten koste van de arbeid van anderen. Objecten die het beveiligingsniveau van scripts beheren, creëren een omgeving waarin het onmogelijk is om een ​​script uit te voeren.

Het opzettelijk starten van macro's vindt plaats na het wijzigen van het beveiligingsniveau, als de gebruiker toestemming geeft, zich realiseert wat hij doet en zeker weet wat er in het * .ps1-bestand staat.

Vanwege het ongemak van het configureren van bescherming voor mensen die hun eigen scripts moeten implementeren en uitvoeren, is het mogelijk om de configuratie te wijzigen.

Hier kunt u zowel de bescherming tot een minimum beperken als redelijk manoeuvreren tussen de mogelijkheid om gaten te openen voor penetratie en het gemak van werken met PowerShell.

De shell heeft drie beveiligingsniveaus:

  • bestanden met de extensie ps1 worden niet geïdentificeerd door het systeem als uitvoerbaar en aangeduid als onbekend of tekst (openen door te dubbelklikken in de teksteditor die standaard op de computer wordt gebruikt);
  • met de shell kun je scripts uitvoeren nadat je het volledige pad ernaartoe hebt opgegeven, scriptbestanden in de huidige map worden niet doorzocht, waardoor het onmogelijk is om macro's in de huidige map uit te voeren;
  • het ingesloten script voor uitvoeringsbeleid uitvoeren verantwoordelijk voor het toevoegen van de vereiste scripts aan de lijst met toegestane scripts.

Denk er niet eens aan om de configuratie te veranderen, het verlagen tot ten minste het tweede niveau, zonder uzelf vertrouwd te maken met de basisPowerShelltotdat u de inhoud van de *.ps1.

Er is ook het concept van een uitvoeringsbeleid dat is ontworpen om te voorkomen dat scripts per ongeluk worden uitgevoerd. Er zijn maar liefst vijf instellingen voor het startbeleid:

  • beperkt - standaard geïnstalleerd, worden alleen door Microsoft ondertekende scripts uitgevoerd waarmee informatie over de hardware- en softwareschil van de computer kan worden verkregen;
  • ondertekende verwijderde bestanden- alle macro's kunnen worden uitgevoerd, maar bestanden die per e-mail worden verzonden, moeten worden ondertekend;
  • digitaal ondertekend vanuit een vertrouwde bron- alle ondertekende scripts worden uitgevoerd;
  • onbeperkt- starten van macro's;
  • omzeilen- zijn bedoeld voor programmeurs die hun eigen beveiligingssysteem maken en niet het systeem gebruiken dat in de shell wordt gepresenteerd.

U kunt de huidige status van het startbeleid controleren met de opdracht "Get-ExecutionPolicy".Wat het beveiligingsbeleid ook is, de gebruiker kan geen script uitvoeren dat opdrachten bevat waarvoor hij niet voldoende bevoegdheden heeft om uit te voeren.

PowerShell starten

Het is tijd om van theorie naar praktijk te gaan. Dus om scripts uit te voeren, moet u een digitale handtekening krijgen of (de tweede optie is eenvoudiger).

Er zijn verschillende manieren om een ​​PowerShell-venster aan te roepen.

Het wordt gepresenteerd in twee vormen:

  • klassieke console;

  • PowerShell ISE - voegt ondersteuning toe voor tabbladen, syntaxis, contexthulp, context en hoofd- en menu's, wat het werk in de tolk aanzienlijk vergemakkelijkt.

Begin

De makkelijkste manier om PS te bellen is via Start.

  1. Open het menu(klik in Windows 7 op "Alle programma's").
  2. Ga naar de Windows PowerShell-map en klik op het gewenste icoon.

Rijst. 6 - PS starten via het dialoogvenster Uitvoeren

Win + X

In Windows 10 kan PS worden opgeroepen vanuit het WinX-menu. Het feit is dat standaard, door op de opdracht te klikken "Opdrachtregel" CMD openen. Het kan worden vervangen door PowerShell.

Open de "Eigenschappen" van de taakbalk, in het tabblad "Navigatie", zet een vinkje naast de enige optie en sla de instellingen op.

U kunt PowerShell aanroepen via de opdrachtregel door er "powershell" in te schrijven of door het uitvoerbare bestand langs het pad uit te voeren:% WINDIR% \ Systeem32 \ WindowsPowerShell \ v1.0 voor 32-bits systemen en op% WINDIR% \ syswow64 \ WindowsPowerShell \ v1.0 voor 64-bits Windows van elke editie.

Rijst. 8 - Start PS vanuit de map waar het uitvoerbare bestand is opgeslagen

De afgelopen jaren heeft Microsoft actief geprobeerd om er een belangrijk administratief hulpmiddel van te maken. Bijna alle nieuwe Microsoft-serverproducten moeten worden gebruikt en een aantal systeemonderhoudstaken kunnen niet worden uitgevoerd zonder de opdrachtregel, dus elke Windows-beheerder moet de basis van PowerShell kennen. Hier zijn tien van de handigste commando's.

1. Hulp krijgen

De eerste cmdlet die elke beheerder zou moeten kennen, is Get-Help. Met zijn hulp kunt u hulpinformatie krijgen voor elke andere opdracht. Als u bijvoorbeeld de volledige syntaxis voor de opdracht Get-Process wilt zien, kunt u de volgende opdracht gebruiken:

Get-Help -Naam Get-proces

Get-Help kan ook worden gebruikt met zelfstandige naamwoorden en werkwoorden. Als u bijvoorbeeld een lijst met opdrachten met het werkwoord Get wilt krijgen, kunt u de volgende opdracht gebruiken:

Get-Help -Naam Get- *

2. Set-uitvoeringsbeleid

Hoewel PowerShell de mogelijkheid biedt om scripts te maken en uit te voeren, is deze optie standaard uitgeschakeld om te voorkomen dat schadelijke code wordt uitgevoerd. U kunt de machtigingen voor het uitvoeren van scripts beheren met de opdracht Set-ExecutionPolicy. Er zijn vier beveiligingsniveaus beschikbaar:

Beperkt- scripten is verboden. Deze optie is standaard geïnstalleerd. In dit geval kunnen opdrachten alleen in interactieve modus worden uitgevoerd.

Allemaal ondertekend- Alleen scripts die zijn ondertekend door een vertrouwde uitgever mogen worden uitgevoerd.

Op afstand ondertekend- Alle lokaal gemaakte scripts mogen worden uitgevoerd en scripts die op externe systemen zijn gemaakt, worden alleen uitgevoerd als ze zijn ondertekend door een vertrouwde uitgever.

Onbeperkt- uitvoering van absoluut alle scenario's is toegestaan.

Om een ​​specifiek scriptuitvoeringsbeleid toe te passen, kunt u de opdracht Set-ExecutionPolicy gebruiken met de naam van het beleid. U kunt bijvoorbeeld onbeperkte uitvoering van scripts inschakelen met de volgende opdracht:

Set-uitvoeringsbeleid onbeperkt

3. Get-uitvoeringsbeleid

Wanneer u op een onbekende server aan de slag gaat, moet u eerst uitzoeken wat het scriptbeleid op die server is. U kunt erachter komen met de opdracht Get-ExecutionPolicy.

4. Get-Service

Met de opdracht Get-Service kunt u een lijst krijgen van alle services die op het systeem zijn geïnstalleerd. Om de status van een specifieke service te controleren, kunt u het commando met de -Name-schakelaar aanvullen met de naam van de service (jokertekens zijn toegestaan).

5. Converteren naar HTML

PowerShell biedt een schat aan nuttige informatie over het systeem, maar soms is het niet voldoende om deze informatie alleen in een opdrachtpromptvenster te bekijken. Soms is het nodig om een ​​rapport op te stellen om naar een andere beheerder te sturen. In dit geval kunt u de opdracht ConvertTo-HTML gebruiken om de uitvoer van een andere opdracht ernaartoe om te leiden. Daarbij moet u de schakeloptie -Property gebruiken om de eigenschappen weer te geven die u in het HTML-rapport wilt opnemen en de bestandsnaam op te geven.

Laten we bijvoorbeeld het Get-Service-commando nemen om een ​​lijst met services te krijgen en op basis daarvan een HTML-rapport te maken, met vermelding van de naam en status van elke service die op het systeem is geïnstalleerd. Om dit te doen, kunt u de volgende opdracht gebruiken:

Get-Service | ConvertTo-HTML -Property Name, Status> C: \ services.htm

6. Export-CSV

Rapporten kunnen niet alleen in HTML worden opgeslagen, maar ook worden geëxporteerd naar CSV-indeling voor weergave in Microsoft Excel. De opdrachtsyntaxis die voor dit doel wordt gebruikt, is hetzelfde als ConvertTo-HTML. Zorg ervoor dat u de bestandsnaam opgeeft om het rapport op te slaan. U kunt bijvoorbeeld de lijst met services exporteren naar een CSV-bestand met de volgende opdracht:

Get-Service | Export-CSV c: \ service.csv

7. Object selecteren

Wanneer u de bovenstaande opdracht uitvoert, bevat het CSV-rapport een enorme hoeveelheid informatie, maar soms is het handig om de verzameling informatie te beperken. Dit kan met het Select-Object-commando, waarmee u kunt specificeren welke eigenschappen in het rapport moeten worden opgenomen. Als u bijvoorbeeld een CSV-rapport wilt genereren met de namen en statussen van alle systeemservices, kunt u de volgende opdracht gebruiken:

Get-Service | Selecteer objectnaam, status | Export-CSV c: \ service.csv

8. Get-EventLog

De opdracht Get-EventLog kan worden gebruikt om gebeurtenislogboeken te ontleden. Het biedt een aantal extra opties, maar om een ​​idee te krijgen van hoe het werkt, hoef je alleen de -Log-schakelaar en de naam van het logbestand op te geven. Als u bijvoorbeeld het logboek van een toepassing wilt bekijken, kunt u de volgende opdracht gebruiken:

Get-EventLog -Log "Toepassingsnaam"

In de praktijk wordt dit commando zelden gebruikt. Meestal worden in plaats daarvan andere opdrachten gebruikt om de gegevens te filteren en op te slaan in CSV- of HTML-indeling.

9. Get-proces

Terwijl de opdracht Get-Service alle systeemservices weergeeft, geeft de opdracht Get-Process alle processen weer die momenteel worden uitgevoerd.

10. Stop-proces

Wanneer een proces vastloopt, kunt u de naam of id achterhalen met behulp van de opdracht Get-Process en het proces vervolgens beëindigen met de opdracht Stop-Process en de naam of id opgeven. Het proces Notepad.exe voor Kladblok kan bijvoorbeeld worden beëindigd met een van de volgende opdrachten:

Stop-Process -Naam notitieblok Stop-Process -ID 2668

Vergeet dat niet