PowerShell en alles wat u moet weten over dit hulpprogramma

Stel je eens voor dat je pc saaie taken voor je zou kunnen uitvoeren? Met Windows PowerShell is dit mogelijk. Hier leest u hoe u PowerShell kunt gebruiken om dagelijkse, repetitieve taken te automatiseren die niemand steeds opnieuw wil uitvoeren.

Inhoudsopgave

Wat is PowerShell?

Microsoft PowerShell is een opdrachtregelhulpprogramma en scripttaal. Het is een krachtig hulpmiddel voor beheerders waarmee u een groot aantal taken voor computers en netwerken kunt automatiseren. PowerShell bevat onderdelen van de opdrachtprompt en is gebaseerd op het .NET Framework. Als u over WebTech360 leest, moet u weten dat PowerShell het hulpmiddel bij uitstek is voor IT-beheerders voor het beheer van grote netwerken.

Door te leren hoe u PowerShell kunt gebruiken, worden veel saaie, alledaagse taken eenvoudiger. U kunt ook systeembrede wijzigingen via het netwerk doorvoeren zonder dat u elke server afzonderlijk hoeft aan te passen. PowerShell wordt een essentieel onderdeel van het uitvoeren van hybride cloudomgevingen .

PowerShell biedt veel verschillende toepassingen waarmee u efficiënter kunt werken en uw netwerk optimaal kunt laten functioneren. De meest basale toepassingen zijn onder meer: ​​het plannen van dagelijkse updates op systemen, het genereren van rapporten voor huidige processen, periodieke services en meer. Het klopt dat veel van deze taken via de GUI kunnen worden uitgevoerd, maar het doel van PowerShell is om ze sneller uit te voeren.

Als u een regelmatige onderhoudstaak hebt die een paar minuten duurt om in te stellen, kunt u dezelfde functionaliteit scripten in een enkele, benoemde PowerShell-opdracht. De volgende keer dat u dat script opent, wordt het op de achtergrond uitgevoerd. Wanneer u de scriptlogica van PowerShell onder de knie krijgt, begrijpt hoe objecten en variabelen werken en deze op een intelligente manier in uw netwerk implementeert, zult u zich afvragen waarom u PowerShell niet eerder hebt gebruikt.

In deze tutorial worden de basisbeginselen van PowerShell behandeld. Dit is handig voor mensen die nog niet zo bekend zijn met IT, vooral als u bekend bent met de Windows-opdrachtprompt. In dit artikel leggen we uit hoe u basishulpmiddelen en opdrachten gebruikt, hoe u bestanden en mappen bewerkt, hoe u objecten begrijpt, hoe u variabelen gebruikt en hoe u 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 componenten van zijn DOS-voorganger (COMMAN.COM) erfde, was het nog steeds gebaseerd op een vrij 'primitieve' scripttaal: het maakte gebruik van Windows Command-bestanden (.CMD en .BAT). De toevoeging van Windows Scripting Host en de talen VBScript en JScript hebben de scriptmogelijkheden van het hulpprogramma aanzienlijk uitgebreid.

Deze technologieën vormen een uitgebalanceerde mix van geavanceerde opdrachtregelhulpprogramma's en scriptomgevingen. Eigenlijk is de vraag hoeveel CMD.EXE-, .CMD- en Windows Scripting Host-bestanden gemanipuleerd kunnen worden, niet zozeer het echte probleem. Waar mensen het meest over klagen en zich zorgen over maken is het uitvoeren van ogenschijnlijk eenvoudige taken.

Met behulp van het "raamwerk" van opdrachtregel- en scripthulpmiddelen vereist elk matig uitgebreid script een combinatie van batchopdrachten, Windows Scripting Host en zelfstandige uitvoerbare bestanden. Elk script gebruikt verschillende conventies voor het uitvoeren, opvragen, parseren en retourneren van gegevens.

De zwakke ondersteuning voor variabelen in CMD.EXE, inconsistente interfaces en beperkte toegang tot Windows-instellingen, gecombineerd met een andere zwakte, maken opdrachtregelscripts lastiger te implementeren en te gebruiken. U vraagt ​​zich wellicht af wat hier de ‘andere zwakte’ is? Houd er rekening mee dat dit platte tekst is. Bij deze technologieën is alles in tekstvorm. De uitvoer van een opdracht of script is tekst en moet worden geparseerd en opnieuw worden geformatteerd om als invoer te kunnen dienen voor de volgende opdracht. Dit is het basisuitgangspunt dat PowerShell van alle traditionele shells overneemt.

Introductie van PowerShell-hulpprogramma's, opdrachten en modules

De drie concepten die in dit gedeelte worden geïntroduceerd, vormen slechts de basisbeginselen voor het begrijpen van de belangrijkste concepten die de basis vormen van PowerShell. U zult meer tijd moeten besteden aan het leren en beheersen van geavanceerdere concepten wanneer u PowerShell-opdrachten aanpakt.

PowerShell-hulpprogramma's

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

Momenteel is WMF 5.1 de nieuwste aanbevolen versie. In sommige gevallen zijn nieuwe functies naast de WMF-versie ook afhankelijk van het besturingssysteem. 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, automatisch aanvullen van opdrachten en piping zijn beschikbaar via de PowerShell-console.

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

cmdlets in PowerShell

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

Het eerste is de mogelijkheid om eenvoudig namen van cmdlets af te leiden, of ze in ieder geval gemakkelijker vindbaar te maken. PowerShell-opdrachten of cmdlets zijn bovendien ontworpen om gemakkelijker te kunnen worden gebruikt, met gestandaardiseerde syntaxis. Hierdoor kunt u eenvoudiger scripts maken via de opdrachtregelinterface.

De cmdlets gebruiken de Verb-Self-Item-indeling, zoals Get-Service, Stop-Service of Import-Csv. Het werkwoordelijke deel van de naam van een cmdlet geeft aan welke actie 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 . Om iets te bewerken begint de opdracht meestal met het werkwoord Set . Om ergens een nieuwe entiteit toe te voegen, begint de opdracht meestal met Add of New .

Ten tweede krijgen veelgebruikte parameters in PowerShell ook gestandaardiseerde namen. 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 om een ​​opdracht als een specifieke gebruiker uit te voeren.

Modules in PowerShell

U kunt aliassen gebruiken voor zowel cmdlets als parameters om toetsaanslagen te besparen en zo de totale lengte van de opdracht te verkorten (erg handig als u meerdere opdrachten aan elkaar koppelt). Hoewel deze aliassen niet altijd de standaardnaamgevingsconventies gebruiken, weerspiegelen ze nog steeds traditionele opdrachtregelhulpprogramma's.

In PowerShell komen aliassen zoals DIR, CD, DEL en CLS respectievelijk overeen met 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 een alias krijgen 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. Dat kan gaan om het verplaatsen van een map naar een andere locatie op de server, het archiveren van logbestanden of het zoeken naar grote bestanden. Als dezelfde bewerkingen op meerdere bestanden worden herhaald, kunt u deze op een effectieve manier automatiseren met PowerShell. Zo bespaart u tijd.

Om bestanden en mappen te vinden, was een van de eerste opdrachtregelprogramma's die een beheerder vroeger leerde, de opdracht dir. Dir geeft een overzicht van de bestanden en mappen in de opgegeven map.

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 via een pipe-opdracht kunt bewerken of de uitvoer aan een variabele kunt toewijzen.

Get-ChildItem kan eenvoudig worden gebruikt door een pad op te geven, via de pijplijn met behulp van de parameter -Path of direct na de naam van de cmdlet. Om het antwoord dat door Get-ChildItem wordt geretourneerd aan te passen, moeten we rekening 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 extra optie -Recurse , waarmee recursief wordt gezocht in de mappen die zich in de huidige map bevinden.

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

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

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

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

Controleren of het bestand bestaat

Wanneer u met bestanden werkt, hoeft u normaal gesproken 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, opgegeven met de optie -Destination.

Move-Item: Verplaats een bestand of map.

Wanneer directorystructuren worden 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 nodig , 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 grote hoeveelheden bestanden verwijdert . Met WhatIf kunt u zien wat er gebeurt als een script of opdracht wordt uitgevoerd en of dit mogelijk negatieve gevolgen heeft of dat belangrijke bedrijfsgegevens worden verwijderd. 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 die afhankelijke opdrachten hebben die handmatig worden uitgevoerd, kunt u overwegen om -Confirm te gebruiken . Hiermee kunt u gebruikersinteractie aanvragen voordat de actie daadwerkelijk plaatsvindt.

PowerShell-scripts = batchbestanden op steroïden

PowerShell zelf is geschreven in de .NET-taal en is grotendeels gebaseerd op het .NET Framework. Daarom is PowerShell ontworpen als een objectgeoriënteerd hulpprogramma en scripttaal. Alles in PowerShell wordt behandeld als een volledig functioneel .NET Framework-object. Een opdracht die een set objecten geeft die kunnen worden gebruikt met behulp van de eigenschappen en methoden van dat objecttype. Als u de uitvoer van de ene opdracht naar de andere wilt doorsturen, geeft PowerShell daadwerkelijk het object door en niet alleen de tekstuele uitvoer van de eerste opdrachtregel. Hierdoor krijgt de volgende opdracht volledige toegang tot alle eigenschappen en methoden van het object in de pijplijn.

Het behandelen van alles als een object en de mogelijkheid om objecten tussen opdrachten te accepteren, is een grote theoretische verandering voor opdrachtregelhulpprogramma's. PowerShell functioneert echter nog steeds als een traditioneel shell-hulpprogramma. Opdrachten, scripts en uitvoerbare bestanden kunnen worden getypt en uitgevoerd vanaf de opdrachtregel. De resultaten worden weergegeven in tekstformaat. Windows .CMD- en .BAT-bestanden, VBScripts, JScripts en uitvoerbare bestanden die binnen CMD.EXE worden uitgevoerd, worden allemaal nog steeds in PowerShell uitgevoerd. 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 uitvoeringen behandelen alles nog steeds als tekst, maar u kunt PowerShell combineren met een aantal andere technologieën. Dit is een erg belangrijk punt als u PowerShell wilt gaan gebruiken met een verzameling bestaande scripts die niet in één keer kunnen worden geconverteerd.

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 u alleen een specifieke voortgang wilt behalen? U kunt dit doen door parameters te gebruiken. Om bijvoorbeeld alle Slack-processen op te halen, kunt u 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 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, FileVersionInfo en andere algemene parameters. De symbolen hier betekenen:

Symbool

Naam

Betekenis

 

Trommel

Parameter accepteert geen invoer

-

Koppelteken

Geef 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 aangeven welk type gegevens ze nodig hebben, zoals een tekenreeks, een geheel getal, een Booleaanse waarde of een datum/tijd-waarde. Bijvoorbeeld het volgende commando:

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 Name gebruikt om de resultaten te verfijnen. Als u het echter wilt beperken tot een specifieker proces, kunt u de ID- parameter gebruiken . Hiervoor is volgens de syntaxis een geheel getal vereist.

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 behandelt alle gegevens als objecten. Om een ​​script te bouwen, doorlopen deze objecten een reeks cmdlets of functies die met elkaar verbonden zijn via het pijpsymbool (|). Het kiezen van de juiste cmdlets en het verbinden ervan in een logische volgorde met behulp van een pijplijn is belangrijk voor een efficiënt script.

Stel dat u een script maakt om de vijf bestanden die de meeste ruimte innemen in een map, te sorteren en weer te geven. Er zijn krachtigere manieren om een ​​bestandsorteringsscript te maken, maar de volgende eenvoudige manier 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 er een machtigingsfout optreedt, is de snelste oplossing om PowerShell met beheerdersrechten uit te voeren wanneer u uw script uitvoert.

Gefeliciteerd! U kunt nu een PowerShell PS1-script maken.

Voorbeeld van een PowerShell-script

Het lezen over en begrijpen van de wonderen van nieuwe technologie is één ding, maar deze ook daadwerkelijk gebruiken is een tweede! In de rest van dit artikel ontwikkelen we een PowerShell-script om de mogelijkheden en het gebruik ervan te demonstreren.

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

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

Wanneer u DIR uitvoert in PowerShell, verschijnt er ook een directoryoverzicht zoals in Afbeelding 2, maar het is net iets anders. PowerShell heeft geen DIR-opdracht, maar wel Get-ChildItem, dat dezelfde functie uitvoert. In PowerShell is DIR een alias voor Get-ChildItem. In dit bericht ga ik niet in op aliassen. U 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 bijgewerkt 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 platte tekstbestand 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 over de schijfpartitie wilt weten, moet u Windows Management Instrumentation (WMI) gebruiken. De details van WMI vallen buiten het bestek van dit artikel. Daarom zullen we ze hier niet behandelen. De PowerShell-code hieronder is echter eenvoudig te begrijpen, zonder dat u WMI-hulp nodig hebt. U kunt een variabele “$filter” maken voor gebruik met de opdracht Get-WmiObject. Met deze filtervariabele vertelt u de opdracht Get-WmiObject dat u alleen informatie over een specifiek station wilt. Het resultaat van de opdracht Get-WmiObject wordt opgeslagen in een variabele met de naam $volInfo. Onthoud dat in PowerShell alles een object is; $volInfo is nu ook een resultaatobject 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. De geretourneerde informatie is een tekenreeks van 8 tekens. Meestal wilt u het echter opmaken als vier afzonderlijke getallen, gescheiden door een koppelteken. kan op een soortgelijke manier worden gedaan als in de onderstaande regel. Het koppelteken aan het einde van de eerste regel is het regelvoortzettingsteken in PowerShell. Het vertelt PowerShell in feite dat de regel niet is afgebroken, maar dat deze de volgende regel bevat. Bij het schrijven van code is het niet nodig om regels te scheiden, maar om de breedte te beperken en de code gemakkelijker leesbaar te maken, kunt u dit wel doen.

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

Nu u het $volInfo-object hebt, kunt u de DIR-headerinformatie naar het scherm schrijven. Als het station geen naam heeft, zal de tekst op het scherm iets anders zijn dan als het station wel een naam heeft. Met een eenvoudige If-Else-instructie kunt u controleren of de eigenschap VolumeName een lege tekenreeks is. Met de opdracht Write-Host kunt u afzonderlijke opdrachten naar het scherm 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 nieuwe regels voor en na de tekst in te voegen. Met de opdracht Write-Host wordt aan het einde van elke regel een nieuwe regel toegevoegd. Het effect van “`n” is dat er lege regels ontstaan ​​voor en na de tekstregel.

Heb je de “-eq” in de If-opdracht opgemerkt? Het is een gelijkheidsvergelijkingsoperator. In de onderstaande tabel ziet u 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

Nu bent u klaar om de inhoud en eigenschappen van deze map weer te geven. Het eerste dat u moet doen, is de PowerShell-opdracht Get-ChildItem aanroepen om een ​​set bestanden op te halen en deze als parameter in het script door te geven. Met de opdracht Get-ChildItem wordt een verzameling bestands- en mapobjecten opgehaald, niet alleen hun namen, maar worden deze objecten ook rechtstreeks doorgestuurd 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 te beschrijven. De gesorteerde set 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 ze doorlopen en de juiste kenmerken weergeven. Het commando dat hiervoor gebruikt wordt is ForEach. Voor elk bestand of elke map worden de volgende kenmerken weergegeven: de datum en tijd van de laatste update, de naam, de lengte of de bestandsgrootte. De vreemd uitziende strings tussen haakjes zijn .NET-stringindelingscodes. Ze worden gebruikt om velden links/rechts uit te lijnen en datums, tijden en getallen te formatteren. Het begrijpen van deze codes voor de tekenreeksopmaak is niet zo belangrijk, omdat ze niet essentieel zijn voor de aard van dit script.

Met de opdracht If 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 die voor mappen wordt geschreven, verschilt vaak van de code die voor bestanden wordt geschreven.

Let op de regel $totalDirs++ in de If-instructie. Dit is de teller die het aantal mappen bijhoudt. Op vergelijkbare wijze bestaat er een variabele $totalFiles die wordt gebruikt om de totale grootte van alle bestanden bij te houden. Deze waarden worden altijd berekend tijdens de uitvoering. Maar ze worden pas weergegeven als het bestandweergaveproces is voltooid.

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 dat u nu nog hoeft te doen, is het totale aantal bestanden, de mappen, de totale grootte van alle bestanden en de vrije ruimte op deze schijfpartitie naar het scherm schrijven. Hiervoor moet u de tellervariabelen ($totalFiles, $totalDirs, $totalSize) gebruiken die u in de vorige sectie hebt gemaakt. Hoeveel vrije ruimte er beschikbaar is, kunt u aflezen uit de variabele $volInfo die aan het begin van het script is 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 "." niet telt. en “..” zoals in CMD.EXE.
  • 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 kunt u vrijwel alles automatiseren, bijvoorbeeld het batchgewijs hernoemen van bestanden voor consistentie of het automatisch starten van toepassingen. 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 batch hernoemen. Hier ziet u bijvoorbeeld hoe u meerdere tekstbestanden kunt hernoemen door het voorvoegsel 'oldco' in de 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 bestandsextensiefilter. U kunt het 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 Kladblokbestand en sla het op als LaunchFavoriteApps.ps1. Dubbelklik vervolgens op het bestand om alle in het script vermelde toepassingen te starten.

Belangrijke bestanden kopiëren naar een back-uplocatie

U kunt belangrijke bestanden periodiek back-uppen 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 elke dag zoveel verschillende soorten bestanden worden gedownload, kan de map Downloads snel vol raken met allerlei verspreide bestanden. Om dit probleem op te lossen, kunnen we een PowerShell-script schrijven dat de 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 u het pad naar de bronmap in het script wijzigt, zodat het 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

Natuurlijk is scripting onderdeel van het automatiseringsproces. Het tweede deel is om ervoor te zorgen dat het script automatisch kan worden uitgevoerd om de taak uit te voeren. Om dit te doen, kunnen we geplande taken maken die het script dagelijks of naar behoefte uitvoeren.

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"

Als u klaar bent, drukt u op Enter . Het script maakt een geplande taak aan in Taakplanner om het script voor bestandsorganisatie elke dag om 17:00 uur uit te voeren. Als u een andere tijd wenst, kunt u deze 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 scripttaal en hulpprogramma is, kost het niet veel tijd om deze onder de knie te krijgen en te gebruiken, vooral als u 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 script dat in het voorbeeld is gemaakt, is vrij eenvoudig. Geloof dat het uitgebreider gebouwd en ontwikkeld kan worden, zodat het beter geschikt is voor complexere toepassingen.

Sign up and earn $1000 a day ⋙

Leave a Comment

Verschil tussen gewone tv en smart-tv

Verschil tussen gewone tv en smart-tv

Smart-tv's hebben de wereld veroverd. Dankzij zoveel geweldige functies en internetverbinding heeft technologie de manier waarop we televisiekijken veranderd.

Waarom heeft de vriezer geen lampje, maar de koelkast wel?

Waarom heeft de vriezer geen lampje, maar de koelkast wel?

Koelkasten zijn vertrouwde apparaten in huishoudens. Koelkasten hebben meestal twee compartimenten. Het koelvak is ruim en heeft verlichting die automatisch aangaat wanneer de gebruiker het vak opent. Het vriesvak is smal en heeft geen verlichting.

2 manieren om netwerkcongestie te verhelpen die wifi vertraagt

2 manieren om netwerkcongestie te verhelpen die wifi vertraagt

Wi-Fi-netwerken worden niet alleen beïnvloed door routers, bandbreedte en interferentie, maar er zijn een aantal slimme manieren om uw netwerk te versterken.

Hoe u kunt downgraden van iOS 17 naar iOS 16 zonder gegevensverlies met Tenorshare Reiboot

Hoe u kunt downgraden van iOS 17 naar iOS 16 zonder gegevensverlies met Tenorshare Reiboot

Als u terug wilt naar de stabiele iOS 16 op uw telefoon, vindt u hier de basisgids voor het verwijderen van iOS 17 en downgraden van iOS 17 naar 16.

Wat gebeurt er met je lichaam als je elke dag yoghurt eet?

Wat gebeurt er met je lichaam als je elke dag yoghurt eet?

Yoghurt is een heerlijk voedingsmiddel. Is het goed om elke dag yoghurt te eten? Hoe verandert je lichaam als je elke dag yoghurt eet? Laten we het samen ontdekken!

Welk type rijst is het beste voor de gezondheid?

Welk type rijst is het beste voor de gezondheid?

In dit artikel worden de meest voedzame rijstsoorten besproken en hoe u de gezondheidsvoordelen van de rijst die u kiest, optimaal kunt benutten.

Hoe word je s ochtends op tijd wakker?

Hoe word je s ochtends op tijd wakker?

Een slaapschema en bedtijdroutine opstellen, uw wekker verzetten en uw dieet aanpassen zijn enkele maatregelen die u kunnen helpen om beter te slapen en 's ochtends op tijd wakker te worden.

Tips voor het spelen van Rent Please! Verhuurder Sim voor beginners

Tips voor het spelen van Rent Please! Verhuurder Sim voor beginners

Huren alstublieft! Landlord Sim is een simulatiespel voor mobiel op iOS en Android. Je speelt als verhuurder van een appartementencomplex en begint met het verhuren van een appartement. Je doel is om het interieur van je appartement te verbeteren en het gereed te maken voor huurders.

De nieuwste badkamertorenverdedigingscodes en hoe u deze invoert

De nieuwste badkamertorenverdedigingscodes en hoe u deze invoert

Ontvang de Roblox-gamecode voor Bathroom Tower Defense en wissel deze in voor geweldige beloningen. Ze helpen je bij het upgraden of ontgrendelen van torens met hogere schade.

Structuur, symbolen en werkingsprincipes van transformatoren

Structuur, symbolen en werkingsprincipes van transformatoren

Laten we op de meest nauwkeurige manier de structuur, symbolen en werkingsprincipes van transformatoren leren kennen.

4 manieren waarop AI smart-tvs beter maakt

4 manieren waarop AI smart-tvs beter maakt

Van betere beeld- en geluidskwaliteit tot spraakbesturing en meer: ​​deze AI-functies maken smart-tv's zoveel beter!

Waarom ChatGPT beter is dan DeepSeek

Waarom ChatGPT beter is dan DeepSeek

Aanvankelijk hadden mensen hoge verwachtingen van DeepSeek. Deze AI-chatbot wordt op de markt gebracht als sterke concurrent van ChatGPT en belooft intelligente chatmogelijkheden en -ervaringen.

Maak kennis met Fireflies.ai: de gratis AI-secretaris die u uren werk bespaart

Maak kennis met Fireflies.ai: de gratis AI-secretaris die u uren werk bespaart

Het is gemakkelijk om belangrijke details te missen wanneer u andere belangrijke zaken opschrijft. Bovendien kan het maken van aantekeningen tijdens een gesprek afleidend werken. Fireflies.ai is de oplossing.

Hoe je een Axolotl in Minecraft grootbrengt en een Minecraft Salamander temt

Hoe je een Axolotl in Minecraft grootbrengt en een Minecraft Salamander temt

Axolot Minecraft is een geweldige assistent voor spelers die onderwater opereren, als ze maar weten hoe ze deze moeten gebruiken.

A Quiet Place: The Road Ahead PC-gameconfiguratie

A Quiet Place: The Road Ahead PC-gameconfiguratie

De configuratie van A Quiet Place: The Road Ahead wordt als zeer positief beoordeeld. Houd hier dus rekening mee voordat u besluit om te downloaden.