Terug naar de basis: Het begrijpen van PowerShell-objecten

PowerShell is een krachtige taal. Maar wat maakt deze scripttaal zo krachtig? PowerShell-objecten. Wat zijn deze magische objecten en hoe werkt PowerShell ermee? Blijf kijken om erachter te komen.

PowerShell is een objectgeoriënteerde taal en shell. Dit is een breuk met de traditionele shells zoals cmd en Bash. Deze traditionele shells richtten zich op tekst, ook wel bekend als strings, en hoewel ze nog steeds nuttig zijn, zijn ze beperkt in hun mogelijkheden. Bijna alles in PowerShell is een object.

In dit artikel leer je enkele belangrijke concepten als het gaat om objecten in PowerShell. Tegen het einde van dit artikel heb je geleerd hoe je deze kennis kunt toepassen op je eigen scripting via behulpzame voorbeeldcode en visualisaties.

Als je meer een visuele leerling bent, kun je gerust de bijbehorende video van dit artikel hieronder bekijken.

Dus maak je klaar! Je staat op het punt een gedenkwaardige ervaring tegemoet te gaan die je zal helpen het concept van objecten in PowerShell onder de knie te krijgen!

Vereisten

In dit artikel ga je aan de slag met het leren over objecten in PowerShell via een praktische aanpak. Als je ervoor kiest om mee te doen en de voorbeeldcode te proberen, zou Windows PowerShell 5.1 of enige versie van PowerShell 6+ moeten werken. Alle voorbeelden die je ziet, worden echter uitgevoerd op Windows 10 build 1903 met Windows PowerShell 5.1.

Begrip van de Anatomie van een Object

Objecten zijn overal in PowerShell. Misschien vraag je jezelf af “Hoe ziet een object eruit?” In deze eerste sectie krijg je een overzicht van waar een object uit bestaat. Zodra je een breed beeld hebt van wat een object tot een object maakt, kun je vervolgens wat voorbeelden van code bekijken!

Het ontdekken van objectleden met Get-Member

Objecten hebben veel verschillende soorten informatie die ermee geassocieerd worden. In PowerShell wordt deze informatie soms leden genoemd. Een objectlid is een generieke term die verwijst naar alle informatie die met een object geassocieerd is.

Om informatie over een object (leden) te ontdekken, kun je de Get-Member-cmdlet gebruiken. De Get-Member-cmdlet is een handige opdracht waarmee je beschikbare eigenschappen, methoden en dergelijke voor elk object in PowerShell kunt vinden.

Bijvoorbeeld, stel dat je leden wilt bekijken voor een specifiek object dat wordt teruggegeven via de Get-Service-cmdlet. Dit kun je doen door de uitvoer van de Get-Service-opdracht te leiden naar de Get-Member-cmdlet zoals hieronder te zien is.

language-powershell
Get-Service -ServiceName 'BITS' | Get-Member

Wen eraan om de Get-Member-cmdlet te gebruiken. Je gaat het veel gebruiken in dit artikel.

Elke opdracht in PowerShell die uitvoer produceert, kan worden geleid naar Get-Member. Onthoud alleen dat je deze cmdlet als allerlaatste in de pijplijn moet plaatsen, omdat deze de uitvoer zal overschrijven met zijn eigen uitvoer.

Objecttypes en klassen

Zonder al te veel in detail te treden over object georiënteerd programmeren, heeft elk object een “schema”. Het “schema” van een object is als een sjabloon dat de blauwdruk bevat om een object te maken. Die blauwdruk wordt een type genoemd.

Elk object in PowerShell heeft een specifiek type. Elk object heeft een blauwdruk waar het van is gemaakt. Een objecttype wordt gedefinieerd door een klasse. Neem bijvoorbeeld dit voorbeeld; 9 is een nummer, Bluegill is een vis, Labrador is een hond, etc. De klasse komt voor het type.

Objecten zijn instanties van klassen met een specifiek type.

Maak je geen zorgen over het diep ingaan op dit onderwerp. Tenzij je een softwareontwikkelaar bent, hoef je je waarschijnlijk niet te veel zorgen te maken over de semantiek op dit punt. Het is echter een belangrijk concept om op een basisniveau te kennen.

Eigenschappen

Het belangrijkste concept dat je moet begrijpen over objecten zijn eigenschappen. Eigenschappen zijn kenmerken die een object beschrijven. Een object kan veel verschillende eigenschappen hebben die verschillende kenmerken vertegenwoordigen.

Een van de gemakkelijkste manieren om te ontdekken welke eigenschappen er op objecten bestaan, is het gebruik van de Get-Member cmdlet. Je kunt hieronder zien dat door de MemberType parameter te gebruiken, Get-Member de uitvoer beperkt tot alleen objecten. Je ziet ook dat het het objecttype van System.ServiceProcess.ServiceController weergeeft.

PS51> Get-Service | Get-Member -MemberType Property
Get-Service object properties

Nu nemen we het voorbeeld van de eerder behandelde BITS-service en bekijken we de specifieke waarden van de eigenschappen van dat object met behulp van de onderstaande code. De Get-Member-cmdlet stelt je in staat om de namen van de eigenschappen te vinden, maar niet de waarden. Met de Select-Object-cmdlet van PowerShell kun je echter de eigenschapswaarden inspecteren.

Hieronder kun je zien dat StartType een eigenschap is van het object. Het object dat wordt teruggegeven, heeft veel verschillende leden, maar door de Select-Object-cmdlet te gebruiken, beperk je de uitvoer tot alleen die eigenschap.

PS51> Get-Service -ServiceName 'BITS' | Select-Object -Property 'StartType'
BITS service start type

Eigenschappen zijn veruit het meest voorkomende onderdeel van een object waarmee je in PowerShell zult werken.

Aliassen

Sommige eigenschappen hebben een MemberType van Alias. Aliassen zijn pseudoniemen voor eigendomsnamen. Ze kunnen eigenschappen soms een intuïtievere naam geven.

Je kunt een voorbeeld zien van een object met aliassen met behulp van de Get-Service-cmdlet, zoals hieronder getoond. De eigenschap Name is aliased naar ServiceName en RequiredServices is aliased naar de ServicesDependedOn-eigenschap.

PS51> Get-Service | Get-Member -MemberType 'AliasProperty'
AliasProperty members on service objects

Wanneer een eigenschap een alias heeft, kun je naar de waarde van die eigenschap verwijzen met behulp van de aliannaam in plaats van de daadwerkelijke eigenschapsnaam. In dit voorbeeld is een beschrijvend attribuut zoals Name en RequiredServices intuïtiever en gemakkelijker te typen dan ServiceName en ServicesDependedOn.

Je kunt hieronder een voorbeeld zien van het verwijzen naar deze aliassen.

# Gebruik de AliasProperty in plaats van een daadwerkelijke eigenschapsnaam
PS51> $Svc = Get-Service -ServiceName 'BITS' # Object waaraan je werkt
PS51> $Svc.Name
BITS
PS51> $Svc.RequiredServices

Je zou de volgende uitvoer moeten zien. Let op dat je de code kort, schoon en beknopt houdt. De informatie is hetzelfde, ongeacht of je de alias gebruikt of niet:

Properties on the BITS service object

Methoden

Eigenschappen zijn slechts een onderdeel dat een object creëert; methoden zijn ook een belangrijk concept om te begrijpen. Methoden zijn de handelingen die op een object kunnen worden uitgevoerd. Net als eigenschappen kun je methoden op een object ontdekken door de Get-Member-cmdlet te gebruiken.

Om de uitvoer van Get-Member te beperken tot alleen methoden, stel je de waarde van de parameter MemberType in op Method, zoals hieronder weergegeven.

PS51> Get-Service | Get-Member -MemberType 'Method'
Methods on service objects

Als beginner zul je methoden veel minder vaak gebruiken dan eigenschappen.

Andere MemberTypes

Eigenschappen, methoden en aliassen zijn niet de enige soorten leden die een object kan hebben. Ze zullen echter verreweg de meest voorkomende soorten leden zijn waarmee je zult werken.

Ter volledigheid volgen hieronder nog een paar andere soorten leden die je tegen zou kunnen komen.

  • Script-eigenschap – Deze worden gebruikt om eigenschapswaarden te berekenen.
  • Notitie-eigenschap – Deze worden gebruikt voor statische eigenschapsnamen.
  • Property Sets – Dit zijn als aliassen die precies bevatten wat de naam aangeeft; sets van eigenschappen. Bijvoorbeeld, je hebt een aangepaste eigenschap genaamd Specs gemaakt voor je functie Get-CompInfo. Specs is eigenlijk een subset van de eigenschappen Cpu, Mem, Hdd, IP. Het primaire doel van eigenschapsets is om een enkele eigenschapsnaam te bieden om een groep eigenschappen te concatenaten.

It is ook belangrijk om het concept van objectgebeurtenissen te vermelden. Gebeurtenissen vallen buiten de reikwijdte van dit artikel.

Werken met Objecten in PowerShell

Nu je een basisbegrip hebt van waaruit een object bestaat, laten we onze handen vuilmaken en wat code schrijven.

Veel PowerShell-opdrachten produceren uitvoer, maar soms hoef je niet alle uitvoer te zien. Je moet die uitvoer op de een of andere manier beperken of manipuleren. Gelukkig heeft PowerShell een paar verschillende opdrachten die je dat laten doen.

Laten we beginnen met een voorbeeld van het opsommen van alle services op de lokale computer met behulp van de Get-Service-cmdlet zoals hieronder getoond. Je kunt aan de uitvoer zien dat er veel verschillende services (objecten) worden geretourneerd.

PS51> Get-Service -ServiceName *
Using a wildcard on ServiceName parameter

Beheer van Teruggestuurde Objecteigenschappen

Als we doorgaan met het voorbeeld van Get-Service, wil je misschien niet elke eigenschap zien. In plaats daarvan wil je alleen de eigenschappen Status en DisplayName zien. Om eigenschappen te beperken, zou je de Select-Object-cmdlet gebruiken.

De Select-Object-cmdlet “filtert” verschillende eigenschappen zodat ze niet worden teruggegeven aan de PowerShell-pijplijn. Om objecteigenschappen te “filteren” en niet terug te geven, kunt u de Property-parameter gebruiken en een door komma’s gescheiden reeks van één of meer eigenschappen opgeven.

Hieronder ziet u een voorbeeld van het alleen teruggeven van de eigenschappen Status en DisplayName.

PS51> Get-Service -ServiceName * | Select-Object -Property 'Status','DisplayName'
Showing the Status and DisplayName properties

Objecten sorteren

Misschien bouwt u een rapport om services en hun status te tonen. Voor gemakkelijke informatieverwerking wilt u de objecten gesorteerd zien op basis van de waarde van de Status-eigenschap. U kunt de Sort-Object-cmdlet gebruiken om dit te doen.

De Sort-Object-cmdlet stelt u in staat om alle teruggegeven objecten te verzamelen en deze vervolgens uit te voeren in de door u gedefinieerde volgorde.

Bijvoorbeeld, met behulp van de Property-parameter van Sort-Object, kunt u een of meer eigenschappen opgeven op de binnenkomende objecten van Get-Service om op te sorteren. PowerShell zal elk object doorgeven aan de Sort-Object-cmdlet en ze vervolgens gesorteerd retourneren op basis van de waarde van de eigenschap.

Hieronder ziet u een voorbeeld van het retourneren van alle service-objecten gesorteerd op hun Status-eigenschap in aflopende volgorde met behulp van de Descending-schakelparameter van Sort-Object.

PS51> Get-Service -ServiceName * | Select-Object -Property 'Status','DisplayName' |
	Sort-Object -Property 'Status' -Descending
Using Sort-Object to sort service objects by Status in descending order

De pijp [ | ] in PowerShell is een van de weinige technieken voor regelcontinuatie die u moet gebruiken wanneer dat nodig is. Gebruik het in plaats van backticks.

Filteren van objecten

Misschien besluit je dat je niet alle services op een machine wilt zien. In plaats daarvan moet je de uitvoer beperken op basis van specifieke criteria. Een manier om het aantal teruggegeven objecten te filteren, is door gebruik te maken van de Where-Object cmdlet.

Terwijl de Select-Object cmdlet de uitvoer van specifieke eigenschappen beperkt, beperkt de Where-Object cmdlet de uitvoer van gehele objecten.

De Where-Object cmdlet is vergelijkbaar in functie met de SQL WHERE  clause. Het fungeert als een filter van de oorspronkelijke bron om alleen bepaalde objecten terug te geven die aan specifieke criteria voldoen.

Misschien heb je besloten dat je alleen objecten wilt terugkrijgen met een Status eigenschapswaarde van Running en alleen die met een DisplayName eigenschapswaarde die begint met A.

Je kunt zien in het volgende codefragment dat een Where-Object referentie is ingevoegd tussen Select-Object en Sort-Object in de pijplijnvolgorde. Door een scriptblokwaarde te gebruiken met een vereiste voorwaarde gecreëerd voor elk object om aan te voldoen via de FilterScript parameter, kun je elke gewenste query maken.

Bekijk de Format-Table cmdlet als je wilt manipuleren hoe de uitvoer wordt geretourneerd naar de console.

PS51> Get-Service * | Select-Object -Property 'Status','DisplayName' |
	Where-Object -FilterScript {$_.Status -eq 'Running' -and $_.DisplayName -like "Windows*" |
		Sort-Object -Property 'DisplayName' -Descending | Format-Table -AutoSize
Formatting object output

Tellen en Gemiddelden van Teruggegeven Objecten

De opdracht Get-Service retourneert vele verschillende objecten. Door gebruik te maken van de Where-Object cmdlet, heb je een deel van die objecten gefilterd, maar hoeveel? Maak kennis met de Measure-Object cmdlet.

De Measure-Object cmdlet is een PowerShell-opdracht die, naast andere wiskundige bewerkingen, kan tellen hoeveel objecten het ontvangt via de pipeline.

Misschien wil je weten hoeveel objecten uiteindelijk worden geretourneerd op het moment dat je gecombineerde opdrachten worden uitgevoerd. Je kunt de uiteindelijke output doorsturen naar de Measure-Object cmdlet om het totale aantal geretourneerde objecten te vinden zoals hieronder getoond.

PS51> Get-Service * | Select-Object -Property 'Status','DisplayName' |
	Where-Object {$_.Status -eq 'Running' -and $_.DisplayName -like "Windows*" |
		Sort-Object -Property 'DisplayName' -Descending | Measure-Object

Zodra de opdrachten klaar zijn met verwerken, zie je, in dit geval, dat er oorspronkelijk 21 objecten zijn geretourneerd die zijn gemaakt met de Get-Service cmdlet.

Finding the number of objects returned with Measure-Object

Misschien ben je alleen geïnteresseerd in het totale aantal geretourneerde objecten. Omdat de Measure-Object opdracht het totale aantal gevonden objecten retourneert via een Count eigenschap, kun je opnieuw verwijzen naar de Select-Object cmdlet. Maar dit keer, alleen de Count eigenschap retourneren.

PS51> Get-Service * | Select-Object -Property 'Status','DisplayName' |
	Where-Object {$_.Status -eq 'Running' -and $_.DisplayName -like "Windows*" |
		Sort-Object -Property 'DisplayName' -Descending |
			Measure-Object |
				# We beginnen opnieuw, eerst filteren, als laatste formatteren
				Select-Object -Property 'Count'
Only returning the count property

Actie ondernemen op objecten met Loops

Terwijl elk object wordt verwerkt via de pipeline, kun je actie ondernemen op elk object met een loop. Er zijn verschillende soorten loops in PowerShell, maar om bij de pipeline-voorbeelden te blijven, laten we eens kijken naar de ForEach-Object cmdlet.

De ForEach-Object cmdlet stelt je in staat om actie te ondernemen op elk object dat erdoorheen stroomt. Dit gedrag wordt het beste uitgelegd aan de hand van een voorbeeld.

Verdergaand met een voorbeeld van Get-Service, misschien wilt u alle services op een Windows-computer vinden met een naam die begint met “Windows” en die actief zijn. Met behulp van de Where-Object cmdlet kunt u de voorwaarden creëren zoals u eerder hebt gedaan.

Where-Object -FilterScript {$_.DisplayName -Like "Windows*" -and $_.Status -eq 'Running'}

Maar nu in plaats van volledige objecten of zelfs een paar eigenschappen terug te geven, wilt u de string <ServiceName> is running retourneren voor elk object met behulp van de code **Write-Host -ForegroundColor 'Yellow' <ServiceName> "is running".

U manipuleert nu de output en maakt uw eigen string aan. De enige manier om dat te doen is door de ForEach-Object cmdlet te gebruiken zoals hieronder wordt getoond. Hieronder kunt u zien dat voor elk object dat wordt geretourneerd via Where-Object, PowerShell de code uitvoert Write-Host -ForegroundColor 'Yellow' $_.DisplayName "is running".

PS51> Get-Service -ServiceName * |
	Where-Object {$_.DisplayName -Like "Windows*" -and $_.Status -eq 'Running'} | 
		Foreach-Object {
			Write-Host -ForegroundColor 'Yellow' $_.DisplayName "is running"
		}
Filtering by property with Where-Object

De ForEach-Object cmdlet is op vele manieren nuttig. Als voorbeeld zou u extra logica kunnen inbouwen om door elk gevonden service-object te enumereren en op basis van een eigenschapwaarde de kleur en bewoording van de outputstring te wijzigen of zelfs een aanvullende actie uit te voeren, zoals het starten van een gestopte service.

Stel u de mogelijkheden voor die dit voor u biedt! Met een beetje nadenken en planning zou u een script kunnen maken dat één commando neemt en moeiteloos over vele objecten uitvoert.

Vergelijken van objecten

Soms moet u naar twee objecten kijken en eigenschapswaarden vergelijken.

Misschien heb je twee systemen op je netwerk die bijna identiek zijn. Echter, je ervaart wat je verwacht dat een configuratieprobleem is met een service op een van de twee systemen.

Je concludeert dat aangezien deze systemen zich in verschillende delen van je netwerk bevinden, je externe opdrachten moet gebruiken om de informatie te verzamelen in een PowerShell-sessie. Je opent je favoriete editor en maakt een script. Dit script, zoals je hieronder kunt zien, maakt verbinding met twee verschillende servers en somt alle processen op elk van hen op.

$A = 'Svr01a.contoso.com'
$B = 'Svr02b.contoso.com'

$ProcA = Invoke-Command -Computername $A -Scriptblock {Get-Process -Name *}
$ProcB = Invoke-Command -ComputerName $B -Scriptblock {Get-Process -Name *}

Je hebt nu alle processen op elke computer vastgelegd in de variabelen $ProcA en $ProcB. Je moet ze nu vergelijken. Je zou handmatig door elke set processen kunnen gaan, of je zou het op de makkelijke manier kunnen doen en een cmdlet genaamd Compare-Object kunnen gebruiken.

Compare-Object stelt je in staat om de eigenschapswaarden van twee verschillende objecten te vergelijken. Deze cmdlet leest elke eigenschap in elk object, kijkt naar hun waarden en retourneert vervolgens wat anders is, standaard en ook wat hetzelfde is.

Om Compare-Object te gebruiken, specificeer je een ReferenceObject en een DifferenceObject-parameter en geef je elk object op als de parameterwaarden zoals hieronder weergegeven.

Compare-Object -ReferenceObject $ProcA -DifferenceObject $ProcB

Standaard retourneert Compare-Object alleen verschillen in de objecten die worden aangegeven door de eigenschap SideIndicator. De symbolen of zij-indicatoren die worden gebruikt zijn >, <, en = om de overeenkomsten van de vergeleken objecten te tonen.

Running Compare-Object

U kunt de schakelparameter IncludeEqual gebruiken met Compare-Object om objecteigenschappen terug te geven die hetzelfde zijn. Als dat het geval is, ziet u == als de zijindicator. Op dezelfde manier kunt u ExcludeDifferent gebruiken om verschillen uit te sluiten.

De Compare-Object cmdlet is een zeer nuttige cmdlet. Als u meer wilt leren, moet u zeker de online documentatie raadplegen.

Werken met aangepaste objecten

Nu u een goed begrip heeft van wat objecten zijn en hoe u ermee kunt werken, is het tijd om uw eigen objecten te maken!

Het maken van aangepaste objecten van hashtables

Één manier om uw eigen objecten te maken is door hashtables te gebruiken. Hashtables zijn sets van sleutel/waarde-paren precies wat u nodig heeft voor het maken van eigenschappen voor een object.

Laten we beginnen met het maken van een aangepast PowerShell-object met enkele sleutel/waarde-paren met behulp van een hashtable. In het onderstaande voorbeeld maakt u een hashtable. Deze hashtable vertegenwoordigt een enkel object en de eigenschappen ervan. Zodra de hashtable $CarHashtable is gedefinieerd, kunt u vervolgens de PsCustomObject type accelerator.

Het typeversneller ‘pscustomobject’ is een snelle manier om een instantie van de klasse ‘pscustomobject’ te maken. Deze gedraging wordt casting genoemd.

Tegen het einde van de onderstaande codefragment, heb je een object ($CarObject) van het type pscustomobject met vijf toegewezen eigenschappen.

## Definieer de hashtable
$CarHashtable = @{
	Brand      = 'Ford'
	Style      = 'Truck'
	Model      = 'F-150'
	Color      = 'Red'
	Drivetrain = '4x4'
}

## Maak een object
$CarObject = [PsCustomObject]$CarHashTable

Je kunt ook de cmdlet New-Object gebruiken. Met dezelfde hashtable, in plaats van de pscustomobject typeversneller te gebruiken, kun je het op de lange manier doen met New-Object. Een voorbeeld hiervan wordt hieronder getoond.

$CarHashtable = @{
	Brand      = 'Ford'
	Style      = 'Truck'
	Model      = 'F-150'
	Color      = 'Red'
	Drivetrain = '4x4'
}
#Maak een object
$CarObject = New-Object -TypeName PsObject -Properties $CarHashtable

Wanneer $CarObject is gemaakt, kun je nu hieronder zien dat je naar elke eigenschap kunt verwijzen alsof het afkomstig is van een ingebouwde PowerShell-cmdlet zoals Get-Service.

Inspecting object properties

Eigenschappen toevoegen & verwijderen

Niet alleen kun je aangepaste objecten maken, maar je kunt er ook aan toevoegen. Herinner je je het gebruik van de cmdlet Get-Member? Get-Member heeft een tegenhanger genaamd Add-Member. De cmdlet Add-Member enumereert geen leden, maar voegt ze toe.

Gebruikmakend van het eerder gemaakte aangepaste object als voorbeeld, wil je misschien een eigenschap voor het modeljaar aan dat object toevoegen. Dat kun je doen door een object naar Add-Member te leiden en specificeren:

  • Het type lid (in dit geval een eenvoudige `NoteProperty`)
  • De naam van de eigenschap (`Year`)
  • De waarde van de eigenschap (`Value`)

U kunt hieronder een voorbeeld hiervan zien.

PS51> $CarObject | Add-Member -MemberType NoteProperty -Name 'Year' -Value '2010'

U kunt hieronder opnieuw zien dat het eruitziet als elke andere eigenschap.

Adding and viewing a new property

U kunt vergelijkbare technieken gebruiken om veel verschillende soorten leden toe te voegen. Als u zelf meer wilt ontdekken, bekijk dan de `Add-Member` documentatie.

U kunt net zo makkelijk een lid van een object verwijderen. Hoewel er geen `Remove-Member` cmdlet is, kunt u dit nog steeds laten gebeuren door de `Remove()` methode op het object aan te roepen zoals hieronder getoond. U leert over methoden in de volgende sectie.

PS51> $CarObject.psobject.properties.remove('Drivetrain')

Snelle introductie tot methoden

Gedurende dit artikel hebt u gewerkt met eigenschappen. U hebt eigenschapswaarden gelezen, uw eigen eigenschappen gemaakt en deze toegevoegd en verwijderd. Maar u heeft eigenlijk niet veel aan de omgeving gedaan. U heeft niets veranderd op de server. Laten we actie ondernemen met methoden.

Methoden voeren een soort actie uit. Objecten slaan informatie op terwijl methoden actie ondernemen.

Bijvoorbeeld, u bent misschien bekend met het `Stop-Service` commando. Dit commando stopt een Windows-service. Om dat te doen, kunt u een object van `Get-Service` rechtstreeks naar `Stop-Service` sturen om het te laten gebeuren.

Je kunt hieronder een voorbeeld zien van het stoppen van de BITS-service. Dit voorbeeld stopt de BITS-service en controleert vervolgens de status om er zeker van te zijn dat deze is gestopt. Je hebt twee acties uitgevoerd met cmdlets; het stoppen van de service en het controleren van de status.

PS51> Get-Service -ServiceName 'BITS' | Stop-Service
PS51> Get-Service -ServiceName 'BITS'

In plaats van tweemaal `Get-Service` uit te voeren en een afzonderlijk commando uit te voeren, `Stop-Service`, kun je in plaats daarvan methoden gebruiken die rechtstreeks in de service-objecten zijn ingebouwd. Veel objecten hebben methoden. In dit geval is `Stop-Service` en die tweede `Get-Service` referentie zelfs niet nodig.

Running commands to stop and start a service

Door methoden op het service-object zelf aan te roepen, kun je stoppen en de bijgewerkte status ophalen, allemaal met één object. Hieronder zie je dit in actie. Let op dat je door de `Stop()` en `Start()` methoden te gebruiken, de service kunt manipuleren net zoals de commando’s deden.

Om ervoor te zorgen dat de waarde van de `Status` eigenschap up-to-date is nadat de servicestatus is gewijzigd, kun je de `Refresh()` methode aanroepen, die werkt als een andere oproep van `Get-Service` commando.

## Stop BITS op de lokale machine
$Svc = Get-Service -ServiceName 'BITS' #Object waar je mee werkt
$Svc.Stop() #Methode / actie die je uitvoert
$Svc.Refresh() #Methode / actie die je uitvoert
$Svc.Status #Eigenschap

#Start BITS op de lokale machine
$Svc = Get-Service -ServiceName 'BITS' #Object waar je mee werkt
$Svc.Start() #Methode / actie die je uitvoert
$Svc.Refresh() #Methode / actie die je uitvoert
$Svc.Status #Eigenschap

Je zou de volgende output moeten zien:

Executing methods on the service object

Voor meer informatie over methoden, bekijk het over_Methoden help onderwerp.

Conclusie

Er zijn veel dingen die je kunt doen met objecten in PowerShell. Dit artikel was slechts een inleiding om je op weg te helpen met leren. In dit artikel heb je wat basisprincipes geleerd over wat objecten zijn, hoe je actie onderneemt, ze manipuleert en maakt. Je hebt een paar verschillende scenario’s gezien die je lieten zien hoe je deze taken kunt uitvoeren met voorbeelden van code. Blijf rustig en leer PowerShell. Bedankt voor het lezen!

Source:
https://adamtheautomator.com/powershell-objects/