18Aug

Geek School: leren hoe objecten in PowerShell te gebruiken

Objecten begrijpen is een van de basisconcepten om PowerShell "te krijgen".Doe met ons mee terwijl we objecten verkennen en hoe ze PowerShell beter maken dan elke andere schaal die er vandaag is.

Lees de vorige artikelen in de reeks:

  • Leer hoe u Windows automatiseert met PowerShell
  • Leren gebruik van cmdlets in PowerShell

En houd de rest van de serie de hele week op de hoogte.

-objecten

Heeft u zich ooit afgevraagd wat PowerShell onderscheidt van een traditionele Linux-shell zoals Bash of zelfs de oude opdrachtprompt? Het antwoord is heel simpel: traditionele shells voeren tekst uit, waardoor het moeilijk is om dingen te doen zoals opmaken en filteren. Natuurlijk zijn er hulpmiddelen om je te helpen de klus te klaren( sed en grep komen voor de geest), maar aan het eind van de dag, als je elke vorm van zware tekst-parsen wilt doen, moet je reguliere expressies kennen zoals deterug van je hand.

PowerShell maakt gebruik van het onderliggende. Net-framework en hanteert een andere benadering, met behulp van objecten in plaats van tekst. Objecten zijn slechts een weergave van iets. Ze zijn een verzameling onderdelen en acties om ze te gebruiken. Laten we eens kijken naar de onderdelen van een fiets en hoe we ze kunnen gebruiken.

-objecten in. Net zijn vrijwel hetzelfde, behalve twee kleine verschillen: de "onderdelen" worden -eigenschappen genoemd en de "instructies" worden -methoden genoemd. Als we een Windows-service als een object willen weergeven, kunnen we besluiten dat het geschikt is om het te beschrijven met behulp van drie eigenschappen: servicenaam, staat en beschrijving. We moeten ook communiceren met de service, zodat we het object een start-, stop- en een pauzemethode kunnen geven.

U kunt de eigenschappen en methoden van een object zien door deze door te geven aan de cmdlet Get-Member. De objecten die door een PowerShell-cmdlaat worden uitgevoerd, zijn grotendeels onderliggende typen van het. Net-framework, maar u kunt uw eigen objecten maken als u een taal zoals C # of het PSObject-type wilt gebruiken.

De pijplijn

Er zijn veel Linux-shells met een pijplijn, waarmee je de tekst kunt verzenden die door een commando wordt uitgevoerd als invoer voor het volgende commando in de pijplijn. PowerShell brengt dit naar het volgende niveau door u toe te staan ​​om de objecten die één cmdlet uitvoert te gebruiken en deze door te geven als invoer voor de volgende cmdlet in de pijplijn. De truc is te weten welk type object een cmdlet retourneert, wat heel gemakkelijk is bij het gebruik van de cmdlet Get-member.

Get-Service |Get-member

Om redenen die buiten het bestek van dit artikel vallen, worden eigenschappen en methoden gezamenlijk klasse-leden genoemd, wat verklaart waarom u de cmdlet Get-Member gebruikt om een ​​lijst te krijgen met alle methoden en eigenschappen van een object. De cmdlet Get-member retourneert echter ook een ander belangrijk stuk informatie, het onderliggende objecttype. In de bovenstaande schermafbeelding kunnen we zien dat Get-Service objecten van het type retourneert:

System. ServiceProcess. ServiceController

Aangezien PowerShell zich bezighoudt met objecten en niet met tekst, kunnen niet alle cmdlets aan elkaar worden gekoppeld met behulp van de pijplijn [1].Dat betekent dat we een cmdlet moeten vinden die op zoek is naar een System. ServiceProcess. ServiceController-object uit de pijplijn.

Get-Command-ParamameterType System. ServiceProcess. ServiceController

Merk op dat er een cmdlet is genaamd Stop-Service;laten we eens kijken naar de hulp ervoor.

Get-Help -Name Stop-Service

Het lijkt erop dat de parameter InputObject een array van ServiceController-objecten als invoer gebruikt. Meestal, als u een parameter ziet met de naam InputObject, accepteert deze invoer van de Pipeline, maar laten we voor de zekerheid eens kijken naar de volledige Help voor die parameter.

Get-Help -Name Stop-Service -Tull

Onze vermoedens waren correct. Dus op dit punt weten we het volgende:

  • Get-Service retourneert ServiceController-objecten
  • Stop-Service heeft een parameter met de naam InputObject die een of meer ServiceControllers als invoer accepteert.
  • De InputObject-parameter accepteert pijplijninvoer.

Gebruikmakend van deze informatie kunnen we het volgende doen:

Get-Service -Name 'Apple Mobile Device' |Stop-service

Dat is alles voor deze tijd mensen. De volgende keer bekijken we hoe we objecten in de pijplijn kunnen formatteren, filteren en vergelijken.

Huiswerk

  • Lees op de Object Pipeline

Als je vragen hebt, kun je mij tweeten @taybgibb, of laat een reactie achter.