Geek School leren hoe objecten in PowerShell te gebruiken
Objecten begrijpen is een van de fundamentele concepten om PowerShell "te krijgen". Doe mee met ons terwijl we objecten verkennen en hoe ze PowerShell beter maken dan elke andere schaal die er vandaag is.
Zorg ervoor dat u de vorige artikelen in de serie leest:
- Leer hoe u Windows kunt automatiseren met PowerShell
- Leren gebruik te maken van cmdlets in PowerShell
En blijf op de hoogte voor de rest van de serie de hele week.
Voorwerpen
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 die u helpen de klus te klaren (let op sed en grep), maar aan het eind van de dag, als u elke vorm van zware tekstanalyse wilt uitvoeren, moet u weten wat reguliere expressies zijn, zoals de achterkant van je hand.
PowerShell maakt gebruik van het onderliggende .Net-framework en hanteert een andere aanpak, waarbij objecten in plaats van tekst worden gebruikt. 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 "Parts" worden genoemd eigenschappen en de "Instructies" worden genoemd methoden. Als we een Windows-service als een object willen vertegenwoordigen, 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 bekijken 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 # wilt gebruiken of het PSObject-type wilt gebruiken.
De pijplijn
Er zijn veel Linux-shells met een pijplijn, waarmee je de tekst kunt verzenden die door één commando als input wordt uitgevoerd naar de volgende opdracht in de pijplijn. PowerShell brengt dit naar het volgende niveau door u toe te staan om de objecten die één cmdlet uitvoert, door te geven en 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
Omdat PowerShell met objecten en niet met tekst te maken heeft, 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 -Full
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.
Met behulp 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 de objectpijplijn
Als u vragen heeft, kunt u mij tweeten @taybgibb, of u kunt gewoon een reactie achterlaten.