Template for building and generating robust powershell modules. A powershell module generator for effiency and those new to writing PS modules to provide a jumping off point for all types of powershell use cases.
git clone https://github.com/0day-bot/PSModuleTemplate.git
cd PSModuleTemplate
pip install -r requirements.txt or simply pip install jinja2 as that and it's dependencies are all that's needed.
./generateModule.py --mName WidgetCorporation --fName WCThe above command will generate a module named WidgetCorporation and provide a skeleton for the module with functions named using the fName (friendly name) provided. The command will overwrite file names in the TemplateModule directory so if multiple modules are needed you will need to clone the repo multiple times.
You can then navigate to the TemplateModule directory and run the Install-Module.ps1 script provided. You can use this in conjunction with Uninstall-Module.ps1 to make changes to the files in the directory and add your own functionality to the module.
Import-Module WidgetCorporation
./Uninstall-Module.ps1
# Make necessary changes
./Install-Module.ps1
# In a new powershell session
Import-Module WidgetCorporation | File | Description |
|---|---|
| generateModule.py | Jinja2 template generator to render powershell files with variable and other key names replaced. |
| Install-Module.ps1 | Load module files into the first directory listed in $env:PSModulePath |
| Uninstall-Module.ps1 | Unload module files into the first directory listed in $env:PSModulePath |
| module_name.psm1 | Template .psm1 file that will have values replaced with new module name and load Public and Private functions from those respective directories. |
| Get-friendly_nameConfiguration | Function that retrieves module config from localappdata location, config can be customized to store any needed values like apikeys or passwords. |
| Set-friendly_nameConfiguration | Function that sets customizable values into json file in localappdata location, by default accepts -Username and -Token parameters, where the token value will be encrypted before being stored in config.json under %LOCALAPPDATA%\module_name |
| Write-Log.ps1 | Logging function that can be used to provide more insight to functions when running them with -Verbose |
| Save-friendly_nameConfiguration.ps1 | function that serializes config to json used by Set-friendly_nameConfiguration |
| Read-friendly_nameConfiguration.ps1 | function that unserializes config from json to use in other functions |
| Protect-friendly_nameToken.ps1 | takes a string value and converts it to a securestring then encrypts it before writing it to stdout, used by Set-friendly_nameConfiguration to encrypt value for -Token |
| Unprotect-friendly_nameToken.ps1 | This function should be used in other functions that would need to unencrypt the token value from memory for usage in things like API calls or username/password logins |
Please submit a pull request with any ideas. :)