Public/Get-ProjectName.ps1
function Get-ProjectName { <# .SYNOPSIS Get the name for this project .FUNCTIONALITY CI/CD .DESCRIPTION Get the name for this project Evaluates based on the following scenarios: * Subfolder with the same name as the current folder * Subfolder with a <subfolder-name>.psd1 file in it * Current folder with a <currentfolder-name>.psd1 file in it .PARAMETER Path Path to project root. Defaults to the current working path .NOTES We assume the following: Your repo name is the name of the project You store a subfolder for your project in the repo .EXAMPLE Get-ModuleName #> [cmdletbinding()] param( $Path = $PWD.Path ) $CurrentFolder = Split-Path $Path -Leaf $ExpectedPath = Join-Path -Path $Path -ChildPath $CurrentFolder if(Test-Path $ExpectedPath) { $CurrentFolder } else { # Look for properly organized modules $ProjectPaths = Get-ChildItem $Path -Directory | Where-Object { Test-Path $(Join-Path $_.FullName "$($_.name).psd1") } | Select -ExpandProperty Fullname if( @($ProjectPaths).Count -gt 1 ) { Write-Warning "Found more than one project path via subfolders with psd1 files" Split-Path $ProjectPaths -Leaf } elseif( @($ProjectPaths).Count -eq 1 ) { Split-Path $ProjectPaths -Leaf } #PSD1 in root of project - ick, but happens. elseif( Test-Path "$ExpectedPath.psd1" ) { $CurrentFolder } else { Write-Warning "Could not find a project from $($Path)" } } } |