From 2445482927b2e9b9a9759cf25536e02b709d294f Mon Sep 17 00:00:00 2001 From: Joe Brinkman Date: Fri, 25 Jan 2019 12:51:49 -0500 Subject: [PATCH 1/2] Replace environment variables with global settings --- .../DnnWebsiteManagement.psd1 | Bin 10024 -> 10646 bytes .../DnnWebsiteManagement.psm1 | 99 ++++++++++++++++-- DnnWebsiteManagement/Initialize.ps1 | 13 +++ DnnWebsiteManagement/ModuleSettings.ps1 | 26 +++++ 4 files changed, 130 insertions(+), 8 deletions(-) create mode 100644 DnnWebsiteManagement/Initialize.ps1 create mode 100644 DnnWebsiteManagement/ModuleSettings.ps1 diff --git a/DnnWebsiteManagement/DnnWebsiteManagement.psd1 b/DnnWebsiteManagement/DnnWebsiteManagement.psd1 index fb2a5366a1d846bb36c697d7806bdbe215307bd6..414d2e46a46b2680a19adf658ce2ac8ea07b1174 100644 GIT binary patch delta 492 zcmaKp!AiqG6h*IFMR&%92qB4}h+;Rz77C(ObfHwba8nnx#u{uBNzz6vB7Q@_Z*VE} zv;2mFXA%`xGQ7;pduQ&OJ9$5UYkyR&yl#1}Ek~yc6(}XT8t{FRuN^%oQH82Ky|O-+ zwr!Q;Op$Ih0`%1;(&AvKKDez0v9C$~YA-J|soo+9o3G8UEIO(oTOoGk7^3!vK*e06 zhwcb{qaCq|$@t&89!yM*y*b^uWOc0*xZyA3=umZaFcFeVF)@PaC@V$`8bfIrHPfk*A4{sE<)>(K(_XLk)F|zVV-ELyy{1RhxRIi(vz@0c;3qo^%XX zRxY?pP;_cDr}8ZdP0$Q@z}&@nQa+7)P&CZg`>e``HRkS$yfN(LGtXW9=XXrE)@O5H Dy^3Ih delta 33 pcmbOhyuxpTnHaM&gTiD}G1bXu6u2fI5MkTgCw7Z(^EUMdi~ziU3(Eii diff --git a/DnnWebsiteManagement/DnnWebsiteManagement.psm1 b/DnnWebsiteManagement/DnnWebsiteManagement.psm1 index 55eb3a8..3626087 100644 --- a/DnnWebsiteManagement/DnnWebsiteManagement.psm1 +++ b/DnnWebsiteManagement/DnnWebsiteManagement.psm1 @@ -8,10 +8,10 @@ Push-Location Import-Module SQLPS -DisableNameChecking Pop-Location -$defaultDNNVersion = $env:DnnWebsiteManagement_DefaultVersion +$defaultDNNVersion = $ModuleSettings.DefaultVersion # $env:DnnWebsiteManagement_DefaultVersion if ($defaultDNNVersion -eq $null) { $defaultDNNVersion = '9.1.0' } -$defaultIncludeSource = $env:DnnWebsiteManagement_DefaultIncludeSource +$defaultIncludeSource = $ModuleSettings.DefaultIncludeSource # $env:DnnWebsiteManagement_DefaultIncludeSource if ($defaultIncludeSource -eq 'false') { $defaultIncludeSource = $false } elseif ($defaultIncludeSource -eq 'no') { $defaultIncludeSource = $false } elseif ($defaultIncludeSource -eq '0') { $defaultIncludeSource = $false } @@ -19,7 +19,7 @@ elseif ($defaultIncludeSource -eq '') { $defaultIncludeSource = $false } elseif ($defaultIncludeSource -eq $null) { $defaultIncludeSource = $false } else { $defaultIncludeSource = $true } -$www = $env:www +$www = $ModuleSettings.WebHome # $env:www if ($www -eq $null) { $www = 'C:\inetpub\wwwroot' } Add-Type -TypeDefinition @" @@ -557,10 +557,10 @@ function getPackageName([System.Version]$version, [DnnProduct]$product) { function findPackagePath([System.Version]$version, [DnnProduct]$product, [string]$type) { $majorVersion = $version.Major switch ($product) { - DnnPlatform { $packagesFolder = "${env:soft}\DNN\Versions\DotNetNuke $majorVersion"; break; } - EvoqContent { $packagesFolder = "${env:soft}\DNN\Versions\Evoq Content Basic"; break; } - EvoqContentEnterprise { $packagesFolder = "${env:soft}\DNN\Versions\Evoq Content"; break; } - EvoqEngage { $packagesFolder = "${env:soft}\DNN\Versions\Evoq Engage"; break; } + DnnPlatform { $packagesFolder = "${ModuleSettings.DnnPackages}\DNN\Versions\DotNetNuke $majorVersion"; break; } + EvoqContent { $packagesFolder = "${ModuleSettings.DnnPackages}\DNN\Versions\Evoq Content Basic"; break; } + EvoqContentEnterprise { $packagesFolder = "${ModuleSettings.DnnPackages}\DNN\Versions\Evoq Content"; break; } + EvoqEngage { $packagesFolder = "${ModuleSettings.DnnPackages}\DNN\Versions\Evoq Engage"; break; } } $packageName = getPackageName $version $product @@ -659,7 +659,8 @@ function Extract-Packages { $version = New-Object System.Version($version) Write-Verbose "Version is $version" - if ($env:soft -eq $null) { + + if ($ModuleSettings.DnnPackages -eq $null) { throw 'You must set the environment variable `soft` to the path that contains your DNN install packages' } @@ -878,6 +879,88 @@ function Watermark-Logos { } } +#-------------------- Module Initialization ----------------------------- + +# ----------------------------------------------------------------------- +# This is the initialization module script that completes +# the settings initialization process. You can override the default +# settings by passing either a file containing the appropriate +# settings in hashtable form as shown in ModuleSettings.ps1 or you +# can pass in a hashtable with the appropriate settings directly. +# ----------------------------------------------------------------------- +function WriteUsageInfo([string]$msg) +{ + if ($msg) { Write-Host $msg } + + Write-Host @" + +You can override individual settings by passing a hashtable with just those +settings defined as shown below: + + Import-Module DnnWebSiteManage -arg @{DefaultVersion = "9.2.2"} + +Any value not specified will be retrieved from the default settings built +into the DNNWebsiteManagement module manifest. + +If you have a sufficiently large number of altered setting, copy the settings +file, modify it and pass the path to your settings file to Import-Module e.g.: + + Import-Module DNNWebsiteManagement -arg "$(Split-Path $profile -parent)\ + ModuleSettings.ps1" + +"@ +} + +function UpdateDefaultSettingsWithUserSettings([hashtable]$userSettings) +{ + # Walk the user specified settings and overwrite the defaults with them + foreach ($key in $userSettings.Keys) + { + if (!$ModuleSettings.ContainsKey($key)) + { + Write-Warning "$key is not a recognized DnnWebsiteManagement setting" + continue + } + + $ModuleSettings.$key = $userSettings.$key + } +} + +if ($Args.Length -gt 0) +{ + + if ($Args[0] -eq 'help') + { + WriteUsageInfo + return + } + elseif ($Args[0] -is [hashtable]) + { + UpdateDefaultSettingsWithUserSettings $Args[0] + } + elseif (Test-Path $Args[0]) + { + $userSettings = & $Args[0] + if ($userSettings -isnot [hashtable]) + { + WriteUsage "'$($args[0])' must return a hashtable instead of a $($userSettings.GetType().FullName)" + return + } + + UpdateDefaultSettingsWithUserSettings $userSettings + } + else + { + WriteUsageInfo "'$($args[0])' is not recognized as either a hashtable or a valid path" + return + } +} + +Remove-Item Function:\WriteUsageInfo +Remove-Item Function:\UpdateDefaultSettingsWithUserSettings + +#--------------------------------------------------------------------------- + Export-ModuleMember Install-DNNResources Export-ModuleMember Remove-DNNSite Export-ModuleMember Rename-DNNSite diff --git a/DnnWebsiteManagement/Initialize.ps1 b/DnnWebsiteManagement/Initialize.ps1 new file mode 100644 index 0000000..ec536ef --- /dev/null +++ b/DnnWebsiteManagement/Initialize.ps1 @@ -0,0 +1,13 @@ +Set-StrictMode -Version 2.0 + +# --------------------------------------------------------------------------- +# The initialization script loads the Module's private data into a global +# variable so that it is available to all nested modules and so that it +# can be easily overridden by the user at run-time. +# --------------------------------------------------------------------------- +$Module = $ExecutionContext.SessionState.Module +if (! $Module) { + Throw ( New-Object System.InvalidOperationException ` + "An active module was not found!") +} +$Global:ModuleSettings = $Module.PrivateData.ModuleSettings \ No newline at end of file diff --git a/DnnWebsiteManagement/ModuleSettings.ps1 b/DnnWebsiteManagement/ModuleSettings.ps1 new file mode 100644 index 0000000..e19734c --- /dev/null +++ b/DnnWebsiteManagement/ModuleSettings.ps1 @@ -0,0 +1,26 @@ +# --------------------------------------------------------------------------- +# You can override individual settings by passing a hashtable with just those +# settings defined as shown below: +# +# Import-Module dnnwebsitemanagement -arg @{defaultVersion = "9.2.2"} +# +# Any value not specified will be retrieved from the default settings built +# into the DnnWebsiteManagement module manifest. +# +# If you have a sufficiently large number of altered setting, copy this file, +# modify it and pass the path to your settings file to Import-Module e.g.: +# +# Import-Module dnnwebsitemanagement -arg "$(Split-Path $profile -parent)\ModuleSettings.ps1" +# +# --------------------------------------------------------------------------- +@{ + DefaultVersion = "9.1.0" + + DefaultIncludeSource = $true + + WebHome = "C:\inetpub\wwwroot" + + DnnPackages = "${Env:ProgramFiles(x86)}\nvisionative\nvQuickSite\Downloads" + + Browser = "Chrome" # The default browser used when calling Start-Browser +} \ No newline at end of file From f2bf4d74ea31cf8054c4bbad688213a3cda77d8e Mon Sep 17 00:00:00 2001 From: Joe Brinkman Date: Fri, 25 Jan 2019 13:32:28 -0500 Subject: [PATCH 2/2] Move all initialization to bottom after settings have loaded --- .../DnnWebsiteManagement.psm1 | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/DnnWebsiteManagement/DnnWebsiteManagement.psm1 b/DnnWebsiteManagement/DnnWebsiteManagement.psm1 index 3626087..9ca7e78 100644 --- a/DnnWebsiteManagement/DnnWebsiteManagement.psm1 +++ b/DnnWebsiteManagement/DnnWebsiteManagement.psm1 @@ -8,20 +8,6 @@ Push-Location Import-Module SQLPS -DisableNameChecking Pop-Location -$defaultDNNVersion = $ModuleSettings.DefaultVersion # $env:DnnWebsiteManagement_DefaultVersion -if ($defaultDNNVersion -eq $null) { $defaultDNNVersion = '9.1.0' } - -$defaultIncludeSource = $ModuleSettings.DefaultIncludeSource # $env:DnnWebsiteManagement_DefaultIncludeSource -if ($defaultIncludeSource -eq 'false') { $defaultIncludeSource = $false } -elseif ($defaultIncludeSource -eq 'no') { $defaultIncludeSource = $false } -elseif ($defaultIncludeSource -eq '0') { $defaultIncludeSource = $false } -elseif ($defaultIncludeSource -eq '') { $defaultIncludeSource = $false } -elseif ($defaultIncludeSource -eq $null) { $defaultIncludeSource = $false } -else { $defaultIncludeSource = $true } - -$www = $ModuleSettings.WebHome # $env:www -if ($www -eq $null) { $www = 'C:\inetpub\wwwroot' } - Add-Type -TypeDefinition @" public enum DnnProduct { @@ -956,6 +942,20 @@ if ($Args.Length -gt 0) } } +$defaultDNNVersion = $ModuleSettings.DefaultVersion # $env:DnnWebsiteManagement_DefaultVersion +if ($defaultDNNVersion -eq $null) { $defaultDNNVersion = '9.1.0' } + +$defaultIncludeSource = $ModuleSettings.DefaultIncludeSource # $env:DnnWebsiteManagement_DefaultIncludeSource +if ($defaultIncludeSource -eq 'false') { $defaultIncludeSource = $false } +elseif ($defaultIncludeSource -eq 'no') { $defaultIncludeSource = $false } +elseif ($defaultIncludeSource -eq '0') { $defaultIncludeSource = $false } +elseif ($defaultIncludeSource -eq '') { $defaultIncludeSource = $false } +elseif ($defaultIncludeSource -eq $null) { $defaultIncludeSource = $false } +else { $defaultIncludeSource = $true } + +$www = $ModuleSettings.WebHome # $env:www +if ($www -eq $null) { $www = 'C:\inetpub\wwwroot' } + Remove-Item Function:\WriteUsageInfo Remove-Item Function:\UpdateDefaultSettingsWithUserSettings