De PowerShell Select-Object cmdlet stelt je in staat om naadloos objecten en eigenschappen te selecteren uit een invoergroep van objecten. Maar soms moet je gewoon meer weten. De ExpandProperty is een schakelaar voor Select-Object die details over een specifieke eigenschap uitbreidt.
Ontdek de kracht van de PowerShell Expand Property (-ExpandProperty
) schakelaar in deze voorbeeldgeleide zelfstudie.
Vereisten
Deze zelfstudie zal een praktische demonstratie zijn. Als je wilt volgen, heb je alleen een Windows-machine met PowerShell 5.1 en hoger nodig. Dit artikel maakt gebruik van een Windows 10-machine met PowerShell 5.1.
Property-objectwaarden extraheren met PowerShell Expand Property
Meld je aan bij je Windows-machine en start een PowerShell-terminal. In deze sectie maak je kennis met de Select-Object
cmdlet en zijn ExpandProperty
schakelaar.
1. Voer de Get-Service cmdlet uit om een lijst van alle services op je systeem te krijgen. Leid de uitvoer door naar de Select-Object cmdlet om alleen de naam eigenschap van elk serviceobject te selecteren en weer te geven, zoals hieronder getoond.
Je zou nu een enkele kolom van objecten moeten zien die een lijst van namen van services op je systeem vertegenwoordigen, zoals in de onderstaande verkorte weergave.

2. Voer het Get-Member cmdlet uit aan het einde van de vorige \textit{pipeline} om het type objecten te bevestigen dat select-object retourneert zoals hieronder. Het kennen van het type object helpt bij het schrijven van functies of cmdlets om uw \textit{pipelines} uit te breiden.
Verwijs naar de onderstaande schermafbeelding en je zult opmerken dat hoewel de -Property schakelaar lijkt te resulteren in een lijst van strings, dit de Geselecteerde lijst is van \textit{System.ServiceProcess.ServiceController} objecten.

3. Vervang het Get-Members cmdlet door mkdir om automatisch een map te maken voor elke service. De -first 5 schakelaar beperkt het aantal objecten dat wordt geretourneerd. Op zijn beurt zal de mkdir functie slechts vijf mappen maken op basis van de objecten in de \textit{pipeline}.
Je zou een uitvoer moeten zien die vergelijkbaar is met de schermafbeelding hieronder, wat wijst op een succesvolle poging.

4. Verwijder de mappen door mkdir te vervangen door rmdir zoals in het onderstaande fragment. Schakel de -Verbose schakelaar in om uitgebreide uitvoer te tonen in je terminal.
De rmdir-cmdlet verwacht teksten en kan de hashtable-representatie van de ServiceController-objecten niet verwerken. Je poging zou moeten mislukken met verschillende fouten, zoals te zien is in de onderstaande schermafbeelding.

5. Verander de -Property-schakelaar naar de -ExpandProperty-schakelaar zoals in het volgende fragment. Hierdoor kun je de waarde van een eigenschap als een tekst krijgen wanneer je alleen een tekst nodig hebt.
Gecombineerd met rmdir zou je moeten zien dat je poging om de mappen automatisch te verwijderen slaagt zonder fouten, zoals te zien is in de onderstaande schermafbeelding.

Het maken van een set geselecteerde objecten met specifieke eigenschappen
Om de codefragmenten in de secties te verkorten, maak een variabele voor de eerste 20 services op je machine als volgt.
Voer de opdracht Get-Service
uit, selecteer de eerste 20
objecten via de Select-Object
-cmdlet en sla de objecten op in een variabele met de naam $testServices
. Selecteer alleen de eigenschappen Name
, Status
en DependentServices
als volgt.
De PowerShell Expand Property-schakelaar kan slechts één eigenschap tegelijk uitbreiden, in tegenstelling tot de Property-schakelaar, die meer dan één eigenschap tegelijk kan selecteren.
Voer de variabelenaam, `$testServices`, uit om de structuur van de inhoud ervan te bekijken.
Je zou een tabel moeten zien die de eigenschappen van de services weergeeft die je geselecteerd hebt, vergelijkbaar met de onderstaande screenshot.

Het uitbreiden van een Collectie-eigenschap met PowerShell Expand Property
A PowerShell object can have properties that are collections of objects, also known as collection properties. In this section, you will learn how to use PowerShell Expand Property to expand a collection property to view its members’ properties.
Voer het cmdlet Select-Object
uit op de variabele $testServices
en breid de eigenschap DependentServices
van elke service uit.
Aangezien DependentServices
een collectie-eigenschap is, is de output een lijst van de services in alle gevulde collecties, zoals hieronder weergegeven. Let op de duplicaten in de lijst als gevolg van het samenvoegen van resultaten uit de uitgebreide DependentServices
.

Het combineren van Eigenschap met PowerShell Expand Property voor Gecategoriseerde Output
Nu heb je een lijst van afhankelijke services, maar hoe weet je op welke service ze afhankelijk zijn? In dit gedeelte leer je de -Property
-schakelaar te gebruiken om een uitgebreide eigenschap te categoriseren.
Voer de onderstaande opdracht uit om de eigenschappen van DependentServices
te categoriseren op Name
.
Aangezien de afhankelijke services al een Name
-eigenschap hebben, mislukt de categorisatiestap, zoals hieronder weergegeven.
De onderstaande fout vertelt je dat de oorspronkelijke lijst met services (in $testServices) al een Naam-eigenschap heeft die conflicteert met een Naam-eigenschap in de uitgebreide DependentServices-eigenschap.

Een workaround is om Berekende Eigenschappen te maken om de identificatie-eigenschap als volgt te hernoemen.
Sla de vorige opdrachtuitvoer gewijzigd op om een berekende eigenschap genaamd Afhankelijk van als de identificatie-eigenschap in een variabele genaamd $depServ op te geven. Afhankelijk van zal de Naamwaarde bevatten voor elke service in $testService.
De eigenschapsnaam, Afhankelijk van
, werd willekeurig gekozen in deze zelfstudie en kan elke expressie naar keuze zijn.
Geef het object in $depServ
door aan Select-Object
om afhankelijke service Naam
, Status
en Afhankelijk van
eigenschappen te selecteren.
U kunt nu zien welke services afhankelijk zijn van de services in $testServices
, zoals hieronder weergegeven.

Combineer Format-List met PowerShell Expand Property voor Uitgebreidheid
PowerShell kan beperken welke objecteigenschappen worden weergegeven, vooral in tabeluitvoer, en de uitvoer van de -ExpandProperty
schakelaar kan hetzelfde ervaren. U kunt de uitgebreide eigenschappen als workaround in plaats daarvan in een lijst weergeven.
Voer de Get-Process
cmdlet hieronder uit om alle modules
op te halen die het explorer
proces gebruikt. Schakel de -ExpandProperty
schakelaar in om de eigenschappen van de modules weer te geven.
De uitvoer op uw scherm moet lijken op de volgende screenshot, automatisch afgekapt om slechts drie eigenschappen weer te geven.

Leid de objecten door naar de Format-List
cmdlet om alle waarden voor de module-objecten te bekijken in een meer beheersbare lijst.
Zoals hieronder getoond, worden alle eigenschappen en hun waarden vermeld. U kunt de gegevens verder opslaan in een bestand of deze doorgeven aan een andere cmdlet voor verdere verwerking.

Conclusie
Door het succesvol tot hier te halen, hebt u gezien hoe u kunt profiteren van de PowerShell Expand Property-schakelaar (-ExpandProperty) van de Select-Object cmdlet. PowerShell biedt een scala aan handige cmdlets voor veelvoorkomende taken. U kunt uw nieuwe kennis verder uitbreiden door te leren hoe u snel bestanden kunt weergeven met PowerShell Cat.
Source:
https://adamtheautomator.com/powershell-expand-property/