Geek School Leren gebruik van Cmdlets in PowerShell
Als je ipconfig hebt gebruikt of via de opdrachtprompt hebt gepingd, ben je al bijna een PowerShell-ninja. Dus kom eraan en doe mee als we cmdlets ontdekken in deze installatie van Geek School.
Bekijk ons eerste artikel over PowerShell en houd de rest van onze serie de hele week in de gaten.
De anatomie van een Cmdlet
In het eerste deel van de serie zagen we een cmdlet die er ongeveer zo uitzag:
Update Help
PowerShell-cmdlets hebben de syntaxis Verb-Noun, die u hierboven kunt zien. Het belangrijkste om op te merken is dat het zelfstandig naamwoord altijd enkelvoud is, ook al kan de cmdlet meer dan één resultaat opleveren. Als u een lijst met juridische werkwoorden in PowerShell wilt zien, kunt u de Get-verb cmdlet gebruiken.
Het kennen van de wettelijke werkwoorden en het onthouden van de regel van het enkelvoudige naamwoord helpt echt om cmdlet-namen te raden. Stel dat u dat wilt krijgen een lijst van Diensten en hun status - dat klopt, het is net zo eenvoudig als Get-Service. Hoe denk je dat we dat zouden doen? krijgen een lijst van hardlopen processen - Dat klopt, Get-Process zal het lukken.
Get-Process
Dit maakt het heel gemakkelijk om met elke technologie te werken. Als u bijvoorbeeld de Exchange-cmdlets hebt geladen, kunnen we gemakkelijk een lijst met postvakken op de server krijgen met behulp van:
Get-Mailbox
Er is echter een uitzondering. Opzij zetten, alle andere technologie-specifieke commando's vereisen een prefix. Als we bijvoorbeeld de gebruikers willen hebben die momenteel zijn aangemeld via Extern bureaublad, typen we:
Get-RDUserSession
Dat is te zien in de onderstaande schermafbeelding.
Opmerking: deze schermafbeelding is gemaakt in een vak voor Server 2012, omdat u hier de meeste van de technologie-specifieke modules zult vinden.
Een tijdje geleden las ik een artikel van Don Jones, de Godfather van PowerShell, waarin hij uitlegde dat Exchange werd verzonden voordat dit voorvoegsel werd toegevoegd aan cmdlets, dus het heeft ze nooit geïmplementeerd en zal het nooit worden.
aliassen
Een andere functie die PowerShell biedt, is de mogelijkheid om meerdere manieren te hebben om dezelfde opdracht uit te voeren - aliassen, als u wilt. Het geweldige aan hen is dat ze veel commando's bevatten die je misschien al in de opdrachtprompt gebruikte, evenals enkele Linux-aliassen. In PowerShell kunnen we bijvoorbeeld een lijst met mappen ophalen door gebruik te maken van:
Get-ChildItem
Gebruikt om de opdrachtprompt te gebruiken? Maak je geen zorgen, ze hebben jou gedekt.
Heb je een Linux achtergrond? Ze hebben je daar ook gedekt.
Als je een paar jaar hebt gescripte, heb je de neiging om lui te worden en veel aliassen te gaan gebruiken, maar dit helpt geen nieuwkomers die onze code gaan lezen. Om te zien welk commando een alias onder de motorkap uitvoert, kun je het volgende gebruiken:
Get-Alias -Name ls
Aan de andere kant, als u vindt dat het tijd is om uw spel op te starten, kunt u de definitieparameter gebruiken om alle aliassen voor een cmdlet te krijgen:
Get-ChildItem -Definition Get-ChildItem
Als u van een andere achtergrond komt, kunt u uw eigen aliassen toevoegen door het volgende te doen:
New-Alias -Name icanhazfilez -Value Get-ChildItem
Vanzelfsprekend moet je "icanhazfilez" vervangen door de naam van je nieuwe alias en Get-ChildItem met de cmdlet die je wilt dat deze onder de motorkap loopt.
Een ding om op te merken is dat je alle aliassen verliest die je hebt gedefinieerd wanneer je de shell afsluit. Je kunt dit omzeilen door hun definitie toe te voegen aan je profielscript.
Truncating Parameters
Met Windows PowerShell kunt u ook parameternamen inkorten totdat ze dubbelzinnig worden, dat wil zeggen tot het punt waarop PowerShell niet meer kan achterhalen over welke parameter u het hebt. Bijvoorbeeld:
Get-Service -Name 'Apple Mobile Device' -ComputerName localhost
Is hetzelfde als:
Get-Service -Na 'Apple Mobile Device' -Com localhost
Als je toevallig de parameters namen te ambigu maakt, krijg je een foutmelding.
Legacy Commands
Ten slotte werken de opdrachten die u kent en liefhebt nog steeds in PowerShell.
ping www.google.com
Onthoud gewoon dat legacy-applicaties zoals ping output een string zijn, en er is vaak een betere manier om hetzelfde te doen met een PowerShell-cmdlet.
In plaats van een lange reeks tekst uit te voeren, hebben we nu een object, dat we in de editie van morgen van Geek School zullen bekijken..