Private/Edit-PowershellManifest.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
function Edit-PowershellManifest
{
    [CmdletBinding(ConfirmImpact = "Medium", SupportsShouldProcess)]
    Param(
        [Parameter(Mandatory)]
        $Manifest,

        [Parameter(Mandatory, ValueFromPipeline)]
        $InputObject
    )

    BEGIN
    {
        $path = ConvertTo-Path $Manifest;
        if ($path -and (Test-Path $path -PathType Leaf)) { $Manifest = Get-Content $path | ConvertFrom-Json; }
    }

    PROCESS
    {
        [string]$path = ConvertTo-Path $InputObject;
        if ($path.EndsWith(".psd1") -and (Test-ModuleManifest $path) -and $PSCmdlet.ShouldProcess($InputObject))
        {
            $version = ConvertTo-NcrementVersionNumber $Manifest;
            Update-ModuleManifest $path `
            -ModuleVersion $version.Version `
            -Author ($Manifest.Author | Get-IfNull $env:USERNAME) `
            -CompanyName ($Manifest.Company | Get-IfNull $env:USERNAME) `
            -Description ($Manifest.Description | Get-IfNull $null) `
            -Copyright ($Manifest.Copyright | Get-IfNull $null) `
            -ProjectUri ($Manifest.Website | Get-IfNull $null) `
            -LicenseUri ($Manifest.License | Get-IfNull $null) `
            -IconUri ($Manifest.Icon | Get-IfNull $null) `
            -ReleaseNotes ($Manifest.ReleaseNotes | Get-IfNull $null) `
            -Tags (($Manifest.Tags | Get-IfNull $null).Split(' '));

            if (-not [string]::IsNullOrEmpty($version.Suffix)) { Update-ModuleManifest $path -Prerelease $version.Suffix; }

            return $InputObject;
        }

        return $false;
    }
}

function Get-IfNull
{
    Param(
        [Parameter(ValueFromPipeline)]
        [string]$value,

        [Parameter(Position=0)]
        $fallback
    )

    if ([string]::IsNullOrEmpty($value)) { return $fallback; }
    else { return $value; }
}