# encoding: ascii
# api: powershell
# title: Check Modules path.
# description: Today I had spent a lot of time troubleshooting one module. After few checks I realized that it was simple typo that prevented PS from seeing my module in correct way. So here is function for you to avoid same problems… ;)
# version: 0.1
# type: function
# author: Bartek Bielawski
# license: CC0
# function: Update-ModulePath
# x-poshcode-id: 3073
# x-archived: 2011-12-04T06:32:18
# x-published: 2011-11-29T05:01:00
#
#
function Update-ModulePath {
<#
.Synopsis
Command insures that path and the name of psm1 file are alike.
.Description
This function should help to troubleshoot modules. It loooks up path that should contain modules.
For each .psm1 file found it checks if parent folder containing this file has same name.
I created this function after I was banging my head for few hours why my module won't show up.
After several approaches it came out clear that it was simple TYPO in file.psm1 name...
.Example
Update-ModulePath -Fix Files
Will look all files and rename .psm1 files to match parent folder
.Example
Update-ModulePath -Fix Folder
Will look all files and rename parent folder to match file names
.Parameter Fix
Switch to decide if we prefer to name folders or files to get all matches.
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[ValidateSet("Files","Folders")]
[string]$Fix
)
<# Steps to be taken:
* enumerate all .psm1 files
* check which one is misconfigured
* rename file/ folder to fix this issue
#>
ForEach ($ModuleFile in @(Get-ChildItem -Recurse @($($env:PSModulePath).Split(";")) -filter *.psm1)) {
if (($file = $ModuleFile.BaseName) -eq ($folder = $ModuleFile.Directory.ToString().Split('\')[-1])) {
Write-Verbose "$Modulefile.Name is fine"
} else {
Write-Verbose "$ModuleFile.Name is BAD"
switch ($Fix) {
"Files" {
Write-Verbose "We rename file $file"
$OldName = $ModuleFile.FullName
$NewName = $OldName -replace "$file.psm1$", "$folder.psm1"
}
"Folders" {
Write-Verbose "We rename folder $folder"
$OldName = $ModuleFile.FullName -replace "\\$file.psm1", ""
$NewName = $OldName -replace "$folder$", $file
}
}
Write-Host "Renaming $OldName to $NewName"
Rename-Item -Force $OldName $NewName
}
}
}