Het werken met PowerShell-modules op beveiligde netwerken of servers kan een hele klus zijn. Je kent het wel: je probeert een module zoals SQLServer of PSWindowsUpdate te installeren op een server zonder internettoegang, en alles lijkt je tegen te werken. Gelukkig zijn er manieren om dit probleem te omzeilen. Deze handleiding laat zien hoe je PowerShell-modules offline installeert – zodat je niet afhankelijk bent van internet – en hoe je modules importeert vanaf een externe machine wanneer dat nodig is. Kortom, je kunt je omgeving instellen zonder je zorgen te hoeven maken over die vervelende netwerkbeperkingen. En ja, dat is best handig in geïsoleerde omgevingen of bij strikte IT-regels. Je hebt dan de juiste modules beschikbaar waar je ze nodig hebt, ongeacht de netwerkbeperkingen.
Hoe installeer je PowerShell-modules op offline computers?
Pak eerst de module van een computer met internetverbinding.
Aangezien de meeste modules rechtstreeks uit de PowerShell Gallery ( https://www.powershellgallery.com/ ) komen, is het belangrijk om ze eerst te downloaden op een computer met internetverbinding. Je hebt PowerShell versie 5.1 of nieuwer nodig, wat je kunt controleren met `npm install powerShell` $PSVersionTable. PSVersion. Als het een oudere versie is, kun je sowieso compatibiliteitsproblemen ondervinden. Zodra je dit hebt bevestigd, kun je de gewenste module, zoals SqlServer, vinden met: `npm install powerShell`.
Find-Module –Name *SqlServer* | Select Name, Version, Repository
Met dit commando kun je controleren of de betreffende module in de galerij aanwezig is. Download de module vervolgens naar een map die je gemakkelijk terug kunt vinden, bijvoorbeeld C:\PS:
Save-Module –Name SqlServer –Path C:\PS\
Nu komt het lastige gedeelte. De module wordt gedownload als een map met al zijn bestanden, maar niet per se alle afhankelijkheden. Het is dus niet voldoende om de map simpelweg naar de doelmachine te kopiëren als de afhankelijkheden ontbreken – soms heeft de module andere modules of bestanden nodig om goed te functioneren. Maar voor basismodules werkt het kopiëren van de map naar het juiste pad in veel gevallen wel. De standaardpaden voor modules in het systeem zijn doorgaans:
- C:\Users\gebruikersnaam\Documents\WindowsPowerShell\Modules – gelokaliseerd voor de huidige gebruiker
- C:\Program Files\WindowsPowerShell\Modules – voor alle gebruikers (vereist beheerdersrechten)
- C:\Windows\system32\WindowsPowerShell\v1.0\Modules – ingebouwde modules
Kopieer de volledige modulemap naar C:\Program Files\WindowsPowerShell\Modules (of de gebruikersmap als het alleen voor uw gebruiker is).Controleer vervolgens of PowerShell de module herkent.
Get-Module -Name SqlServer -ListAvailable
Als de module verschijnt, is alles in orde. Je kunt de commando’s ervan weergeven met:
Get-Command -Module SqlServer
Op deze manier kunt u de module, zelfs als uw server geen internet- of PowerShellGallery-toegang heeft, importeren en offline gebruiken. Houd er wel rekening mee dat sommige modules met afhankelijkheden mogelijk extra stappen of vooraf gedownloade modules vereisen.
Belangrijke tip:
In sommige configuraties werkt deze methode mogelijk niet meteen, vooral als er afhankelijkheden ontbreken of er een versieconflict is. Een herstart van PowerShell of (soms) de computer zelf kan helpen om de nieuwe modules te herkennen. Het is een beetje eigenaardig, maar dat is typisch Windows.
Een PowerShell-module importeren vanaf een externe computer.
Sla de installatie over, leen de module gewoon van een andere computer.
Als het lokaal installeren van de module geen optie is, kunt u deze rechtstreeks vanaf een externe machine laden met PowerShell-remotebeheer. In principe maakt u een sessie aan, bekijkt u welke modules op afstand beschikbaar zijn en importeert u vervolgens de opdrachten die u nodig hebt. Dit is handig wanneer u af en toe een specifieke module nodig hebt, of wanneer u dingen test zonder uw lokale configuratie te verstoren.
Begin met het aanmaken van een nieuwe sessie naar de externe computer:
$session = New-PSSession -ComputerName dub-sql1
Vervang dub-sql1 door de naam van uw externe systeem. Zodra de verbinding tot stand is gebracht, kunt u met het volgende commando zien welke modules op die machine beschikbaar zijn:
Get-Module -PSSession $session -ListAvailable
Als de module aanwezig is, importeer deze dan als volgt in je huidige sessie:
Import-Module -PSSession $session -Name SqlServer
Met deze opdracht worden alle cmdlets van de externe SQLServer-module in uw lokale PowerShell-sessie geladen. Daarna kunt u opdrachten uitvoeren alsof Invoke-Sqlcmdde module lokaal is geïnstalleerd. Vergeet alleen niet de sessie daarna te sluiten.
Remove-PSSession $session
Een andere truc is om impliciete remote toegang te gebruiken als je wilt dat deze commando’s zich net als native commando’s gedragen, zonder dat je constant sessies hoeft te beheren. Je kunt dit doen met:
$session = New-PSSession -ComputerName dub-sql1 Invoke-Command {Import-Module SqlServer} -Session $session Export-PSSession -Session $session -CommandName *-Sql* -OutputModule RemoteSQLServer -AllowClobber Remove-PSSession $session Import-Module RemoteSQLServer
Hiermee wordt een lokale module opgezet die op de achtergrond verbinding maakt met uw externe server. Dat is een beetje sluw, maar erg handig als u SQL Server-opdrachten wilt uitvoeren zonder iets op de hostmachine te installeren.
Het belangrijkste idee is in ieder geval dat, of je nu offline installeert of op afstand importeert, deze methoden je uit de problemen helpen wanneer een normale installatie via een internetverbinding niet mogelijk is. Het is wel wat extra werk, maar het is beter dan te moeten rommelen met kapotte afhankelijkheden of te wachten tot de IT-afdeling de galerij openstelt.