Private/Get-Theme.ps1
function Get-Theme { param( [string[]] $ThemePath = $null ) if ($ThemePath -eq $null) { $ThemePath = @( Resolve-Path "$HOME\.psconsoletheme\themes" -ErrorAction Ignore Resolve-Path "$env:ALLUSERSPROFILE\.psconsoletheme\themes" -ErrorAction Ignore Resolve-Path "$PSScriptRoot\..\themes" ) } $themes = @{} $defaultDisplaySet = 'Name', 'Description' $defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet',[string[]]$defaultDisplaySet) $PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet) foreach ($path in $ThemePath) { $configFiles = Get-ChildItem $path "*.json" foreach ($config in $configFiles) { try { $theme = Import-ThemeConfiguration $config.FullName -ErrorAction Stop if ($theme) { if ($themes.ContainsKey($theme.name)) { Write-Warning ($theme_msgs.warning_ambiguous_theme -f $theme.name, $config.FullName) break } $theme | Add-Member path $config.FullName $theme | Add-Member MemberSet PSStandardMembers $PSStandardMembers $theme.PSObject.TypeNames.Insert(0, 'PSConsoleTheme.Theme') $themes.Add($theme.name, $theme) } } catch { Write-Warning $_ } } } $Script:PSConsoleTheme.ThemesLoaded = $true $themes } DATA theme_msgs { ConvertFrom-StringData @' error_invalid_path = Could not find path {0}. warning_ambiguous_theme = Ambiguous theme name '{0}'. Ignoring {1} '@ } |