Optimized LoadModule

This commit is contained in:
Alexander (Sasha) Nosov
2023-07-13 15:21:37 -07:00
parent d7d6d3b65d
commit e569d415aa
@@ -39,31 +39,58 @@ param (
[switch] $Force
)
function CheckModule ($m) {
# This function ensures that the specified module is imported into the session
# If module is already imported - do nothing
function LoadModule
{
param (
[parameter(Mandatory = $true)][string] $name
)
if (!(Get-Module | Where-Object {$_.Name -eq $m})) {
# If module is not imported, but available on disk then import
if (Get-Module -ListAvailable | Where-Object {$_.Name -eq $m}) {
Import-Module $m
$retVal = $true
if (!(Get-Module -Name $name))
{
$retVal = Get-Module -ListAvailable | Where-Object {$_.Name -eq $name)
if ($retVal)
{
try
{
Import-Module $name -ErrorAction SilentlyContinue
}
catch
{
write-host "The request to lload module $($name) failed with the following error:"
write-host $_.Exception.Message
$retVal = $false
}
}
else {
# If module is not imported, not available on disk, but is in online gallery then install and import
if (Find-Module -Name $m | Where-Object {$_.Name -eq $m}) {
Install-Module -Name $m -Force -Verbose -Scope CurrentUser
Import-Module $m
if (Find-Module -Name $name) {
Install-Module -Name $name -Force -Verbose -Scope CurrentUser
try
{
Import-Module $name -ErrorAction SilentlyContinue
}
catch
{
write-host "The request to lload module $($name) failed with the following error:"
write-host $_.Exception.Message
$retVal = $false
}
}
else {
# If module is not imported, not available and not in online gallery then abort
write-host "Module $m not imported, not available and not in online gallery, exiting."
write-host "Module $($name) not imported, not available and not in online gallery, exiting."
EXIT 1
}
}
}
return $retVal
}
function ConvertTo-Hashtable {
@@ -117,7 +144,7 @@ $requiredModules = @(
"Az.ConnectedMachine",
"Az.ResourceGraph"
)
$requiredModules | Foreach-Object {CheckModule $_}
$requiredModules | Foreach-Object {LoadModule $_}
# Subscriptions to scan