PowerShell en alles wat u moet weten over dit hulpprogramma

Stel je eens voor dat je pc alledaagse taken voor je zou kunnen overnemen? Met Windows PowerShell kan dat. Hier lees je hoe je PowerShell kunt gebruiken om de repetitieve, alledaagse taken te automatiseren die niemand steeds opnieuw wil doen.

Inhoudsopgave

Wat is PowerShell?

Microsoft PowerShell is een opdrachtregelprogramma en scripttaal. Een krachtige tool voor beheerders om een ​​breed scala aan taken voor computers en netwerken te automatiseren. PowerShell bevat componenten van de opdrachtprompt en is gebaseerd op het .NET Framework. Als u meer leest over WebTech360, moet u weten dat PowerShell dé tool bij uitstek is voor IT-beheerders voor het beheer van grote netwerken.

Leren hoe u PowerShell gebruikt, zal veel saaie dagelijkse taken vereenvoudigen. U kunt ook systeembrede wijzigingen via het netwerk aanbrengen zonder dat u elke server afzonderlijk hoeft te configureren. PowerShell wordt een essentieel onderdeel van het runnen van hybride cloudomgevingen .

PowerShell biedt vele toepassingen waarmee u efficiënter kunt werken en uw netwerk efficiënt kunt laten draaien. De meest basale toepassingen zijn: het plannen van dagelijkse updates op systemen, het genereren van rapporten over huidige processen, periodieke services en meer. Hoewel veel van deze taken via de grafische gebruikersinterface kunnen worden uitgevoerd, is het doel van PowerShell om ze sneller uit te voeren.

Als u een routinematige onderhoudstaak hebt die een paar minuten in beslag neemt, kunt u dezelfde functionaliteit in één opdracht scripten, genaamd PowerShell. De volgende keer dat u dat script opent, wordt het op de achtergrond uitgevoerd. Als u de scriptlogica van PowerShell onder de knie krijgt, begrijpt hoe objecten en variabelen werken en hoe u deze intelligent in uw netwerk kunt implementeren, zult u zich afvragen waarom u PowerShell niet eerder hebt gebruikt.

Deze tutorial behandelt de basisprincipes van PowerShell, wat handig is voor IT-nieuwkomers, vooral als je bekend bent met de Windows-opdrachtprompt. Je leert hoe je basistools en -opdrachten gebruikt, hoe je met bestanden en mappen werkt, objecten begrijpt, variabelen gebruikt en externe servers beheert.

Een korte geschiedenis van Windows-opdrachtregelhulpprogramma's

Na de release van Windows NT werd CMD.EXE het opdrachtregelprogramma voor Windows. Hoewel CMD.EXE enkele elementen overnam van zijn DOS-voorganger (COMMAN.COM), was het nog steeds gebaseerd op een vrij "primitieve" scripttaal: het gebruik van Windows Command-bestanden (.CMD en .BAT). De toevoeging van Windows Scripting Host en de VBScript- en JScript-talen verbeterde de scriptmogelijkheden van het hulpprogramma aanzienlijk.

Deze technologieën vormen een redelijk evenwichtige mix van geavanceerde opdrachtregelprogramma's en scriptomgevingen. De echte zorg is niet hoeveel CMD.EXE-, .CMD- en Windows Scripting Host-bestanden ermee bewerkt kunnen worden. De grootste klacht en zorg is het uitvoeren van ogenschijnlijk eenvoudige taken.

Met behulp van een "framework" van opdrachtregel- en scripttools vereist elk matig uitgebreid script een combinatie van batchopdrachten, Windows Scripting Host en zelfstandige uitvoerbare bestanden. Elk script gebruikt verschillende conventies voor uitvoering en aanvragen, parsing en het retourneren van gegevens.

Slechte ondersteuning voor variabelen in CMD.EXE, inconsistente interfaces en beperkte toegang tot Windows-instellingen, gecombineerd met een andere zwakte, maken command line scripting lastig te implementeren en te gebruiken. Wat is die 'andere zwakte', vraagt ​​u zich misschien af? Het is tekst. In deze technologieën is alles tekst. De uitvoer van een opdracht of script is tekst en moet worden geparseerd en opnieuw worden geformatteerd om als invoer voor de volgende opdracht te dienen. Dit is het basisuitgangspunt dat PowerShell van alle traditionele shells overneemt.

Introductie van PowerShell-hulpmiddelen, opdrachten en modules

De drie concepten die in deze sectie worden geïntroduceerd, vormen slechts de basis om de belangrijkste concepten te begrijpen die de basis van PowerShell vormen. U zult meer tijd moeten besteden aan het leren en beheersen van de meer geavanceerde concepten naarmate u PowerShell-opdrachten leert gebruiken.

PowerShell-hulpprogramma's

PowerShell is standaard geïnstalleerd in Windows 10, Windows 7, Windows Server 2008 R2 en nieuwere versies van Windows. Nieuwere versies van PowerShell voegen nieuwe functies en 'cmdlets' (de Microsoft-term voor PowerShell-opdrachten - uitgesproken als 'command-lets') toe en worden geïnstalleerd met de bijbehorende versie van het Windows Management Framework (WMF).

Momenteel is WMF 5.1 de nieuwste aanbevolen versie. In sommige gevallen zijn nieuwe functies afhankelijk van het besturingssysteem en niet alleen van de WMF-versie. Windows 8 en Windows Server 2012 ondersteunen bijvoorbeeld de cmdlet Test-NetConnection, waarmee u de connectiviteit met een specifieke TCP/IP- poort kunt testen . Deze cmdlet is echter niet beschikbaar in Windows 7, zelfs niet wanneer u de nieuwste versie van WMF gebruikt.

Op de meeste Windows-systemen hebben gebruikers twee PowerShell-omgevingen tot hun beschikking: de PowerShell-console en de PowerShell ISE (Integrated Scripting Environment). De PowerShell-console lijkt op een traditionele opdrachtregel, maar dan met alle functionaliteit van PowerShell erachter. Variabelenamen, lussen, automatische aanvulling van opdrachten en piping zijn allemaal beschikbaar via de PowerShell-console.

Voor geavanceerder gebruik (zoals scripting) biedt PowerShell ISE automatische aanvulling van opdrachten, codemarkering en Microsoft's Intellisense codeaanvulling om u te helpen bij het maken en testen van PowerShell-code. Met PowerShell ISE kunt u ook met meerdere PowerShell-scripts tegelijk werken via tabbladnavigatie.

cmdlets in PowerShell

De basis van PowerShell-opdrachten is de cmdlet. Microsoft heeft verschillende ontwerpstrategieën gehanteerd bij het maken van cmdlets in PowerShell.

Ten eerste is er de mogelijkheid om cmdletnamen eenvoudig af te leiden, of ze in ieder geval beter vindbaar te maken. PowerShell-opdrachten of cmdlets zijn ook ontworpen om gebruiksvriendelijker te zijn, met een gestandaardiseerde syntaxis, waardoor het gemakkelijker is om scripts te maken via de opdrachtregelinterface.

Cmdlets gebruiken de werkwoord-zelfstandig naamwoord-indeling, zoals Get-Service, Stop-Service of Import-Csv. Het werkwoordgedeelte van de cmdletnaam geeft de actie aan die op het zelfstandig naamwoord wordt uitgevoerd. Cmdlets die worden gebruikt om informatie op te halen, hebben doorgaans het werkwoord Get in hun naam, zoals Get-Process of Get-Content . Opdrachten die worden gebruikt om iets te wijzigen, beginnen meestal met het werkwoord Set , en opdrachten die worden gebruikt om een ​​nieuwe entiteit aan iets toe te voegen, beginnen meestal met Add of New .

Ten tweede krijgen parameters die vaak in PowerShell worden gebruikt, ook standaardnamen. Met de parameter -ComputerName kan de cmdlet bijvoorbeeld op een of meer externe computers worden uitgevoerd. -Credential wordt gebruikt om een ​​authenticatieobject met gebruikersreferenties te verstrekken, zodat de opdracht als een specifieke gebruiker kan worden uitgevoerd.

Modules in PowerShell

U kunt aliassen gebruiken voor zowel cmdlets als parameters om toetsaanslagen te besparen en de totale lengte van de opdracht te verkorten (handig bij het aaneenschakelen van meerdere opdrachten). Hoewel deze aliassen niet altijd standaard naamgevingsconventies gebruiken, weerspiegelen ze nog steeds traditionele opdrachtregelprogramma's.

In PowerShell komen aliassen zoals DIR, CD, DEL en CLS overeen met respectievelijk de cmdlets Get-ChildItem, Set-Location, Remove-Item en Clear-Host. Parameteraliassen kunnen op twee manieren werken: ze kunnen een vooraf gedefinieerde alias gebruiken die door de cmdlet wordt verstrekt, of ze kunnen worden gealiast door voldoende tekens in te voeren om een ​​unieke match te creëren tussen de ondersteunde parameters van de cmdlet.

Bestands- en mapbeheer

De meeste systeembeheerders moeten tijdens hun werk bestanden en mappen bewerken, of het nu gaat om het verplaatsen van een map naar een andere locatie op de server, het archiveren van logbestanden of het zoeken naar grote bestanden. In gevallen waarin dezelfde bewerkingen op meerdere bestanden worden herhaald, is het gebruik van PowerShell om deze te automatiseren een effectieve tijdbesparende oplossing.

Om bestanden en mappen te vinden, was een van de eerste opdrachtregeltools die een beheerder in de oude computertijd leerde, de opdracht dir. Dir geeft een overzicht van de bestanden en mappen in de opgegeven directory.

PowerShell heeft een vergelijkbare opdracht in de vorm van de cmdlet Get-ChildItem . Met Get-ChildItem kunt u snel een lijst met bestanden in een directory samenstellen, zodat u de bestanden kunt bewerken via een pipe-opdracht of de uitvoer aan een variabele kunt toewijzen.

Get-ChildItem kan eenvoudig worden gebruikt door een pad op te geven, via een pijplijn met de parameter -Path of direct na de naam van de cmdlet. Om de respons van Get-ChildItem te wijzigen, is het noodzakelijk om rekening te houden met enkele parameters die door de cmdlet beschikbaar worden gesteld.

Met de parameter -Filter kunt u naar bestanden zoeken. Standaard retourneert Get-ChildItem alleen directe onderliggende items van de doelmap. Deze functionaliteit kan worden uitgebreid met de parameter -Recurse , waarmee recursief wordt gezocht in mappen in de huidige map.

In PowerShell 4.0 heeft Get-ChildItem de mogelijkheid toegevoegd om resultaten te beperken tot bestanden of mappen met de schakeloptie –File of –Directory . Eerdere versies van PowerShell moesten de resultaten doorgeven aan Where-Object en filteren op de eigenschap PSIsContainer om dit te bepalen. Een voorbeeld van beide technieken die worden gebruikt om mappen in C:Users te retourneren, wordt hier getoond:

Get-ChildItem C:Users -Directory Get-ChildItem C:Users | Where-Object {$_.PSIsContainer –eq $true}

Om verborgen of systeembestanden te detecteren, moet  -Force worden gebruikt . Get-ChildItem in PowerShell 4.0 en hoger kan ook worden gebruikt om alleen verborgen, alleen-lezen of systeembestanden te retourneren met respectievelijk -Hidden, -ReadOnly en –System . Soortgelijke functionaliteit kon in eerdere versies worden bereikt door de eigenschap Mode te filteren met Where-Object:

Get-ChildItem C:Users | Where-Object {$_.Mode -like '*R*'}

Controleren of het bestand bestaat

Normaal gesproken hoeven we bij het werken met bestanden alleen te weten of het bestand bestaat en of het pad naar de map geldig is. PowerShell biedt hiervoor een cmdlet in de vorm van Test-Path, die de waarde true of false retourneert.

Test-Path wordt gebruikt als voorzorgsmaatregel voordat een specifiek bestand wordt gekopieerd of verwijderd.

Bestanden kopiëren, verplaatsen en verwijderen

Copy-Item: Kopieert een of meer bestanden of mappen van een locatie, opgegeven met de parameter -Path, naar de locatie die is opgegeven met de optie -Destination.

Move-Item: Verplaats een bestand of map.

Wanneer een directorystructuur wordt gekopieerd of verplaatst, moet -Recurse worden gebruikt om de cmdlet de actie te laten uitvoeren op de directory en de inhoud ervan. In sommige gevallen is -Force ook vereist , bijvoorbeeld wanneer een alleen-lezenbestand wordt overschreven door een kopieerbewerking.

Remove-Item: Verwijder bestand, map.

De schakelaar -Force moet worden gebruikt wanneer een alleen-lezenbestand wordt aangetroffen en -Recurse moet worden gebruikt wanneer een map en de inhoud ervan worden verwijderd.

PowerShell gebruiken -WhatIf en -Confirm

Gebruik -WhatIf voordat u een grootschalige, massale verwijdering uitvoert . Met -WhatIf kunt u zien wat er gebeurt als u een script of opdracht uitvoert en of dit mogelijk negatieve gevolgen heeft door belangrijke bedrijfsgegevens te verwijderen. Het is ook belangrijk om te weten dat -WhatIf niet beperkt is tot bestandsbewerkingen; het wordt veel gebruikt in PowerShell.

Voor scripts die u handmatig wilt uitvoeren, of erger nog, waarvan de afhankelijke opdrachten handmatig worden uitgevoerd, kunt u -Confirm gebruiken . Hiermee kunt u gebruikersinteractie vereisen voordat de bewerking daadwerkelijk plaatsvindt.

PowerShell-scripts = batchbestanden op steroïden

PowerShell zelf is geschreven in .NET en is sterk gebaseerd op .NET Framework. PowerShell is daarom ontworpen als een objectgeoriënteerde shell- en scripttaal. Alles in PowerShell wordt behandeld als een object met alle mogelijkheden van .NET Framework. Een opdracht stelt een verzameling objecten beschikbaar die kunnen worden gebruikt met de eigenschappen en methoden van dat objecttype. Wanneer u de uitvoer van de ene opdracht naar de andere wilt doorsturen, geeft PowerShell het object daadwerkelijk door, niet alleen de tekstuele uitvoer van de eerste opdracht. Dit geeft de volgende opdracht volledige toegang tot alle eigenschappen en methoden van het object in de pipeline.

Het behandelen van alles als een object en het kunnen accepteren van objecten tussen opdrachten is een grote verandering in de theorie van opdrachtregelhulpprogramma's. PowerShell werkt echter nog steeds als een traditionele shell. Opdrachten, scripts en uitvoerbare bestanden kunnen worden getypt en uitgevoerd vanaf de opdrachtregel, en de resultaten worden weergegeven als tekst. Windows .CMD- en .BAT-bestanden, VBScripts, JScripts en de uitvoerbare bestanden die in CMD.EXE worden uitgevoerd, werken allemaal nog steeds in PowerShell. Omdat ze echter niet objectgeoriënteerd zijn, hebben ze geen volledige toegang tot de objecten die in PowerShell zijn gemaakt en gebruikt. Deze oudere scripts en uitvoerbare bestanden behandelen alles nog steeds als tekst, maar u kunt PowerShell combineren met een aantal andere technologieën. Dit is vooral belangrijk als u PowerShell wilt gaan gebruiken met een verzameling bestaande scripts die u niet in één keer kunt converteren.

PowerShell-parameters uitgelegd

Cmdlets kunnen parameters accepteren om hun gedrag te wijzigen. Wanneer u een cmdlet of functie uitvoert, kunt u parameterwaarden opgeven om aan te geven wat, wanneer, waar en hoe elke PowerShell-opdracht wordt uitgevoerd.

Get-Process haalt bijvoorbeeld alle actieve processen in uw besturingssysteem op en geeft deze weer:

PowerShell en alles wat u moet weten over dit hulpprogramma
Get-Process geeft een overzicht van alle actieve processen.

Maar wat als je alleen een specifiek proces wilt ophalen? Je kunt dat doen met behulp van parameters. Om bijvoorbeeld alle Slack-processen op te halen, kun je de parameter Naam gebruiken met de cmdlet Get-Process:

Get-Process -Name Slack

Dan ziet u alleen nog processen met de naam 'slack':

PowerShell en alles wat u moet weten over dit hulpprogramma
Get-Process gebruiken met parameters

Tip : Sommige parameters zijn "positioneel", wat betekent dat hun namen optioneel zijn. In dit geval voeren Get-Process -Name Slack en Get-Process Slack beide dezelfde taak uit.

Elke cmdlet accepteert verschillende typen parameters. Gebruik de opdracht Get-Help om de geaccepteerde parameters van de cmdlet in de sectie SYNTAX te bekijken.

Get-Help Get-Process

U ziet een lijst met alle mogelijke manieren waarop u de gegeven cmdlet kunt uitvoeren:

PowerShell en alles wat u moet weten over dit hulpprogramma
cmdlet-syntaxisparameters

In dit geval accepteert de Get-Process-cmdlet parameters zoals Naam, Id, Computernaam, Module, FileVersieInfo en andere veelgebruikte parameters. De symbolen hier betekenen:

Symbool

Naam

Betekenis

 

Trommel

Parameter accepteert geen invoer

-

Koppelteken

Geef de parameternaam op

<>

accolades

Plaatsaanduiding voor tekst

[]

Haakjes

De parameter kan één of meer waarden accepteren.

{}

accolades

De parameter accepteert een reeks waarden.

Parameters accepteren een reeks waarden die het type gegevens aangeven dat ze nodig hebben, zoals een tekenreeks, een geheel getal, een Booleaanse waarde of een datum/tijd-waarde. Bijvoorbeeld de volgende opdracht:

Get-Process [[-Name] ]

... betekent dat de parameter Naam één of meer tekenreekswaarden accepteert, terwijl deze opdracht:

Get-Process -Id 

... betekent dat de Id- parameter één of meer gehele getallen accepteert.

In het vorige Get-Process-voorbeeld werd de parameter Naam gebruikt om de resultaten te verfijnen. Als u echter een specifieker proces wilt specificeren, kunt u de parameter ID gebruiken . Deze vereist een geheel getal, zoals aangegeven in de syntaxis.

Get-Process -Id 3016

Dan ziet u slechts één proces in de lijst:

PowerShell en alles wat u moet weten over dit hulpprogramma
De Id-parameter gebruiken op cmdlets

Pijplijn maken

PowerShell verwerkt alle gegevens als objecten. Om een ​​script te bouwen, worden deze objecten uitgevoerd via een reeks cmdlets of functies die verbonden zijn via het pipe-symbool (|). Het kiezen van de juiste cmdlets en het verbinden ervan in een logische volgorde via een pipeline is belangrijk voor een efficiënt script.

Stel dat je een script maakt om de 5 bestanden die de meeste ruimte innemen in een map te sorteren en weer te geven. Er zijn krachtigere manieren om een ​​script voor het sorteren van bestanden te schrijven, maar dit eenvoudige script is gemakkelijk te begrijpen:

PowerShell en alles wat u moet weten over dit hulpprogramma
Script Sorteren-Grote Bestanden PS1

Om dit in PowerShell te doen, gebruikt u een pijplijn die er als volgt uitziet:

Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
 | Select-Object -First 5 | Format-Table Name, Length -AutoSize

Pijplijn opslaan als PS1-script

Nu u een werkende pijplijn hebt, kunt u deze opslaan als een PS1-scriptbestand. Zo hoeft u deze niet elke keer dat u deze gebruikt te importeren.

De eenvoudigste manier om een ​​PS1-bestand te maken, is door uw script in Kladblok te plakken en het bestand op te slaan met de extensie .ps1.

PowerShell en alles wat u moet weten over dit hulpprogramma
Script maken met Kladblok

Nadat u het PS1-bestand hebt gemaakt, kunt u het gebruiken in PowerShell door ./ScriptName.ps1 uit te voeren :

PowerShell en alles wat u moet weten over dit hulpprogramma
PS1-script gebruiken

Tip : Als u een machtigingsfout krijgt, is de snelste oplossing om PowerShell met beheerdersrechten uit te voeren wanneer u uw script uitvoert.

Gefeliciteerd! U kunt nu PowerShell PS1-scripts maken.

Voorbeeld van een PowerShell-script

Lezen over en begrijpen hoe geweldig nieuwe technologie is, is één ding, maar het daadwerkelijk gebruiken ervan is een tweede! In de rest van dit artikel ontwikkelen we een PowerShell-script om de mogelijkheden ervan te demonstreren en te laten zien hoe je het kunt gebruiken.

DIR is een van de meest voorkomende opdrachten in CMD.EXE . Deze opdracht geeft alle bestanden en submappen in een bovenliggende map weer (zoals weergegeven in Afbeelding 1). Naast de naam van elk object bevat de verstrekte informatie de datum en tijd van de laatste update en de grootte van elk bestand. DIR geeft ook de gecombineerde grootte van alle bestanden in de map weer, evenals het totale aantal bestanden en submappen.

PowerShell en alles wat u moet weten over dit hulpprogramma
Figuur 1

Het uitvoeren van DIR in PowerShell levert ook een directoryoverzicht op zoals in Figuur 2, maar dan op een iets andere manier. PowerShell heeft geen DIR-opdracht, maar wel Get-ChildItem, dat dezelfde functie uitvoert. In PowerShell is DIR een alias voor Get-ChildItem. Ik ga in dit artikel niet in op aliassen. Je kunt DIR in PowerShell zien als een afkorting voor Get-ChildItem.

DIR in PowerShell biedt grotendeels dezelfde informatie als hierboven vermeld: een lijst met bestanden en mappen, de datum en tijd waarop ze voor het laatst zijn gewijzigd en de grootte van elk bestand. Het mist echter de samenvattende informatie die DIR in CMD.EXE biedt: de totale grootte van alle bestanden in de map, het totale aantal bestanden en het totale aantal submappen.

PowerShell en alles wat u moet weten over dit hulpprogramma
Figuur 2

Voor het voorbeeldscenario moet u een PowerShell-script maken dat de opdracht CMD.EXE DIR simuleert. Hieronder leg ik de belangrijkste onderdelen van een script uit.

DIR.PS1: Koptekst

Een PowerShell-script bestaat uit PowerShell-opdrachten in een plattetekstbestand met de extensie .PS1. In plaats van DIR gebruikt u een tekstbestand met de naam DIR.PS1.

Om het script uit te voeren, typt u de volgende opdracht in het PowerShell-scherm:

.DIR.PS1 X:Folder

Waarbij X de letter van de schijfpartitie is (bijvoorbeeld C, D, E) en Folder de naam van de map.

Als u informatie wilt hebben over de partitie van een schijf, moet u Windows Management Instrumentation (WMI) gebruiken. De details van WMI vallen buiten het bestek van dit artikel, dus we zullen er hier niet op ingaan. De onderstaande PowerShell-code is echter eenvoudig te begrijpen zonder WMI. U kunt een variabele "$filter" aanmaken voor gebruik met de opdracht Get-WmiObject. Dit filter vertelt de opdracht Get-WmiObject dat u alleen informatie over een specifieke schijf wilt. De resultaten van de opdracht Get-WmiObject worden opgeslagen in een variabele genaamd $volInfo. Onthoud dat in PowerShell alles een object is; $volInfo is nu een object dat wordt geretourneerd door Get-WmiObject.

$filter = "DeviceID = '" + $drive + ":'"
$volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter

U hebt nu toegang tot alle objecten en methoden die aan het object zijn gekoppeld. Het volumeserienummer is toegankelijk via de eigenschap VolumeSerialNumber. Het geretourneerde nummer is een tekenreeks van 8 tekens. Vaak wilt u het echter opmaken als vier getallen, gescheiden door een koppelteken. Dit kan op dezelfde manier worden gedaan als in de volgende regel. Het koppelteken aan het einde van de eerste regel is het regelvoortzettingsteken in PowerShell. Het vertelt PowerShell in feite dat de regel niet wordt afgebroken en dat deze de volgende regel bevat. Regeleinden zijn niet vereist bij het schrijven van code, maar om de breedte te beperken en de code leesbaarder te maken, is het raadzaam om dit wel te doen.

$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + "-" + `
$volInfo.VolumeSerialNumber.SubString(4, 4)

Nu u een $volInfo-object hebt, kunt u de DIR-headerinformatie naar het scherm schrijven. Als het station geen naam heeft, zal de tekst die naar het scherm wordt geschreven enigszins afwijken van de tekst die naar het scherm wordt geschreven als het station wel een naam heeft. Een eenvoudige If-Else-instructie wordt gebruikt om te controleren of de eigenschap VolumeName een lege tekenreeks is. De Write-Host-instructie wordt gebruikt om elke tekstregel naar het scherm te schrijven.

If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")

Het teken "`n" aan het begin en einde van de opdracht Write-Host wordt gebruikt om een ​​nieuwe regel voor en na de tekst in te voegen. De opdracht Write-Host voegt een nieuwe regel toe aan het einde van elke regel. Het effect van "`n" is dus dat er een lege regel voor en na de tekst ontstaat.

Heb je de "-eq" in de opdracht If opgemerkt? Het is een vergelijkingsoperator voor gelijkheid. De onderstaande tabel toont je alle vergelijkingsoperatoren:

-eq, -ieq Vergelijk op
-ne, -ine Vergelijking is niet gelijk
-gt, -igt Vergelijk groter dan
-ge, -ige Vergelijk groter dan of gelijk aan
-lt, -ilt Vergelijk kleiner dan
-le, -ile Vergelijk kleiner dan of gelijk aan

Het teken -i vóór vergelijkingsoperatoren geeft aan dat de operator niet hoofdlettergevoelig is.

PowerShell en alles wat u moet weten over dit hulpprogramma
Figuur 3: Uitvoergegevens van het script dat u momenteel hebt

DIR.PS1: Lijst met bestanden/mappen

U bent nu klaar om de inhoud en eigenschappen van deze map weer te geven. Het eerste wat u moet doen, is de PowerShell-opdracht Get-ChildItem aanroepen om een ​​verzameling bestanden op te halen en deze als parameter aan het script door te geven. De opdracht Get-ChildItem haalt een verzameling bestands- en mapobjecten op, niet alleen hun namen, maar stuurt deze objecten ook rechtstreeks door naar de opdracht Sort-Object om ze te sorteren. Standaard sorteert de opdracht Sort-Object objecten op basis van de eigenschap Naam. U hoeft dus geen andere parameters op te geven. De gesorteerde verzameling objecten wordt vervolgens opgeslagen in een variabele met de naam $items.

$items = Get-ChildItem $args[0] | Sort-Object

Zodra u een verzameling bestands- en mapobjecten hebt, moet u deze doorlopen en de juiste eigenschappen weergeven. De opdracht hiervoor is ForEach. Voor elk bestand of elke map worden de volgende eigenschappen weergegeven: de datum en tijd van de laatste wijziging, de naam, lengte of grootte van het bestand. De vreemd uitziende strings tussen haakjes zijn .NET-stringopmaakcodes. Deze worden gebruikt om velden links/rechts uit te lijnen en datums, tijden en getallen op te maken. Het begrijpen van deze stringopmaakcodes is niet erg belangrijk, omdat ze niet essentieel zijn voor de aard van dit script.

Met de If-instructie bepaalt u of een object een directory is of niet. Als het eerste teken van het Mode-kenmerk "d" is, is het object een directory. Controleer dit nogmaals, want de code voor directories verschilt vaak van de code voor bestanden.

Let op de regel $totalDirs++ in de If-instructie. Dit is een teller die verantwoordelijk is voor het bijhouden van het aantal mappen. Er is ook een variabele $totalFiles die de totale grootte van alle bestanden bijhoudt. Deze waarden worden altijd berekend tijdens de uitvoering, maar ze worden pas weergegeven wanneer het bestand is opgenomen.

ForEach ($i In $items)
{
$date = "{0, -20:MM/dd/yyyy hh:mm tt}" -f $i.LastWriteTime
$file = $i.Name
If ($i.Mode.SubString(0, 1) -eq "d")
{
$totalDirs++
$list = $date + " {0, -15}" -f "
" + " " + $file
}
Else
{
$totalFiles++
$size = "{0, 18:N0}" -f $i.Length
$list = $date + $size + " " + $file
}
$totalSize += $i.Length
Write-Host $list
}

PowerShell en alles wat u moet weten over dit hulpprogramma
Figuur 4: Geeft de uitvoergegevens van het bijgewerkte script weer.

DIR.PS1: Voettekst

Het enige wat u nu nog hoeft te doen, is het totale aantal bestanden, mappen, de totale grootte van alle bestanden en de vrije ruimte op deze schijfpartitie naar het scherm schrijven. Hiervoor gebruikt u de tellervariabelen ($totalFiles, $totalDirs, $totalSize) die u in de vorige sectie hebt aangemaakt. U kunt de hoeveelheid vrije ruimte aflezen met de variabele $volInfo die u aan het begin van het script hebt aangemaakt.

Write-Host ("{0, 16:N0}" -f $totalFiles + " File(s)" + `
"{0, 15:N0}" -f $totalSize + " bytes")
Write-Host ("{0, 16:N0}" -f $totalDirs + " Dir(s)" + `
"{0, 16:N0}" -f $volInfo.FreeSpace + " bytes free`n")

PowerShell en alles wat u moet weten over dit hulpprogramma
Figuur 5: Geeft de volledige uitvoergegevens van het script weer.

Voorspellingen en verbeteringen kunnen worden

Hoewel het script dat u maakt vrijwel identieke uitvoer produceert als de opdracht CMD.EXE DIR, zijn er enkele aandachtspunten waar u rekening mee moet houden en een aantal verbeteringen die u kunt doorvoeren.

  • Dit script voert geen foutcontrole uit.
  • Als er geen geldig pad aan het script wordt doorgegeven, mislukt het script en verschijnt er een PowerShell-foutmelding.
  • Het totale aantal mappen in het script is 2 minder dan het resultaat van de opdracht CMD.EXE DIR, omdat de opdracht Get-ChildItem de twee mappen “.” en “..” zoals in CMD.EXE niet telt.
  • Uw script sorteert alleen op bestandsnaam en mapnaam en biedt geen andere sortering op kenmerken.
  • Uw script kan niet de inhoud van de map en alle submappen weergeven.

Hoe PowerShell u helpt alles op uw pc te automatiseren

Schrijf eenvoudige PowerShell-scripts

Met PowerShell kun je bijna alles automatiseren, zoals het batchgewijs hernoemen van bestanden voor consistentie of het automatisch starten van applicaties. Laten we een paar eenvoudige Windows PowerShell-scripts schrijven om te zien hoe het werkt.

Let op : Als u een fout tegenkomt bij het uitvoeren van het script met betrekking tot het uitvoeringsbeleid, moet u mogelijk tijdelijk toestaan ​​dat het script wordt uitgevoerd door 'Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass' uit te voeren.

Bestanden in een map batchgewijs hernoemen

U kunt PowerShell gebruiken om bestanden op uw pc te kopiëren, verplaatsen en verwijderen. U kunt ook bestanden van een specifiek bestandstype in bulk hernoemen. Zo kunt u bijvoorbeeld meerdere tekstbestanden hernoemen door het voorvoegsel 'oldco' in hun bestandsnamen te vervangen door 'newco':

Get-ChildItem -Path "C:\CompanyFiles" -Filter "*.txt" | Rename-Item -NewName {$_.Name -replace "oldco","newco"}

In het bovenstaande script is ".txt" het filter voor bestandsextensies. U kunt dit aanpassen en instellen op .jpg, .docx, enz. om naar verschillende bestandstypen te zoeken.

Automatische start applicatie

Als u elke dag dezelfde toepassingen opent, kunt u een PowerShell-script schrijven om ze met één klik te starten:

#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"

Plak het script in een Kladblok-bestand en sla het op als LaunchFavoriteApps.ps1. Dubbelklik vervolgens op het bestand om alle apps te starten die in het script staan ​​vermeld.

Belangrijke bestanden kopiëren naar een back-uplocatie

U kunt regelmatig een back-up maken van belangrijke bestanden naar een back-uplocatie met behulp van het volgende script. Zorg ervoor dat u de bron- en doelpaden indien nodig wijzigt:

#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse

Schrijf een PowerShell-script om bestanden dagelijks automatisch te organiseren

Omdat er dagelijks veel verschillende bestandstypen worden gedownload, kan de map Downloads snel vol raken met allerlei bestanden die her en der verspreid staan. Om dit te verhelpen, kunnen we een PowerShell-script schrijven dat gedownloade bestanden aan het einde van elke dag in mappen sorteert op bestandstype.

Open een nieuw Kladblok-bestand en plak het volgende script. Zorg ervoor dat het pad naar de bronmap in het script overeenkomt met het pad naar de map Downloads:

# Change the source folder path below
$sourcePath = "E:\Downloads"
# Add file mapping folder names; the Others folder includes all the files that do not match file types in the other categories
$fileTypes = @{
"Documents" = @("*.docx", "*.pdf", "*.txt")
"Images" = @("*.jpg", "*.png", "*.gif")
"Media" = @("*.mp4", "*.mp3", "*.mov")
"Zip" = @("*.zip", "*.rar")
"ISO" = @("*.iso")
"Others" = @("*")
}
# Iterate through each folder type and prepare a destination folder for organizing files
foreach ($folder in $fileTypes.Keys) {
# Create the destination folder path
$destPath = Join-Path -Path $sourcePath -ChildPath $folder
# Check if the destination folder exists, and create it if it doesn't
if (!(Test-Path -Path $destPath)) {
New-Item -ItemType Directory -Path $destPath | Out-Null
}
# Move matching files from the source folder to the destination folder based on file type patterns
foreach ($pattern in $fileTypes[$folder]) {
Get-ChildItem -Path $sourcePath -Filter $pattern -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
Move-Item -Path $_.FullName -Destination $destPath -Force -ErrorAction Stop
Write-Output "Moved: $($_.FullName) to $destPath"
} catch {
Write-Warning "Failed to move file: $($_.FullName). Error: $_"
}
}
}
}
Write-Output "Files organized successfully!"

Om het bestand op te slaan, klikt u op Bestand > Opslaan als en voert u OrganizeDownloadsFolder.ps1 in als bestandsnaam. Klik vervolgens op Opslaan als type en selecteer Alle bestanden . Dubbelklik op het bestand OrganizeDownloadsFolder.ps1 om het script uit te voeren.

Taken plannen en uitvoeren

Het schrijven van een script is natuurlijk één onderdeel van het automatiseringsproces. Het tweede onderdeel is ervoor zorgen dat het script automatisch kan worden uitgevoerd om de taak uit te voeren. Hiervoor kunnen we geplande taken aanmaken om het script dagelijks of naar behoefte uit te voeren.

Open PowerShell, kopieer en plak het volgende script en druk op Enter . Zorg ervoor dat u 'J:\OrganizeDownloadsFolder.ps1' vervangt door het volledige bestandspad naar uw OrganizeDownloadsFolder.ps1 -script.

$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File 'J:\OrganizeDownloadsFolder.ps1'"
$trigger = New-ScheduledTaskTrigger -Daily -At "5:00 PM"
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "OrganizeDownloadsFolderDaily"

Druk op Enter als u klaar bent . Het script maakt een geplande taak aan in Taakplanner om het bestandsorganisatiescript elke dag om 17:00 uur uit te voeren. Als u een ander tijdstip prefereert, kunt u dit in het bovenstaande script wijzigen.

Daarnaast kunt u PowerShell gebruiken om andere dagelijkse taken te automatiseren, zoals een script voor ruimtebewaking dat u waarschuwt wanneer u geen vrije ruimte meer hebt op uw primaire schijf, het met een wachtwoord beveiligen van batches PDF-documenten en zelfs het toepassen van live-achtergronden uit uw map met afbeeldingen.

Hoewel PowerShell een krachtige hulpprogramma- en scripttaal is, kost het wat tijd om het te begrijpen en te gebruiken, vooral als je niet bekend bent met de .NET Framework-omgeving. Ik hoop dat dit artikel en het voorbeeldscript nuttig zijn voor iedereen die PowerShell wil begrijpen. Maar het voorbeeldscript in het artikel is vrij eenvoudig. Ik denk dat het completer kan worden gebouwd en ontwikkeld voor complexere toepassingen.

Tags: #System
Sign up and earn $1000 a day ⋙

Leave a Comment

Hoe u de Kernel Data Inpage-fout op Windows kunt oplossen

Hoe u de Kernel Data Inpage-fout op Windows kunt oplossen

Kernel Data Inpage Error (stopcode 0x0000007a) wordt veroorzaakt door slechte sectoren, virussen, harde schijven of defect RAM.

Windows-beveiliging openen in Windows 10

Windows-beveiliging openen in Windows 10

Windows-beveiliging is ingeschakeld en beschermt uw apparaat proactief door te scannen op malware, virussen en andere beveiligingsbedreigingen.

Hoe u de computerconfiguratie eenvoudig en snel kunt bekijken

Hoe u de computerconfiguratie eenvoudig en snel kunt bekijken

Er zijn verschillende manieren om de configuratie van uw computer en laptop te bekijken.

Functietoetsen repareren die niet werken in Windows 10

Functietoetsen repareren die niet werken in Windows 10

Met de Fn-functietoetsen kunt u bepaalde hardwarefuncties sneller en eenvoudiger bedienen.

Hoe verwijder je de gele driehoekwaarschuwing op een Windows C-schijf?

Hoe verwijder je de gele driehoekwaarschuwing op een Windows C-schijf?

Deze indicator die niet op zijn plaats is, betekent meestal dat BitLocker-versleuteling is uitgeschakeld, dat een update een herstart vereist of dat er een firmware-upgrade wacht.

6 manieren om Computer-/Systeemeigenschappen te openen in Windows 10

6 manieren om Computer-/Systeemeigenschappen te openen in Windows 10

U kunt een van de volgende 6 methoden gebruiken om Computereigenschappen (of Systeemeigenschappen) te openen in Windows 10.

Hoe u het wifi-netwerk van een gast kunt vergrendelen, zodat niemand u kan bespioneren

Hoe u het wifi-netwerk van een gast kunt vergrendelen, zodat niemand u kan bespioneren

Als u uw gast-Wi-Fi-netwerk goed vergrendelt, kunt u uw internetverbinding delen met bezoekers zonder dat u andere informatie hoeft te delen.

3 manieren om de Windows 11-firewall uit te schakelen

3 manieren om de Windows 11-firewall uit te schakelen

In dit artikel legt WebTech360 uit hoe u de firewall in Windows 11 uitschakelt.

Kleine veranderingen zorgen ervoor dat trage Windows-computers aanzienlijk sneller worden

Kleine veranderingen zorgen ervoor dat trage Windows-computers aanzienlijk sneller worden

Toen je je computer kocht, startte hij binnen enkele seconden op en werkte hij als een zonnetje. Maar in de loop der tijd is er veel veranderd.

Hoe u tijdelijke bestanden kunt repareren die veel ruimte op uw computer innemen

Hoe u tijdelijke bestanden kunt repareren die veel ruimte op uw computer innemen

Dit document gaat over het verwijderen van .tmp-bestanden, niet over het wissen van uw internetgeschiedenis of browsercache.

Achtergrondapps uitschakelen in Windows 11 en het RAM-verbruik in Windows 11 verminderen

Achtergrondapps uitschakelen in Windows 11 en het RAM-verbruik in Windows 11 verminderen

U kunt achtergrondapps van Windows 11 uitschakelen om de prestaties te optimaliseren, de batterij te sparen en het RAM-verbruik te verminderen.

VPN installeren en gebruiken op Windows 11

VPN installeren en gebruiken op Windows 11

Door een VPN te installeren, blijft uw Windows 11-computer veiliger.

8 snelkoppelingen voor Windows-toegankelijkheid die nieuwe opties voor iedereen ontsluiten

8 snelkoppelingen voor Windows-toegankelijkheid die nieuwe opties voor iedereen ontsluiten

Windows biedt een aantal handige toegankelijkheidsopties, ideaal voor het aanpassen van de interface van uw pc, het verbeteren van uw comfort en zelfs het volledig handsfree bedienen.

12 manieren om snel toegang te krijgen tot Instellingen in Windows 10

12 manieren om snel toegang te krijgen tot Instellingen in Windows 10

In Windows 10 heeft Microsoft een nieuwe applicatie geïntegreerd, genaamd Instellingen. Deze applicatie is een Metro-applicatie die door Microsoft is ontwikkeld ter vervanging van de klassieke Configuratiescherm-applicatie.

Grote mappen op Windows verwijderen met CMD

Grote mappen op Windows verwijderen met CMD

Grote mappen op het systeem zijn een van de boosdoeners die veel systeemruimte in beslag nemen. Veel mappen die u aanmaakt, komen na verwijdering na verloop van tijd weer terug. Misschien zijn het ongewenste mappen die u probeert te verwijderen.

Hoe u de Kernel Data Inpage-fout op Windows kunt oplossen

Hoe u de Kernel Data Inpage-fout op Windows kunt oplossen

Kernel Data Inpage Error (stopcode 0x0000007a) wordt veroorzaakt door slechte sectoren, virussen, harde schijven of defect RAM.

Windows-beveiliging openen in Windows 10

Windows-beveiliging openen in Windows 10

Windows-beveiliging is ingeschakeld en beschermt uw apparaat proactief door te scannen op malware, virussen en andere beveiligingsbedreigingen.

Hoe u de computerconfiguratie eenvoudig en snel kunt bekijken

Hoe u de computerconfiguratie eenvoudig en snel kunt bekijken

Er zijn verschillende manieren om de configuratie van uw computer en laptop te bekijken.

Functietoetsen repareren die niet werken in Windows 10

Functietoetsen repareren die niet werken in Windows 10

Met de Fn-functietoetsen kunt u bepaalde hardwarefuncties sneller en eenvoudiger bedienen.

Hoe verwijder je de gele driehoekwaarschuwing op een Windows C-schijf?

Hoe verwijder je de gele driehoekwaarschuwing op een Windows C-schijf?

Deze indicator die niet op zijn plaats is, betekent meestal dat BitLocker-versleuteling is uitgeschakeld, dat een update een herstart vereist of dat er een firmware-upgrade wacht.

6 manieren om Computer-/Systeemeigenschappen te openen in Windows 10

6 manieren om Computer-/Systeemeigenschappen te openen in Windows 10

U kunt een van de volgende 6 methoden gebruiken om Computereigenschappen (of Systeemeigenschappen) te openen in Windows 10.

Hoe u het wifi-netwerk van een gast kunt vergrendelen, zodat niemand u kan bespioneren

Hoe u het wifi-netwerk van een gast kunt vergrendelen, zodat niemand u kan bespioneren

Als u uw gast-Wi-Fi-netwerk goed vergrendelt, kunt u uw internetverbinding delen met bezoekers zonder dat u andere informatie hoeft te delen.

3 manieren om de Windows 11-firewall uit te schakelen

3 manieren om de Windows 11-firewall uit te schakelen

In dit artikel legt WebTech360 uit hoe u de firewall in Windows 11 uitschakelt.

Kleine veranderingen zorgen ervoor dat trage Windows-computers aanzienlijk sneller worden

Kleine veranderingen zorgen ervoor dat trage Windows-computers aanzienlijk sneller worden

Toen je je computer kocht, startte hij binnen enkele seconden op en werkte hij als een zonnetje. Maar in de loop der tijd is er veel veranderd.

Hoe u tijdelijke bestanden kunt repareren die veel ruimte op uw computer innemen

Hoe u tijdelijke bestanden kunt repareren die veel ruimte op uw computer innemen

Dit document gaat over het verwijderen van .tmp-bestanden, niet over het wissen van uw internetgeschiedenis of browsercache.

Achtergrondapps uitschakelen in Windows 11 en het RAM-verbruik in Windows 11 verminderen

Achtergrondapps uitschakelen in Windows 11 en het RAM-verbruik in Windows 11 verminderen

U kunt achtergrondapps van Windows 11 uitschakelen om de prestaties te optimaliseren, de batterij te sparen en het RAM-verbruik te verminderen.

VPN installeren en gebruiken op Windows 11

VPN installeren en gebruiken op Windows 11

Door een VPN te installeren, blijft uw Windows 11-computer veiliger.

8 snelkoppelingen voor Windows-toegankelijkheid die nieuwe opties voor iedereen ontsluiten

8 snelkoppelingen voor Windows-toegankelijkheid die nieuwe opties voor iedereen ontsluiten

Windows biedt een aantal handige toegankelijkheidsopties, ideaal voor het aanpassen van de interface van uw pc, het verbeteren van uw comfort en zelfs het volledig handsfree bedienen.

12 manieren om snel toegang te krijgen tot Instellingen in Windows 10

12 manieren om snel toegang te krijgen tot Instellingen in Windows 10

In Windows 10 heeft Microsoft een nieuwe applicatie geïntegreerd, genaamd Instellingen. Deze applicatie is een Metro-applicatie die door Microsoft is ontwikkeld ter vervanging van de klassieke Configuratiescherm-applicatie.

Grote mappen op Windows verwijderen met CMD

Grote mappen op Windows verwijderen met CMD

Grote mappen op het systeem zijn een van de boosdoeners die veel systeemruimte in beslag nemen. Veel mappen die u aanmaakt, komen na verwijdering na verloop van tijd weer terug. Misschien zijn het ongewenste mappen die u probeert te verwijderen.