stuncloud
2/16/2015 - 1:45 AM

psm1のfunctionを個別のps1ファイルにする

psm1のfunctionを個別のps1ファイルにする

function Convert-ModuleFunctionsToPS1File {
    [CmdletBinding()]
    param(
        [parameter(Mandatory,Position=0,ValueFromPipelineByPropertyName)]
        [string] $Name,
        [parameter(Mandatory,Position=1,ValueFromPipelineByPropertyName)]
        [AllowEmptyString()]
        [string] $ModuleName,
        [parameter(Mandatory,Position=2,ValueFromPipelineByPropertyName)]
        [string] $CommandType,
        [parameter(Mandatory,Position=3,ValueFromPipelineByPropertyName)]
        [ScriptBlock] $ScriptBlock,
        [parameter(Mandatory=$false)]
        [string] $OutDirectory = '.',
        [parameter(Mandatory=$false)]
        [ValidateSet('UNICODE','DEFAULT')]
        [string] $Encoding = 'DEFAULT'
    )
    begin {
        if (! (Test-Path $OutDirectory)) {
            Write-Warning '存在しないディレクトリです'
            break
        }
        $result = @()
    }
    process {
        if ($CommandType -ne 'Function') {
            break
        }
        if (! $ModuleName) {
            $ModuleName = 'module'
        }
        $ModuleDirectory = Join-Path $OutDirectory $ModuleName
        if (! (Test-Path $ModuleDirectory)) {
            md $ModuleDirectory | Out-Null
        }
        $result += $ModuleDirectory
        $OutFile = Join-Path $ModuleDirectory "$($Name).ps1"
        $ScriptBlock | Out-File -FilePath $OutFile -Encoding default
    }
    end {
        return $result | select -Unique | ls
    }
}