publish PSModuleBase post #17
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: 'PowerShell Module Base for Config Files'
|
||||
title: 'How to get and use your PowerShell Module Base.'
|
||||
date: 2022-03-21T09:14:41+01:00
|
||||
draft: true
|
||||
#draft: true
|
||||
|
||||
categories: ['PowerShell']
|
||||
tags: ['ModuleBase', 'config']
|
||||
@ -23,17 +23,19 @@ tags: ['ModuleBase', 'config']
|
||||
|
||||
## 🖼️ Intro
|
||||
|
||||
Sometimes you want to use a basic config file for your module. This config file should be used to define basic
|
||||
settings without any user specific content. This file could be placed into your PowerShell Module folder.
|
||||
This article explains with a practical example how to determine and use the current module base path:
|
||||
|
||||
Sometimes you want to use a basic config file for your module. This config file could be used to define basic
|
||||
settings for your module. These module wide default settings should placed and shipped within your module.
|
||||
|
||||
Therefore you can use the automatic variable `$MyInvocation`, especially with its properties
|
||||
`$MyInvocation.MyCommand.Module.ModuleBase`. This returns the full path to your current module base folder, which
|
||||
can be used to join a path for your config file.
|
||||
can be used by your function to join a path for your config file.
|
||||
|
||||
## 📑 `.\config.psd1` config file
|
||||
|
||||
Let's assume you start a new module and you need multiple config keys to work with. So you usually create a
|
||||
json or powershell data based config file:
|
||||
**JSON** or **P**ower**S**hell **D**ata format based config file:
|
||||
|
||||
```powershell
|
||||
{
|
||||
@ -54,7 +56,7 @@ json or powershell data based config file:
|
||||
## 🔎 `Get-ConfigValue` helper function
|
||||
|
||||
Now you can use `$MyInvocation.MyCommand.Module.ModuleBase` with a helper function to parse the path to your config
|
||||
file and return your needed values:
|
||||
file and return your stored default values:
|
||||
|
||||
```powershell
|
||||
function Get-ConfigValue {
|
||||
@ -62,14 +64,14 @@ function Get-ConfigValue {
|
||||
.SYNOPSIS
|
||||
Returns the value of a given config file key.
|
||||
|
||||
.PARAMETER ByKey
|
||||
.PARAMETER FromKey
|
||||
Config file key.
|
||||
|
||||
.OUTPUTS
|
||||
[string]
|
||||
|
||||
.EXAMPLE
|
||||
Get-ConfigValue -ByKey 'OutputLevel'
|
||||
Get-ConfigValue -FromKey 'OutputLevel'
|
||||
|
||||
.NOTES
|
||||
Private module helper function. Used by other function within your module.
|
||||
@ -79,26 +81,27 @@ function Get-ConfigValue {
|
||||
[OutputType([string])]
|
||||
param (
|
||||
[Parameter(Mandatory = $true, HelpMessage = 'Existing key from config file.')]
|
||||
[string]$ByKey
|
||||
[string]$FromKey
|
||||
)
|
||||
|
||||
begin { }
|
||||
|
||||
process {
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$ModuleBase = $MyInvocation.MyCommand.Module.ModuleBase
|
||||
$ConfigFile = Join-Path -Path $ModuleBase -ChildPath 'config.psd1'
|
||||
|
||||
if (Test-Path -Path $ConfigFile) {
|
||||
try {
|
||||
$Config = Import-PowerShellDataFile -Path $ConfigFile
|
||||
Write-Output $Config.$ByKey
|
||||
Write-Output $Config.$FromKey
|
||||
}
|
||||
catch {
|
||||
Write-Error -Message $_.Exception.Message -ErrorAction Stop
|
||||
Write-Error -Message $_.Exception.Message
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Error -Message 'Config file not found!' -ErrorAction 'Stop'
|
||||
Write-Error -Message 'Config file not found!'
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,12 +111,12 @@ function Get-ConfigValue {
|
||||
|
||||
## 💭 Final Thoughts
|
||||
|
||||
All you need to to is using the `Get-ConfigValue -ByKey '<example key>'` in your functions to get the any value
|
||||
All you need to to is using the `Get-ConfigValue -FromKey '<example key>'` in your functions to get any value
|
||||
defined in you config file.
|
||||
|
||||
As far as I know, that's the simplest way to get your module root and using it with a config file.
|
||||
|
||||
{{< alert >}}
|
||||
Keep in mind not to store any sensitive data in you config file. User specific data should also be stored in a user
|
||||
context and not in a global module wide config.
|
||||
Do not to store any sensitive data in you config file. User specific data should also be stored in a user
|
||||
context and not in a global module wide config file.
|
||||
{{< /alert >}}
|
||||
|
Loading…
Reference in New Issue
Block a user