Powershell Modules detecteren en installeren
Date: 20 augustus 2020
Om in powershell scripts de juiste modules te laden gebruik ik een module.ps1 bestand, deze bevat alle relevante modules die ik gebruik tijdens uitvoeren van een script. Het module.ps1 bestand wordt aan het uit te voeren script toegevoegd door een include regel:
. $PSScriptRoot\modules.ps1
Onderstaand is een subset van de door mij gebruikte modules, een functie wordt geinstalleerd door de functie met juiste parameters aan te roepen in het hoofdscript.
In onderstaand voorbeeld laad ik in mijn module.ps1 direct een aantal modules, ook zit hier maatwerk in voor bijvoorbeeld de VMWare powerCLI en Xen (Xen vereist een zip bestand met de module in de root folder van het script / module.
###################################################################################### # # MODULES DETECTEREN / INSTALLEREN # ###################################################################################### function InstallModules ( [string]$modulename, [string]$moduledisplay ) { write-host "######################################################################################" -ForegroundColor Magenta write-host "############### $moduledisplay" -ForegroundColor Magenta if (!(get-installedmodule $modulename)) { install-module $modulename -SkipPublisherCheck -Confirm:$False -Force -allowclobber Import-Module $modulename -force } else { Import-Module $modulename -Force write-host "############### $moduledisplay " -ForegroundColor Green } } InstallModules -modulename SQLServer -moduledisplay "SQL Server" InstallModules -modulename azure.storage -moduledisplay "Azure Storage" # Maatwerk Modules # # Power CLI # write-host "######################################################################################" -ForegroundColor Magenta write-host "############### VMware PowerCLI" -ForegroundColor Magenta if (!(get-installedmodule vmware.powercli)) { install-module vmware.powercli -Confirm:$False -Force -AllowClobber import-module vmware.powercli -Force Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false | out-null } else { $lvermajor = (get-installedmodule vmware.powercli).version.major $lverminor = (get-installedmodule vmware.powercli).version.minor $lverbuild = (get-installedmodule vmware.powercli).version.build $lverrevision = (get-installedmodule vmware.powercli).version.revision write-host "############### VMware PowerCLI versie lokaal : $lvermajor.$lverminor.$lverbuild.$lverrevision" -ForegroundColor Cyan $overmajor = (find-module vmware.powercli).version.major $overminor = (find-module vmware.powercli).version.minor $overbuild = (find-module vmware.powercli).version.build $overrevision = (find-module vmware.powercli).version.revision write-host "############### VMware PowerCLI versie online : $overmajor.$overminor.$overbuild.$overrevision" -ForegroundColor Cyan if ($lvermajor -clt $overmajor) { write-host "############### VMware PowerCLI Major versie wijkt af $lvermajor <> $overmajor"; install-module vmware.powercli -Confirm:$False -Force -AllowClobber } if ($lverminor -clt $overminor) { write-host "############### VMware PowerCLI Minor versie wijkt af $lverminor <> $overminor"; install-module vmware.powercli -Confirm:$False -Force -AllowClobber } if ($lverbuild -clt $overbuild) { write-host "############### VMware PowerCLI Build versie wijkt af $lverbuild <> $overbuild"; install-module vmware.powercli -Confirm:$False -Force -AllowClobber } if ($lverrevision -clt $overrevision) { write-host "############### VMware PowerCLI revision versie wijkt af $lverrevision <> $overrevision"; install-module vmware.powercli -Confirm:$False -Force -AllowClobber } import-module vmware.powercli -Force Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false | out-null write-host "############### VMware PowerCLI " -ForegroundColor Green } # RSAT Tools write-host "######################################################################################" -ForegroundColor Magenta Write-host "############### RSAT Active Directory " -ForegroundColor Magenta if ((Get-WindowsFeature RSAT-AD-Powershell).installed -eq $False) { Import-Module ServerManager Add-WindowsFeature RSAT-AD-PowerShell -Confirm:$false Import-Module ActiveDirectory } else { Import-Module ActiveDirectory write-host "############### RSAT Active Directory" -ForegroundColor Green } # Xen Server write-host "######################################################################################" -ForegroundColor Magenta Write-host "############### Xen Server Module " -ForegroundColor Magenta if (!(test-path -Path $PSScriptRoot\XenServerPSModule)) { New-Item -Path $PSScriptRoot\XenServerPSModule -ItemType Directory -Force Expand-Archive -Path $PSScriptRoot\XenServerPSModule.zip -DestinationPath $PSScriptRoot copy-item "$PSScriptRoot\XenServerPSModule\*" -destination "$env:windir\system32\WindowsPowerShell\v1.0\Modules\XenServerPSModule" -recurse } else { Import-Module $PSScriptRoot\XenServerPSModule\XenServerPSModule.psd1 write-host "############### XenServer Module" -ForegroundColor Green }