Geek School Leer PowerShell uitbreiden
PowerShell biedt u twee manieren om de schaal uit te breiden. U kunt snapins gebruiken, die alleen binair zijn en ontwikkeld in een volwaardige programmeertaal zoals C #, of u kunt modules gebruiken, die zowel binair als scriptmatig kunnen zijn.
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
- Leren hoe objecten in PowerShell te gebruiken
- Leren opmaken, filteren en vergelijken in PowerShell
- Leer hoe u Remoting kunt gebruiken in PowerShell
- PowerShell gebruiken om computerinformatie te verkrijgen
- Werken met collecties in PowerShell
En blijf op de hoogte voor de rest van de serie de hele week.
snapins
Snapins zijn zo vorig jaar. Allemaal grappen aan de kant, snapins nooit echt bij de PowerShell-gemeenschap betrokken omdat de meeste scripters geen ontwikkelaars zijn en je alleen snapins kunt schrijven in een taal als C #. Niettemin zijn er nog steeds enkele producten die snapins gebruiken, zoals bijvoorbeeld Web Deploy. Om te zien welke snapins beschikbaar zijn voor gebruik in de shell, gebruikt u de volgende opdracht:
Get-PSSnapin -Registered
Om de commando's te gebruiken die door een snapin zijn toegevoegd, moet je het eerst in je sessie importeren, en dan kan je dat als volgt doen:
Add-PSSnapin -Name WDeploySnapin3.0
Op dit punt krijgt u een foutmelding als u de Web Deploy-module niet hebt geïnstalleerd. Als u het wel hebt geïnstalleerd, zoals ik, wordt het in uw sessie geïmporteerd. Om een lijst met beschikbare commando's in de snapin te krijgen, kunt u eenvoudig de cmdlet Get-Command gebruiken:
Get-Command-Module WDeploy *
Opmerking: technisch gezien is dit geen module, maar om een of andere reden moet u nog steeds de parameter Module gebruiken.
modules
Modules zijn nieuwer en zijn de weg voorwaarts. Ze kunnen zowel met PowerShell worden gescript als gecodeerd in een taal als C #. De meeste van de ingebouwde commando's zijn ook georganiseerd in modules. Om een lijst met modules op uw systeem te zien, kunt u de volgende opdracht gebruiken:
Get-Module -ListAvailable
Naarmate producten worden bijgewerkt, worden hun PowerShell-tegenhangers gemigreerd naar modules. SQL had bijvoorbeeld een snapin, maar deze bestaat nu uit modules.
Als u een module wilt gebruiken, moet u deze eerst importeren.
Import-Module -Name SQLASCMDLETS
U kunt dezelfde trick gebruiken die we met snapins hebben gebruikt om alle opdrachten te bekijken die de module aan de shell heeft toegevoegd.
Dus dat laat de vraag: hoe weet PowerShell welke snapins en modules u op uw systeem hebt? Nou, snapins zijn een beetje vervelend en moeten worden geïnstalleerd. Een deel van het installatieproces omvat het maken van een paar registervermeldingen waarnaar PowerShell kijkt om snapin-informatie te vinden. Modules kunnen daarentegen met de shell worden geregistreerd door ze eenvoudigweg op een van de locaties in de omgevingsvariabele PSModulePath te plaatsen. U kunt ook gewoon het pad naar de module toevoegen aan de omgevingsvariabele.
($ Env: PSModulePath) .Split ( “;”)
Dat spuugt de inhoud van de variabele uit. Merk op dat als u een module zoals SQL hebt geïnstalleerd, de variabele de locatie van de SQL-module heeft opgenomen.
Module automatisch laden
PowerShell 3 heeft een geweldige nieuwe functie geïntroduceerd die een paar namen kent. Geen van hen is officieel, maar "Module automatisch laden" is de beste beschrijving ervan. In feite kunt u cmdlets gebruiken die behoren tot een externe module zonder de module expliciet te importeren met behulp van de cmdlet Import-Module. Om dit te bekijken, verwijdert u eerst alle modules uit uw shell met behulp van de volgende opdracht:
Get-Module | Verwijderen-Module
U kunt vervolgens controleren of u geen modules hebt geladen met behulp van het volgende:
Get-Module
Gebruik nu een cmdlet die niet in de kernbibliotheek staat. Test-verbinding is een goede:
Test-verbinding localhost
Als u uw geladen modules opnieuw controleert, zult u zien dat deze inderdaad de module heeft geladen.
Dat is alles voor vandaag jongens, doe morgen mee voor meer.