Notices: This section not yet converted to new layout. Download stats are rolling back out.

PlatyPS (PowerShell Module)

0.14.0

Package test results are passing.

This package was approved as a trusted package on 6/7/2019.

PlatyPS provides a way to:

  • Write PowerShell External Help in Markdown
  • Generate markdown help (example) for your existing modules
  • Keep markdown help up-to-date with your code

Markdown help docs can be generated from old external help files (also known as MAML-xml help), the command objects (reflection), or both.

PlatyPS can also generate cab files for Update-Help.

Why?

Traditionally PowerShell external help files have been authored by hand or using complex tool chains and rendered as MAML XML for use as console help. MAML is cumbersome to edit by hand, and common tools and editors don't support it for complex scenarios like they do with Markdown. PlatyPS is provided as a solution for allow documenting PowerShell help in any editor or tool that supports Markdown.

An additional challenge PlatyPS tackles, is to handle PowerShell documentation for complex scenarios (e.g. very large, closed source, and/or C#/binary modules) where it may be desirable to have documentation abstracted away from the codebase. PlatyPS does not need source access to generate documentation.

Markdown is designed to be human-readable, without rendering. This makes writing and editing easy and efficient. Many editors support it (Visual Studio Code, Sublime Text, etc), and many tools and collaboration platforms (GitHub, Visual Studio Online) render the Markdown nicely.

NOTE: This is an automatically updated package. If you find it is out of date by more than a week, please contact the maintainer(s) and let them know the package is no longer updating correctly.

To install PlatyPS (PowerShell Module), run the following command from the command line or from PowerShell:

C:\> choco install platyps

To upgrade PlatyPS (PowerShell Module), run the following command from the command line or from PowerShell:

C:\> choco upgrade platyps

Files

Hide
  • tools\.skipAutoUninstaller
  • tools\chocolateyBeforeModify.ps1 Show
    $ErrorActionPreference = 'Stop'
    
    $moduleName = $env:ChocolateyPackageName      # this could be different from package name
    Remove-Module -Name $moduleName -Force -ErrorAction SilentlyContinue
  • tools\chocolateyInstall.ps1 Show
    $ErrorActionPreference = 'Stop'
    
    $toolsDir   = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
    $moduleName = 'PlatyPS'  # this may be different from the package name and different case
    
    # module may already be installed outside of Chocolatey
    Remove-Module -Name $moduleName -Force -ErrorAction SilentlyContinue
    
    $sourcePath = Join-Path -Path $toolsDir -ChildPath "$modulename\*"
    $destPath   = Join-Path -Path $env:ProgramFiles -ChildPath "WindowsPowerShell\Modules\$moduleName"
    
    if ($PSVersionTable.PSVersion.Major -ge 5)
    {
        $manifestFile = Join-Path -Path $toolsDir -ChildPath "$moduleName\$moduleName.psd1"
        Write-Verbose "Searching manifest file '$manifestFile' for module version."
        $verFound = Get-Content -Path $manifestFile -Raw | ForEach-Object { $_ -match '\s*ModuleVersion\s*=\s*[''|""]{1}(?<version>[\d|\.]+)[''|""]{1}' }
        if (-not $verFound) {
            throw "Cannot find 'ModuleVersion' in manifest file '$manifestFile'."
        }
    
        Write-Verbose "Module version '$($matches.version)' found."
        $destPath = Join-Path -Path $destPath -ChildPath $matches.version
    }
    
    Write-Verbose "Creating destination directory '$destPath' for module."
    New-Item -Path $destPath -ItemType Directory -Force -ErrorAction SilentlyContinue | Out-Null
    
    Write-Verbose "Moving '$moduleName' files from '$sourcePath' to '$destPath'."
    Move-Item -Path $sourcePath -Destination $destPath -Force
    
    if ($PSVersionTable.PSVersion.Major -lt 4)
    {
        $modulePaths = [Environment]::GetEnvironmentVariable('PSModulePath', 'Machine') -split ';'
        if ($modulePaths -notcontains $destPath)
        {
            Write-Verbose "Adding '$destPath' to PSModulePath."
            $newModulePath = @($destPath, $modulePaths) -join ';'
    
            [Environment]::SetEnvironmentVariable('PSModulePath', $newModulePath, 'Machine')
            $env:PSModulePath = $newModulePath
        }
    }
  • tools\chocolateyUninstall.ps1 Show
    $ErrorActionPreference = 'Stop'
    
    $moduleName = $env:ChocolateyPackageName
    $sourcePath = Join-Path -Path $env:ProgramFiles -ChildPath "WindowsPowerShell\Modules\$moduleName"
    
    Write-Verbose "Removing all version of '$moduleName' from '$sourcePath'."
    Remove-Item -Path $sourcePath -Recurse -Force -ErrorAction SilentlyContinue
    
    if ($PSVersionTable.PSVersion.Major -lt 4) {
        $modulePaths = [Environment]::GetEnvironmentVariable('PSModulePath', 'Machine') -split ';'
    
        Write-Verbose "Removing '$sourcePath' from PSModulePath."
        $newModulePath = $modulePaths | Where-Object { $_ -ne $sourcePath }
    
        [Environment]::SetEnvironmentVariable('PSModulePath', $newModulePath, 'Machine')
        $env:PSModulePath = $newModulePath
    }
  • tools\LICENSE.txt Show
    From: https://github.com/PowerShell/platyPS/blob/master/LICENSE
    
    LICENSE
    
    The MIT License (MIT)
    
    Copyright (c) 2015 Microsoft Corporation.
    
    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:
    
    The above copyright notice and this permission notice shall be included in
    all copies or substantial portions of the Software.
    
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    THE SOFTWARE.
  • tools\PlatyPS\docs\about_platyPS.md Show
    # platyPS
    ## about_platyPS
    
    # SHORT DESCRIPTION
    Write PowerShell External Help in Markdown.
    
    # LONG DESCRIPTION
    
    PlatyPS provides a way to
    
    - Write PowerShell External Help in Markdown
    - Generate markdown help (example) for your existing modules
    - Keep markdown help up-to-date with your code
    
    Markdown help docs can be generated from old external help files (also known as MAML-xml help),
    the command objects (reflection), or both.
    
    PlatyPS can also generate cab files for Update-Help.
    
  • tools\PlatyPS\docs\Get-HelpPreview.md Show
    ---
    external help file: platyPS-help.xml
    Module Name: platyPS
    online version: https://github.com/PowerShell/platyPS/blob/master/docs/Get-HelpPreview.md
    schema: 2.0.0
    ---
    
    # Get-HelpPreview
    
    ## SYNOPSIS
    Displays your generated external help as **Get-Help** output.
    
    ## SYNTAX
    
    ```
    Get-HelpPreview -Path <String[]> [-ConvertNotesToList] [-ConvertDoubleDashLists] [<CommonParameters>]
    ```
    
    ## DESCRIPTION
    The **Get-HelpPreview** cmdlet displays your generated external help as **Get-Help** output.
    Specify one or more files in Microsoft Assistance Markup Language (MAML) format.
    
    ## EXAMPLES
    
    ### Example 1: Preview the PlatyPS help
    ```
    PS C:\> $Help = Get-HelpPreview -Path ".\out\platyPS\en-US\PlatyPS-help.xml"
    
    PS C:\> $Help.Name
    
    Get-HelpPreview
    Get-MarkdownMetadata
    New-ExternalHelp
    New-ExternalHelpCab
    New-MarkdownHelp
    Update-MarkdownHelp
    Update-MarkdownHelpModule
    Update-MarkdownHelpSchema
    ```
    
    The first command creates a **Help** object for the the specified MAML file.
    The command stores it in the $Help variable.
    
    The second command displays the **Name** property for each of the objects in $Help.
    
    ## PARAMETERS
    
    ### -Path
    Specifies an array of paths of MAML external help files.
    
    ```yaml
    Type: String[]
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: Named
    Default value: None
    Accept pipeline input: True (ByValue)
    Accept wildcard characters: True
    ```
    
    ### -ConvertNotesToList
    Indicates that this cmldet formats multiple paragraph items in the **NOTES** section as single list items.
    This output follows TechNet formatting.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -ConvertDoubleDashLists
    Indicates that this cmldet converts double-hyphen list bullets into single-hyphen bullets.
    Double-hyphen lists are common in Windows PowerShell documentation.
    Markdown accepts single-hyphens for lists.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### CommonParameters
    This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
    
    ## INPUTS
    
    ### String[]
    You can pipe an array of paths to this cmdlet.
    
    ## OUTPUTS
    
    ### Help Object
    This cmdlet returns a **Help** object, which is the same output as **Get-Help**.
    
    ## NOTES
    
    ## RELATED LINKS
    
  • tools\PlatyPS\docs\Get-MarkdownMetadata.md Show
    ---
    external help file: platyPS-help.xml
    Module Name: platyPS
    online version: https://github.com/PowerShell/platyPS/blob/master/docs/Get-MarkdownMetadata.md
    schema: 2.0.0
    ---
    
    # Get-MarkdownMetadata
    
    ## SYNOPSIS
    Gets metadata from the header of a markdown file.
    
    ## SYNTAX
    
    ### FromPath (Default)
    ```
    Get-MarkdownMetadata -Path <String[]> [<CommonParameters>]
    ```
    
    ### FromMarkdownString
    ```
    Get-MarkdownMetadata -Markdown <String> [<CommonParameters>]
    ```
    
    ## DESCRIPTION
    The **Get-MarkdownMetadata** cmdlet gets the metadata from the header of a markdown file that is supported by PlatyPS.
    The command returns the metadata as a hash table.
    
    PlatyPS stores metadata in the header block of a markdown file as key-value pairs of strings.
    By default, PlatyPS stores help file name and markdown schema version.
    
    Metadata section can contain user-provided values for use with external tools.
    The [New-ExternalHelp](New-ExternalHelp.md) cmdlet ignores this metadata.
    
    ## EXAMPLES
    
    ### Example 1: Get metadata from a file
    ```
    PS C:\> Get-MarkdownMetadata -Path ".\docs\Get-MarkdownMetadata.md"
    
    Key                Value
    ---                -----
    external help file platyPS-help.xml
    schema             2.0.0
    ```
    
    This command retrieves metadata from a markdown file.
    
    ### Example 2: Get metadata from a markdown string
    ```
    PS C:\> $Markdown = Get-Content -Path ".\docs\Get-MarkdownMetadata.md" -Raw
    PS C:\> Get-MarkdownMetadata -Markdown $Markdown
    
    Key                Value
    ---                -----
    external help file platyPS-help.xml
    schema             2.0.0
    ```
    
    The first command gets the contents of a file, and stores them in the $Markdown variable.
    
    The second command retrieves metadata from the string in $Metadata.
    
    ### Example 3: Get metadata from all files in a folder
    ```
    PS C:\> Get-MarkdownMetadata -Path ".\docs"
    
    Key                Value
    ---                -----
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0
    ```
    
    This command gets metadata from each of the markdown files in the .\docs folder.
    
    ## PARAMETERS
    
    ### -Path
    Specifies an array of paths of markdown files or folders.
    
    ```yaml
    Type: String[]
    Parameter Sets: FromPath
    Aliases:
    
    Required: True
    Position: Named
    Default value: None
    Accept pipeline input: True (ByPropertyName, ByValue)
    Accept wildcard characters: True
    ```
    
    ### -Markdown
    Specifies a string that contains markdown formatted text.
    
    ```yaml
    Type: String
    Parameter Sets: FromMarkdownString
    Aliases:
    
    Required: True
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### CommonParameters
    This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
    
    ## INPUTS
    
    ### String[]
    You can pipe an array of paths to this cmdlet.
    
    ## OUTPUTS
    
    ### Dictionary[String, String]
    The cmdlet returns a **Dictionary\[String, String\]** object.
    The dictionary contains key-value pairs found in the markdown metadata block.
    
    ## NOTES
    
    ## RELATED LINKS
    
  • tools\PlatyPS\docs\Merge-MarkdownHelp.md Show
    ---
    external help file: platyPS-help.xml
    Module Name: platyPS
    online version:
    schema: 2.0.0
    ---
    
    # Merge-MarkdownHelp
    
    ## SYNOPSIS
    Merge multiple markdown versions of the same cmdlet into a single markdown file.
    
    ## SYNTAX
    
    ```
    Merge-MarkdownHelp [-Path] <String[]> [-OutputPath] <String> [-Encoding <Encoding>] [-ExplicitApplicableIfAll]
     [-Force] [[-MergeMarker] <String>] [<CommonParameters>]
    ```
    
    ## DESCRIPTION
    Similar modules, or different versions of the same module, often contain duplicate content.
    
    Merge-MarkdownHelp merges the multiple markdown files into a single markdown file.
    It uses the `applicable:` yaml metadata field to identify what versions or tags are applicable.
    It acts on two levels: for the whole cmdlet and for individual parameters.
    
    The resulting markdown contains the `applicable:` tags as well as all of the content of the original markdown files.
    Duplicate content is simply ignored.
    Content that is unique to each file is merged using **merge markers**, followed by a comma-separated list of applicable tags.
    A **merge marker** is a string of text that acts as a marker to describe the content that was merged.
    The default **merge marker** text consists of three exclamation points !!! however this can be changed to any relevant text using the **-MergeMarker** flag.
    
    ## EXAMPLES
    
    ### Example 1
    The Test-CsPhoneBootstrap.md cmdlet is included in both Lync Server 2010 and Lync Server 2013.
    Much of the content is duplicated and thus we want to have a single file for the cmdlet with unique content merged from each individual file.
    
    ```
    PS C:\> Merge-MarkdownHelp -Path @('Lync Server 2010\Test-CsPhoneBootstrap.md', 'Lync Server 2013\Test-CsPhoneBootstrap.md') -OutputPath lync
    ```
    
    The resulting file will be located at lync\Test-CsPhoneBootstrap.md
    
    ## PARAMETERS
    
    ### -Encoding
    Specifies the character encoding for your external help file.
    Specify a **System.Text.Encoding** object.
    For more information, see [Character Encoding in the .NET Framework](https://msdn.microsoft.com/en-us/library/ms404377.aspx) in the Microsoft Developer Network.
    For example, you can control Byte Order Mark (BOM) preferences.
    For more information, see [Using PowerShell to write a file in UTF-8 without the BOM](http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom) at the Stack Overflow community.
    
    ```yaml
    Type: Encoding
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: UTF8 without BOM
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -ExplicitApplicableIfAll
    Always write out full list of applicable tags.
    By default cmdlets and parameters that are present in all variations don't get an application tag.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Force
    Indicates that this cmdlet overwrites an existing file that has the same name.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -MergeMarker
    String to be used as a merge text indicator.
    Applicable tag list would be included after the marker
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: 3
    Default value: '!!! '
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -OutputPath
    Specifies the path of the folder where this cmdlet creates the combined markdown help files.
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: 1
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Path
    Specifies an array of paths of markdown files or folders.
    This cmdlet creates combined markdown help based on these files and folders.
    
    ```yaml
    Type: String[]
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: 0
    Default value: None
    Accept pipeline input: True (ByValue)
    Accept wildcard characters: True
    ```
    
    ### CommonParameters
    This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
    
    ## INPUTS
    
    ### System.String[]
    
    ## OUTPUTS
    
    ### System.IO.FileInfo[]
    
    ## NOTES
    
    ## RELATED LINKS
    
  • tools\PlatyPS\docs\New-ExternalHelp.md Show
    ---
    external help file: platyPS-help.xml
    Module Name: platyPS
    online version: https://github.com/PowerShell/platyPS/blob/master/docs/New-ExternalHelp.md
    schema: 2.0.0
    ---
    
    # New-ExternalHelp
    
    ## SYNOPSIS
    Creates external help file based on markdown supported by PlatyPS.
    
    ## SYNTAX
    
    ```
    New-ExternalHelp -Path <String[]> -OutputPath <String> [-ApplicableTag <String[]>] [-Encoding <Encoding>]
     [-MaxAboutWidth <Int32>] [-ErrorLogFile <String>] [-Force] [-ShowProgress] [<CommonParameters>]
    ```
    
    ## DESCRIPTION
    The **New-ExternalHelp** cmdlet creates an external help file based on markdown help files supported by PlatyPS.
    You can ship this with a module to provide help by using the **Get-Help** cmdlet.
    
    If the markdown files that you specify do not follow the PlatyPS [Schema](https://github.com/PowerShell/platyPS/blob/master/platyPS.schema.md), this cmdlet returns error messages.
    
    ## EXAMPLES
    
    ### Example 1: Create external help based on the contents of a folder
    ```
    PS C:\> New-ExternalHelp -Path ".\docs" -OutputPath "out\platyPS\en-US"
    
        Directory: D:\Working\PlatyPS\out\platyPS\en-US
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/19/2016  12:32 PM          46776 platyPS-help.xml
    ```
    
    This command creates an external help file in the specified location.
    This command uses the best practice that the folder name includes the locale.
    
    ### Example 2: Create help that uses custom encoding
    ```
    PS C:\> New-ExternalHelp -Path ".\docs" -OutputPath "out\PlatyPS\en-US" -Force -Encoding ([System.Text.Encoding]::Unicode)
    
    
        Directory: D:\Working\PlatyPS\out\PlatyPS\en-US
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:34 PM         132942 platyPS-help.xml
    ```
    
    This command creates an external help file in the specified location.
    This command specifies the *Force* parameter, therefore, it overwrites an existing file.
    The command specifies Unicode encoding for the created file.
    
    ### Example 3: Write warnings and errors to file
    ```
    PS C:\> New-ExternalHelp -Path ".\docs" -OutputPath "out\platyPS\en-US" -ErrorLogFile ".\WarningsAndErrors.json"
    
        Directory: D:\Working\PlatyPS\out\platyPS\en-US
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/19/2016  12:32 PM          46776 platyPS-help.xml
    ```
    
    This command creates an external help file in the specified location.
    This command uses the best practice that the folder name includes the locale.
    This command writes the warnings and errors to the WarningsAndErrors.json file.
    
    ## PARAMETERS
    
    ### -OutputPath
    Specifies the path of a folder where this cmdlet saves your external help file.
    The folder name should end with a locale folder, as in the following example: `.\out\PlatyPS\en-US\`.
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Encoding
    Specifies the character encoding for your external help file.
    Specify a **System.Text.Encoding** object.
    For more information, see [Character Encoding in the .NET Framework](https://msdn.microsoft.com/en-us/library/ms404377.aspx) in the Microsoft Developer Network.
    For example, you can control Byte Order Mark (BOM) preferences.
    For more information, see [Using PowerShell to write a file in UTF-8 without the BOM](http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom) at the Stack Overflow community.
    
    ```yaml
    Type: Encoding
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: UTF8 without BOM
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Force
    Indicates that this cmdlet overwrites an existing file that has the same name.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Path
    Specifies an array of paths of markdown files or folders.
    This cmdlet creates external help based on these files and folders.
    
    ```yaml
    Type: String[]
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: Named
    Default value: None
    Accept pipeline input: True (ByPropertyName, ByValue)
    Accept wildcard characters: True
    ```
    
    ### -ApplicableTag
    Specify array of tags to use as a filter.
    If cmdlet has `applicable` in the yaml metadata and none of the passed tags is
    mentioned there, cmdlet would be ignored in the generated help.
    Same applies to the Parameter level `applicable` yaml metadata.
    If `applicable` is ommited, cmdlet or parameter would be always present.
    See [design issue](https://github.com/PowerShell/platyPS/issues/273) for more details.
    
    ```yaml
    Type: String[]
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -MaxAboutWidth
    Specifies the maximimum line length when generating "about" help text files.
    (See New-MarkdownAboutHelp.) Other help file types are not affected by this
    parameter.
    
    Lines inside code blocks are not wrapped at all and are not affected by the
    MaxAboutWidth parameter.
    
    ```yaml
    Type: Int32
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: 80
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -ErrorLogFile
    The path where this cmdlet will save formatted results log file.
    
    The path must include the location and name of the folder and file name with
    the json extension. The JSON object contains three properties, Message, FilePath,
    and Severity (Warning or Error).
    
    If this path is not provided, no log will be generated.
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -ShowProgress
    Display progress bars under parsing existing markdown files.
    
    If this is used generating of help is much slower.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### CommonParameters
    This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
    
    ## INPUTS
    
    ### String[]
    You can pipe an array of paths to this cmdlet.
    
    ## OUTPUTS
    
    ### System.IO.FileInfo[]
    This cmdlet returns a **FileInfo[]** object for created files.
    
    ## NOTES
    
    ## RELATED LINKS
    
    [PowerShell V2 External MAML Help](https://blogs.msdn.microsoft.com/powershell/2008/12/24/powershell-v2-external-maml-help/)
    
    [Schema](https://github.com/PowerShell/platyPS/blob/master/platyPS.schema.md)
    
  • tools\PlatyPS\docs\New-ExternalHelpCab.md Show
    ---
    external help file: platyPS-help.xml
    Module Name: platyPS
    online version: https://github.com/PowerShell/platyPS/blob/master/docs/New-ExternalHelpCab.md
    schema: 2.0.0
    ---
    
    # New-ExternalHelpCab
    
    ## SYNOPSIS
    Generates a .cab file.
    
    ## SYNTAX
    
    ```
    New-ExternalHelpCab -CabFilesFolder <String> -LandingPagePath <String> -OutputFolder <String>
     [-IncrementHelpVersion] [<CommonParameters>]
    ```
    
    ## DESCRIPTION
    The **New-ExternalHelpCab** cmdlet generates a .cab file that contains all the non-recursive content in a folder.
    This cmdlet compresses the provided files.
    
    We recommend that you provide as content only about_ topics and the output from the [New-ExternalHelp](New-ExternalHelp.md) cmdlet to this cmdlet.
    
    This cmdlet uses metadata stored in the module markdown file to name your .cab file.
    This naming matches the pattern that the Windows PowerShell help system requires for use as updatable help.
    This metadata is part of the module file created by using the [New-MarkdownHelp](New-MarkdownHelp.md) cmdlet with the *WithModulePage* parameter.
    
    This cmdlet also generates or updates an existing helpinfo.xml file.
    That file provides versioning and locale details to the Windows PowerShell help system.
    
    ## EXAMPLES
    
    ### Example 1: Create a CAB file
    ```
    PS C:\> New-ExternalHelpCab -CabFilesFolder 'C:\Module\ExternalHelpContent' -LandingPagePath 'C:\Module\ModuleName.md' -OutputPath 'C:\Module\Cab\'
    ```
    
    This commmand creates a .cab file that contains the content folder files.
    The .cab file is named for updatable help based on metadata.
    The command places the .cab file in the output folder.
    
    ## PARAMETERS
    
    ### -CabFilesFolder
    Specifies the folder that contains the help content that this cmdlet packages into a .cab file.
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -LandingPagePath
    Specifies the full path of the Module Markdown file that contains all the metadata required to name the .cab file.
    For the required metadata, run **New-MarkdownHelp** with the *WithLandingPage* parameter.
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -OutputFolder
    Specifies the location of the .cab file and helpinfo.xml file that this cmdlet creates.
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -IncrementHelpVersion
    Automatically increment the help version in the module markdown file.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### CommonParameters
    This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
    
    ## INPUTS
    
    ### None
    You cannot pipe values to this cmdlet.
    
    ## OUTPUTS
    
    ### None
    This cmdlet does not generate output.
    The cmldet saves its results in the output folder that the *OutputPath* parameter specifies.
    
    ## NOTES
    
    ## RELATED LINKS
    
    [New-ExternalHelp](New-ExternalHelp.md)
    [New-MarkdownAboutHelp](New-MarkdownAboutHelp.md)
    
  • tools\PlatyPS\docs\New-MarkdownAboutHelp.md Show
    ---
    external help file: platyPS-help.xml
    Module Name: platyPS
    online version: https://github.com/PowerShell/platyPS/blob/master/docs/New-MarkdownAboutHelp.md
    schema: 2.0.0
    ---
    
    # New-MarkdownAboutHelp
    
    ## SYNOPSIS
    Generates a new About Topic MD file from template.
    
    ## SYNTAX
    
    ```
    New-MarkdownAboutHelp [-OutputFolder] <String> [[-AboutName] <String>] [<CommonParameters>]
    ```
    
    ## DESCRIPTION
    The **New-MarkdownAboutHelp** cmdlet generates a Markdown file that is prepopulated with the standard elements of an About Topic.
    The cmdlet copies the template MD, renames headers and file name according to the **AboutName** parameter,
    and deposits the file in the directory designated by the **OutputFoler** parameter.
    
    The About Topic can be converted to Txt format.
    About topics must be in txt format or the PowerShell Help engine will not be able to parse the document.
    Use the [New-ExternalHelp](New-ExternalHelp.md) cmdlet to convert About Topic markdown files into About Topic txt files.
    
    ## EXAMPLES
    
    ### Example 1
    ```
    PS C:\> New-MarkdownAboutHelp -OutputFolder C:\Test -AboutName
    PS C:\> Get-ChildItem C:\Test
    
        Directory: C:\Test
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        7/13/2016   2:12 PM           1491 TestAboutTopic.md
    ```
    
    Create and display file info for PowerShell About Topic Markdown File.
    
    ### Example 2
    ```
    PS C:\> New-ExternalHelp -Path C:\Test\ -OutputPath C:\Test
    
    
        Directory: C:\Test
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        7/13/2016   2:15 PM           1550 TestAboutTopic.txt
    ```
    
    Create PowerShell About Topic Txt file from existing Markdown About file.
    
    ## PARAMETERS
    
    ### -AboutName
    The name of the about topic.
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: 1
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -OutputFolder
    The directory to create the about topic in.
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: 0
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### CommonParameters
    This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
    
    ## INPUTS
    
    ### None
    
    ## OUTPUTS
    
    ### System.Object
    This cmdlet returns a object for created files.
    
    ## NOTES
    The about topics will need to be added to a cab file to leverage updatable help.
    
    ## RELATED LINKS
    
    [New-ExternalHelp](New-ExternalHelp.md)
    
    [New-ExternalHelpCab](New-ExternalHelpCab.md)
    
  • tools\PlatyPS\docs\New-MarkdownHelp.md Show
    ---
    external help file: platyPS-help.xml
    Module Name: platyPS
    online version: https://github.com/PowerShell/platyPS/blob/master/docs/New-MarkdownHelp.md
    schema: 2.0.0
    ---
    
    # New-MarkdownHelp
    
    ## SYNOPSIS
    Creates help in markdown format.
    
    ## SYNTAX
    
    ### FromModule
    ```
    New-MarkdownHelp -Module <String[]> [-Session <PSSession>] [-Force] [-AlphabeticParamsOrder]
     [-Metadata <Hashtable>] -OutputFolder <String> [-NoMetadata] [-UseFullTypeName] [-Encoding <Encoding>]
     [-WithModulePage] [-ModulePagePath <String>] [-Locale <String>] [-HelpVersion <String>] [-FwLink <String>]
     [-ExcludeDontShow] [<CommonParameters>]
    ```
    
    ### FromCommand
    ```
    New-MarkdownHelp -Command <String[]> [-Session <PSSession>] [-Force] [-AlphabeticParamsOrder]
     [-Metadata <Hashtable>] [-OnlineVersionUrl <String>] -OutputFolder <String> [-NoMetadata] [-UseFullTypeName]
     [-Encoding <Encoding>] [-ExcludeDontShow] [<CommonParameters>]
    ```
    
    ### FromMaml
    ```
    New-MarkdownHelp -MamlFile <String[]> [-ConvertNotesToList] [-ConvertDoubleDashLists] [-Force]
     [-AlphabeticParamsOrder] [-Metadata <Hashtable>] -OutputFolder <String> [-NoMetadata] [-UseFullTypeName]
     [-Encoding <Encoding>] [-WithModulePage] [-ModulePagePath <String>] [-Locale <String>] [-HelpVersion <String>]
     [-FwLink <String>] [-ModuleName <String>] [-ModuleGuid <String>] [-ExcludeDontShow] [<CommonParameters>]
    ```
    
    ## DESCRIPTION
    The **New-MarkdownHelp** cmdlet creates help in markdown format based on a module, a command, or a file in Microsoft Assistance Markup Language (MAML) format.
    
    ## EXAMPLES
    
    ### Example 1: Create help from a command
    ```
    PS C:\> function Command03 {param([string]$Value)}
    PS C:\> New-MarkdownHelp -Command "Command03" -OutputFolder ".\docs"
    
    
        Directory: D:\Working\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:53 PM            664 Command03.md
    ```
    
    The first command creates a function named Command03 by using standard Windows PowerShell syntax.
    
    The second command creates help for that stub function in the .\docs folder.
    
    ### Example 2: Create help from a module
    ```
    PS C:\> Import-Module -Module "PlatyPS"
    PS C:\> New-MarkdownHelp -Module "PlatyPS" -OutputFolder ".\docs" -Force
    
    
        Directory: D:\Working\PlatyPS\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:54 PM           1496 Get-HelpPreview.md
    -a----        5/22/2016   6:54 PM           3208 Get-MarkdownMetadata.md
    -a----        5/22/2016   6:54 PM           3059 New-ExternalHelp.md
    -a----        5/22/2016   6:54 PM           2702 New-ExternalHelpCab.md
    -a----        5/22/2016   6:54 PM           6234 New-MarkdownHelp.md
    -a----        5/22/2016   6:54 PM           2346 Update-MarkdownHelp.md
    -a----        5/22/2016   6:54 PM           1633 Update-MarkdownHelpModule.md
    -a----        5/22/2016   6:54 PM           1630 Update-MarkdownHelpSchema.md
    ```
    
    The first command loads the PlatyPS module into the current session by using the **Import-Module** cmdlet.
    
    The second command creates help for all the cmdlets in the PlatyPS module.
    It stores them in the .\docs folder.
    This command specifies the *Force* parameter.
    Therefore, it overwrites existing help markdown files that have the same name.
    
    ### Example 3: Create help from an existing MAML file
    ```
    PS C:\> New-MarkdownHelp -OutputFolder "D:\PSReadline\docs" -MamlFile 'C:\Program Files\WindowsPowerShell\Modules\PSReadline\1.1\en-US\Microsoft.PowerShell.PSReadline.dll-help.xml'
    
        Directory: D:\PSReadline\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:56 PM           7443 Get-PSReadlineKeyHandler.md
    -a----        5/22/2016   6:56 PM           3586 Get-PSReadlineOption.md
    -a----        5/22/2016   6:56 PM           1549 Remove-PSReadlineKeyHandler.md
    -a----        5/22/2016   6:56 PM           5947 Set-PSReadlineKeyHandler.md
    -a----        5/22/2016   6:56 PM          15320 Set-PSReadlineOption.md
    ```
    
    This command creates help in markdown format for the specified help MAML file.
    You do not have to load the module, as in the previous example.
    If the module is already loaded, this command creates help based on the MAML file, not on the currently installed module.
    
    ### Example 4: Create help from an existing MAML file for use in a CAB file
    ```
    PS C:\> New-MarkdownHelp -OutputFolder "D:\PSReadline\docs" -MamlFile 'C:\Program Files\WindowsPowerShell\Modules\PSReadline\1.1\en-US\Microsoft.PowerShell.PSReadline.dll-help.xml' -WithModulePage  -Force -ModuleName "PSReadLine"
    
    
        Directory: D:\PSReadline\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:59 PM           7443 Get-PSReadlineKeyHandler.md
    -a----        5/22/2016   6:59 PM           3586 Get-PSReadlineOption.md
    -a----        5/22/2016   6:59 PM           1549 Remove-PSReadlineKeyHandler.md
    -a----        5/22/2016   6:59 PM           5947 Set-PSReadlineKeyHandler.md
    -a----        5/22/2016   6:59 PM          15320 Set-PSReadlineOption.md
    -a----        5/22/2016   6:59 PM            942 PSReadLine.md
    ```
    
    This command creates help in markdown format for the specified help MAML file, as in the previous example.
    This command also specifies the *WithModulePage* parameter and the *ModuleName* parameter.
    The command creates a file named PSReadLine.md that contains links to the other markdown files in this module and metadata that can be used to create .cab files.
    
    ## PARAMETERS
    
    ### -Command
    Specifies the name of a command in your current session.
    This can be any command supported by Windows PowerShell help, such as a cmdlet or a function.
    
    ```yaml
    Type: String[]
    Parameter Sets: FromCommand
    Aliases:
    
    Required: True
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Encoding
    Specifies the character encoding for your markdown help files.
    Specify a **System.Text.Encoding** object.
    For more information, see [Character Encoding in the .NET Framework](https://msdn.microsoft.com/en-us/library/ms404377.aspx) in the Microsoft Developer Network.
    For example, you can control Byte Order Mark (BOM) preferences.
    For more information, see [Using PowerShell to write a file in UTF-8 without the BOM](http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom) at the Stack Overflow community.
    
    ```yaml
    Type: Encoding
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: UTF8 without BOM
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Force
    Indicates that this cmdlet overwrites existing files that have the same names.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -FwLink
    Specifies the forward link for the module page.
    This value is required for .cab file creation.
    This value is used as markdown header metadata in the module page.
    
    ```yaml
    Type: String
    Parameter Sets: FromModule, FromMaml
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -HelpVersion
    Specifies the version of your help.
    This value is required for .cab file creation.
    This value is used as markdown header metadata in the module page.
    
    ```yaml
    Type: String
    Parameter Sets: FromModule, FromMaml
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Locale
    Specifies the locale of your help.
    This value is required for .cab file creation.
    This value is used as markdown header metadata in the module page.
    
    ```yaml
    Type: String
    Parameter Sets: FromModule, FromMaml
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -MamlFile
    Specifies an array of paths path of MAML .xml help files.
    
    ```yaml
    Type: String[]
    Parameter Sets: FromMaml
    Aliases:
    
    Required: True
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Metadata
    Specifies metadata that this cmdlet includes in the help markdown files as a hash table of string-to-sting key-value pairs.
    This cmdlet writes the metadata in the header of each markdown help file.
    
    The **New-ExternalHelp** cmdlet does not use this metadata.
    External tools can use this metadata.
    
    ```yaml
    Type: Hashtable
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Module
    Specifies an array of names of modules for which this cmdlet creates help in markdown format.
    
    ```yaml
    Type: String[]
    Parameter Sets: FromModule
    Aliases:
    
    Required: True
    Position: Named
    Default value: None
    Accept pipeline input: True (ByValue)
    Accept wildcard characters: False
    ```
    
    ### -ModuleGuid
    Specifies the GUID of the module of your help.
    This value is required for .cab file creation.
    This value is used as markdown header metadata in the module page.
    
    ```yaml
    Type: String
    Parameter Sets: FromMaml
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -ModuleName
    Specifies the name of the module of your help.
    This value is required for .cab file creation.
    This value is used as markdown header metadata in the module page.
    
    ```yaml
    Type: String
    Parameter Sets: FromMaml
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -NoMetadata
    Indicates that this cmdlet does not write any metadata in the generated markdown.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -OnlineVersionUrl
    Specifies the URL where the updatable help function downloads updated help.
    If you do not specify a value, the cmdlet uses an empty string.
    
    ```yaml
    Type: String
    Parameter Sets: FromCommand
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -OutputFolder
    Specifies the path of the folder where this cmdlet creates the markdown help files.
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -WithModulePage
    Indicates that this cmdlet creates a module page in the output folder.
    This file has the name that the *ModuleName* parameter specifies.
    If you did not specify that parameter, the cmdlet supplies the default name MamlModule.
    You can overwrite this setting by using *ModulePagePath* which allows you to define different path for module page
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: FromModule, FromMaml
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -ConvertNotesToList
    Indicates that this cmldet formats multiple paragraph items in the **NOTES** section as single list items.
    This output follows TechNet formatting.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: FromMaml
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -ConvertDoubleDashLists
    Indicates that this cmldet converts double-hyphen list bullets into single-hyphen bullets.
    Double-hyphen lists are common in Windows PowerShell documentation.
    Markdown accepts single-hyphens for lists.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: FromMaml
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -AlphabeticParamsOrder
    Order parameters alphabetically by name in PARAMETERS section.
    There are 5 exceptions: -Confirm, -WhatIf, -IncludeTotalCount, -Skip, and -First parameters will be the last.
    These parameters are common and hence have well-defined behavior.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -UseFullTypeName
    Indicates that the target document will use a full type name instead of a short name for parameters.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Session
    Provides support for remote commands.
    Pass the session that you used to create the commands with `Import-PSSession`.
    This is required to get accurate parameters metadata from the remote session.
    
    ```yaml
    Type: PSSession
    Parameter Sets: FromModule, FromCommand
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -ModulePagePath
    When *WithModule* parameter is used by default it puts .md file in same location as all other docs. With this parameter you can specify new name/location providing better placement options.
    
    ```yaml
    Type: String
    Parameter Sets: FromModule, FromMaml
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -ExcludeDontShow
    Exclude the parameters marked with `DontShow` in the parameter attribute from the help content.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### CommonParameters
    This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
    
    ## INPUTS
    
    ### String[]
    You can pipe module names to this cmdlet.
    These are the modules from which this cmdlet creates help markdown.
    
    ## OUTPUTS
    
    ### System.IO.FileInfo[]
    This cmdlet returns a **FileInfo[]** object for created files.
    
    ## NOTES
    
    ## RELATED LINKS
    
    [Character Encoding in the .NET Framework](https://msdn.microsoft.com/en-us/library/ms404377.aspx)
    
    [Using PowerShell to write a file in UTF-8 without the BOM](http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)
    
  • tools\PlatyPS\docs\New-YamlHelp.md Show
    ---
    external help file: platyPS-help.xml
    Module Name: platyPS
    online version: https://github.com/PowerShell/platyPS/blob/master/docs/New-YamlHelp.md
    schema: 2.0.0
    ---
    
    # New-YamlHelp
    
    ## SYNOPSIS
    Converts Markdown help into YAML to be read easily by external tools
    
    ## SYNTAX
    
    ```
    New-YamlHelp [-Path] <String[]> -OutputFolder <String> [-Encoding <Encoding>] [-Force] [<CommonParameters>]
    ```
    
    ## DESCRIPTION
    The **New-YamlHelp** cmdlet works similarly to the **New-ExternalHelp** cmdlet but rather than creating a MAML file to support **Get-Help**, it creates a set of YAML files that can be read by external tools to provide custom rendering of help pages.
    
    ## EXAMPLES
    
    ### Example 1: Create YAML files
    ```
    PS C:\> New-YamlHelp -Path .\docs -OutputFolder .\out\yaml
    
        Directory: D:\Working\PlatyPS\out\yaml
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        6/15/2017  11:13 AM           2337 Get-HelpPreview.yml
    -a----        6/15/2017  11:13 AM           3502 Get-MarkdownMetadata.yml
    -a----        6/15/2017  11:13 AM           4143 New-ExternalHelp.yml
    -a----        6/15/2017  11:13 AM           3082 New-ExternalHelpCab.yml
    -a----        6/15/2017  11:13 AM           2581 New-MarkdownAboutHelp.yml
    -a----        6/15/2017  11:13 AM          12356 New-MarkdownHelp.yml
    -a----        6/15/2017  11:13 AM           1681 New-YamlHelp.yml
    -a----        6/15/2017  11:13 AM           5053 Update-MarkdownHelp.yml
    -a----        6/15/2017  11:13 AM           4661 Update-MarkdownHelpModule.yml
    -a----        6/15/2017  11:13 AM           3350 Update-MarkdownHelpSchema.yml
    ```
    
    This creates one YAML file for each cmdlet so external tools can read the structured data for each cmdlet.
    
    ### Example 2: Create YAML files with specific encoding
    ```
    PS C:\> New-YamlHelp -Path .\docs -OutputFolder .\out\yaml -Force -Encoding ([System.Text.Encoding]::Unicode)
    
        Directory: D:\Working\PlatyPS\out\yaml
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        6/15/2017  11:13 AM           2337 Get-HelpPreview.yml
    -a----        6/15/2017  11:13 AM           3502 Get-MarkdownMetadata.yml
    -a----        6/15/2017  11:13 AM           4143 New-ExternalHelp.yml
    -a----        6/15/2017  11:13 AM           3082 New-ExternalHelpCab.yml
    -a----        6/15/2017  11:13 AM           2581 New-MarkdownAboutHelp.yml
    -a----        6/15/2017  11:13 AM          12356 New-MarkdownHelp.yml
    -a----        6/15/2017  11:13 AM           1681 New-YamlHelp.yml
    -a----        6/15/2017  11:13 AM           5053 Update-MarkdownHelp.yml
    -a----        6/15/2017  11:13 AM           4661 Update-MarkdownHelpModule.yml
    -a----        6/15/2017  11:13 AM           3350 Update-MarkdownHelpSchema.yml
    ```
    
    This will both read and write the files in the specified -Encoding.
    The -Force parameter will overwrite files that already exist.
    
    ## PARAMETERS
    
    ### -Encoding
    Specifies the character encoding for your external help file.
    Specify a **System.Text.Encoding** object.
    For more information, see [Character Encoding in the .NET Framework](https://msdn.microsoft.com/en-us/library/ms404377.aspx) in the Microsoft Developer Network.
    For example, you can control Byte Order Mark (BOM) preferences.
    For more information, see [Using PowerShell to write a file in UTF-8 without the BOM](http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom) at the Stack Overflow community.
    
    ```yaml
    Type: Encoding
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Force
    Indicates that this cmdlet overwrites an existing file that has the same name.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Path
    Specifies an array of paths of markdown files or folders.
    This cmdlet creates external help based on these files and folders.
    
    ```yaml
    Type: String[]
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: 1
    Default value: None
    Accept pipeline input: True (ByPropertyName, ByValue)
    Accept wildcard characters: False
    ```
    
    ### -OutputFolder
    Specifies the folder to create the YAML files in
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### CommonParameters
    This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
    
    ## INPUTS
    
    ### System.String[]
    You can pipe an array of paths to this cmdlet.
    
    ## OUTPUTS
    
    ### System.IO.FileInfo[]
    This cmdlet returns a **FileInfo[]** object for created files.
    
    ## NOTES
    
    ## RELATED LINKS
    
  • tools\PlatyPS\docs\Update-MarkdownHelp.md Show
    ---
    external help file: platyPS-help.xml
    Module Name: platyPS
    online version: https://github.com/PowerShell/platyPS/blob/master/docs/Update-MarkdownHelp.md
    schema: 2.0.0
    ---
    
    # Update-MarkdownHelp
    
    ## SYNOPSIS
    Update PlatyPS markdown help files.
    
    ## SYNTAX
    
    ```
    Update-MarkdownHelp [-Path] <String[]> [[-Encoding] <Encoding>] [[-LogPath] <String>] [-LogAppend]
     [-AlphabeticParamsOrder] [-UseFullTypeName] [-UpdateInputOutput] [-Force] [-Session <PSSession>]
     [-ExcludeDontShow] [<CommonParameters>]
    ```
    
    ## DESCRIPTION
    The **Update-MarkdownHelp** cmdlet updates PlatyPS markdown help files without completely replacing the content of the files.
    
    Some parameter attributes change over time.
    For instance, parameter sets, types, default value, and required.
    This cmdlet updates markdown help to reflect those changes.
    It also adds placeholder text to the markdown file for any new parameter.
    
    To propagate changes to your markdown help files, do the following:
    
    - Load the new version of the module into your Windows PowerShell session.
    - Run the **Update-MarkdownHelp** cmdlet to update the files.
    - Check new parameters metadata in the markdown files.
    
    ## EXAMPLES
    
    ### Example 1: Update all files in a folder
    ```
    PS C:\> Update-MarkdownHelp -Path ".\docs"
    
        Directory: D:\working\PlatyPS\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:54 PM           1496 Get-HelpPreview.md
    -a----        5/22/2016   6:54 PM           3208 Get-MarkdownMetadata.md
    -a----        5/22/2016   6:54 PM           3059 New-ExternalHelp.md
    -a----        5/22/2016   6:54 PM           2702 New-ExternalHelpCab.md
    -a----        5/22/2016   6:54 PM           6234 New-MarkdownHelp.md
    -a----        5/22/2016   6:54 PM           2346 Update-MarkdownHelp.md
    -a----        5/22/2016   6:54 PM           1633 Update-MarkdownHelpModule.md
    -a----        5/22/2016   6:54 PM           1630 Update-MarkdownHelpSchema.md
    ```
    
    This command updates all markdown help files in the specified path to match the current cmdlets.
    
    ### Example 2: Update one file and capture log
    ```
    PS C:\> Update-MarkdownHelp -Path ".\docs\Update-MarkdownHelp.md" -LogPath ".\markdown.log"
    
        Directory: D:\Working\PlatyPS\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   8:20 PM           9993 New-MarkdownHelp.md
    ```
    
    This command updates a markdown help file.
    It writes log information to the markdown.log file.
    
    ## PARAMETERS
    
    ### -Encoding
    Specifies the character encoding for your markdown help files.
    Specify a **System.Text.Encoding** object.
    For more information, see [Character Encoding in the .NET Framework](https://msdn.microsoft.com/en-us/library/ms404377.aspx) in the Microsoft Developer Network.
    For example, you can control Byte Order Mark (BOM) preferences.
    For more information, see [Using PowerShell to write a file in UTF-8 without the BOM](http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom) at the Stack Overflow community.
    
    ```yaml
    Type: Encoding
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: 1
    Default value: UTF8 without BOM
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -LogAppend
    Indicates that this cmdlet appends information to the log instead overwriting it.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -LogPath
    Specifies a file path for log information.
    The cmdlet writes the VERBOSE stream to the log.
    If you specify the *Verbose* parameter, this cmdlet also writes that information to the console.
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: 2
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Path
    Specifies an array of paths of markdown files and folders to update.
    
    ```yaml
    Type: String[]
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: 0
    Default value: None
    Accept pipeline input: True (ByValue)
    Accept wildcard characters: True
    ```
    
    ### -AlphabeticParamsOrder
    Order parameters alphabetically by name in PARAMETERS section.
    There are 5 exceptions: -Confirm, -WhatIf, -IncludeTotalCount, -Skip, and -First parameters will be the last.
    These parameters are common and hence have well-defined behavior.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -UseFullTypeName
    Indicates that the target document will use a full type name instead of a short name for parameters.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Session
    Provides support for remote commands.
    Pass the session that you used to create the commands with `Import-PSSession`.
    This is required to get accurate parameters metadata from the remote session.
    
    ```yaml
    Type: PSSession
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -UpdateInputOutput
    Refreshes the Input and Output section to reflect the current state of the cmdlet.  WARNING: this parameter will remove any manual additions to these sections.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Force
    Remove help files that no longer exists within sessions (for example if function was deleted)
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -ExcludeDontShow
    Exclude the parameters marked with `DontShow` in the parameter attribute from the help content.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### CommonParameters
    This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
    
    ## INPUTS
    
    ### String[]
    You can pipe an array of paths to this cmdlet.
    
    ## OUTPUTS
    
    ### System.IO.FileInfo[]
    This cmdlet returns a **FileInfo[]** object for updated files.
    
    ## NOTES
    The module for which you want to update the help should first be imported from the location containing the previous version of the help.
    If this condition is not met, the parameter order will be alphabetical in the updated help, even if the parameter *AlphabeticParamsOrder* has not been used.
    
    ## RELATED LINKS
    
    [Character Encoding in the .NET Framework](https://msdn.microsoft.com/en-us/library/ms404377.aspx)
    
    [Using PowerShell to write a file in UTF-8 without the BOM](http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)
    
  • tools\PlatyPS\docs\Update-MarkdownHelpModule.md Show
    ---
    external help file: platyPS-help.xml
    Module Name: platyPS
    online version: https://github.com/PowerShell/platyPS/blob/master/docs/Update-MarkdownHelpModule.md
    schema: 2.0.0
    ---
    
    # Update-MarkdownHelpModule
    
    ## SYNOPSIS
    Update all files in a markdown help module folder.
    
    ## SYNTAX
    
    ```
    Update-MarkdownHelpModule [-Path] <String[]> [[-Encoding] <Encoding>] [-RefreshModulePage]
     [-ModulePagePath <String>] [[-LogPath] <String>] [-LogAppend] [-AlphabeticParamsOrder] [-UseFullTypeName]
     [-UpdateInputOutput] [-Force] [-Session <PSSession>] [-ExcludeDontShow] [<CommonParameters>]
    ```
    
    ## DESCRIPTION
    The **Update-MarkdownHelpModule** cmdlet updates existing help markdown files and creates markdown files for new cmdlets in a module.
    This cmdlet combines functionality of the [Update-MarkdownHelp](Update-MarkdownHelp.md) and [New-MarkdownHelp](New-MarkdownHelp.md) cmdlets to perform a bulk update.
    
    ## EXAMPLES
    
    ### Example 1: Update a markdown help module
    ```
    PS C:\> Update-MarkdownHelpModule -Path ".\docs"
    
        Directory: D:\Working\PlatyPS\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:54 PM           1496 Get-HelpPreview.md
    -a----        5/22/2016   6:54 PM           3208 Get-MarkdownMetadata.md
    -a----        5/22/2016   6:54 PM           3059 New-ExternalHelp.md
    -a----        5/22/2016   6:54 PM           2702 New-ExternalHelpCab.md
    -a----        5/22/2016   6:54 PM           6234 New-MarkdownHelp.md
    -a----        5/22/2016   6:54 PM           2346 Update-MarkdownHelp.md
    -a----        5/22/2016   6:54 PM           1633 Update-MarkdownHelpModule.md
    -a----        5/22/2016   6:54 PM           1630 Update-MarkdownHelpSchema.md
    ```
    
    This command updates all the files in the specified folder based on the cmdlets as loaded into your current session.
    The command creates markdown help topics for any cmdlets that are not already included in the .\docs folder.
    
    ## PARAMETERS
    
    ### -Encoding
    Specifies the character encoding for your markdown help files.
    Specify a **System.Text.Encoding** object.
    For more information, see [Character Encoding in the .NET Framework](https://msdn.microsoft.com/en-us/library/ms404377.aspx) in the Microsoft Developer Network.
    For example, you can control Byte Order Mark (BOM) preferences.
    For more information, see [Using PowerShell to write a file in UTF-8 without the BOM](http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom) at the Stack Overflow community.
    
    ```yaml
    Type: Encoding
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: 1
    Default value: UTF8 without BOM
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -LogAppend
    Indicates that this cmdlet appends information to the log instead overwriting it.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -LogPath
    Specifies a file path for log information.
    The cmdlet writes the VERBOSE stream to the log.
    If you specify the *Verbose* parameter, this cmdlet also writes that information to the console.
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: 2
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Path
    Specifies an array of paths of markdown folders to update.
    The folder must contain a module page from which this cmdlet can get the module name.
    
    ```yaml
    Type: String[]
    Parameter Sets: (All)
    Aliases:
    
    Required: True
    Position: 0
    Default value: None
    Accept pipeline input: True (ByValue)
    Accept wildcard characters: True
    ```
    
    ### -RefreshModulePage
    Update module page when updating the help module.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -AlphabeticParamsOrder
    Order parameters alphabetically by name in PARAMETERS section.
    There are 5 exceptions: -Confirm, -WhatIf, -IncludeTotalCount, -Skip, and -First parameters will be the last.
    These parameters are common and hence have well-defined behavior.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Session
    Provides support for remote commands.
    Pass the session that you used to create the commands with `Import-PSSession`.
    This is required to get accurate parameters metadata from the remote session.
    
    ```yaml
    Type: PSSession
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -UseFullTypeName
    Indicates that the target document will use a full type name instead of a short name for parameters.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -UpdateInputOutput
    Refreshes the Input and Output sections to reflect the current state of the cmdlet.  WARNING: this parameter will remove any manual additions to these sections.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -ModulePagePath
    When -RefreshModulePage is used by default it puts .md file in same location as all other docs. With this parameter you can specify new name/location providing better placement options.
    
    ```yaml
    Type: String
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -Force
    Remove help files that no longer exists within sessions (for example if function was deleted)
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### -ExcludeDontShow
    Exclude the parameters marked with `DontShow` in the parameter attribute from the help content.
    
    ```yaml
    Type: SwitchParameter
    Parameter Sets: (All)
    Aliases:
    
    Required: False
    Position: Named
    Default value: None
    Accept pipeline input: False
    Accept wildcard characters: False
    ```
    
    ### CommonParameters
    This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
    
    ## INPUTS
    
    ### System.String[]
    You can pipe an array of paths to this cmdlet.
    
    ## OUTPUTS
    
    ### System.IO.FileInfo[]
    This cmdlet returns a **FileInfo[]** object for updated and new files.
    
    ## NOTES
    The module for which you want to update the help should first be imported from the location containing the previous version of the help.
     If this condition is not met, the parameter order will be alphabetical in the updated help, even if the parameter *AlphabeticParamsOrder* has not been used.
    
    ## RELATED LINKS
    
    [Character Encoding in the .NET Framework](https://msdn.microsoft.com/en-us/library/ms404377.aspx)
    
    [Using PowerShell to write a file in UTF-8 without the BOM](http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)
    
  • tools\PlatyPS\en-US\about_platyPS.help.txt Show
    TOPIC
        about_platyps
    
    SHORT DESCRIPTION
        Write PowerShell External Help in Markdown.
    
    LONG DESCRIPTION
        PlatyPS provides a way to
        - Write PowerShell External Help in Markdown
        - Generate markdown help (example) for your existing modules
        - Keep markdown help up-to-date with your code
        Markdown help docs can be generated from old external help files (also known
        as MAML-xml help), the command objects (reflection), or both.
        PlatyPS can also generate cab files for Update-Help.
    
    
  • tools\PlatyPS\en-US\platyPS-help.xml Show
    <?xml version="1.0" encoding="utf-8"?>
    <helpItems schema="maml" xmlns="http://msh">
      <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
        <command:details>
          <command:name>Get-HelpPreview</command:name>
          <command:verb>Get</command:verb>
          <command:noun>HelpPreview</command:noun>
          <maml:description>
            <maml:para>Displays your generated external help as Get-Help output.</maml:para>
          </maml:description>
        </command:details>
        <maml:description>
          <maml:para>The Get-HelpPreview cmdlet displays your generated external help as Get-Help output. Specify one or more files in Microsoft Assistance Markup Language (MAML) format.</maml:para>
        </maml:description>
        <command:syntax>
          <command:syntaxItem>
            <maml:name>Get-HelpPreview</maml:name>
            <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByValue)" position="named" aliases="none">
              <maml:name>Path</maml:name>
              <maml:Description>
                <maml:para>Specifies an array of paths of MAML external help files.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
              <dev:type>
                <maml:name>String[]</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ConvertNotesToList</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmldet formats multiple paragraph items in the NOTES section as single list items. This output follows TechNet formatting.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ConvertDoubleDashLists</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmldet converts double-hyphen list bullets into single-hyphen bullets. Double-hyphen lists are common in Windows PowerShell documentation. Markdown accepts single-hyphens for lists.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
          </command:syntaxItem>
        </command:syntax>
        <command:parameters>
          <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByValue)" position="named" aliases="none">
            <maml:name>Path</maml:name>
            <maml:Description>
              <maml:para>Specifies an array of paths of MAML external help files.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
            <dev:type>
              <maml:name>String[]</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ConvertNotesToList</maml:name>
            <maml:Description>
              <maml:para>Indicates that this cmldet formats multiple paragraph items in the NOTES section as single list items. This output follows TechNet formatting.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ConvertDoubleDashLists</maml:name>
            <maml:Description>
              <maml:para>Indicates that this cmldet converts double-hyphen list bullets into single-hyphen bullets. Double-hyphen lists are common in Windows PowerShell documentation. Markdown accepts single-hyphens for lists.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
        </command:parameters>
        <command:inputTypes>
          <command:inputType>
            <dev:type>
              <maml:name>String[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>You can pipe an array of paths to this cmdlet.</maml:para>
            </maml:description>
          </command:inputType>
        </command:inputTypes>
        <command:returnValues>
          <command:returnValue>
            <dev:type>
              <maml:name>Help Object</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>This cmdlet returns a Help object, which is the same output as Get-Help .</maml:para>
            </maml:description>
          </command:returnValue>
        </command:returnValues>
        <maml:alertSet>
          <maml:alert>
            <maml:para></maml:para>
          </maml:alert>
        </maml:alertSet>
        <command:examples>
          <command:example>
            <maml:title>------------- Example 1: Preview the PlatyPS help -------------</maml:title>
            <dev:code>PS C:\&gt; $Help = Get-HelpPreview -Path ".\out\platyPS\en-US\PlatyPS-help.xml"
    
    PS C:\&gt; $Help.Name
    
    Get-HelpPreview
    Get-MarkdownMetadata
    New-ExternalHelp
    New-ExternalHelpCab
    New-MarkdownHelp
    Update-MarkdownHelp
    Update-MarkdownHelpModule
    Update-MarkdownHelpSchema</dev:code>
            <dev:remarks>
              <maml:para>The first command creates a Help object for the the specified MAML file. The command stores it in the $Help variable.</maml:para>
              <maml:para>The second command displays the Name property for each of the objects in $Help.</maml:para>
            </dev:remarks>
          </command:example>
        </command:examples>
        <command:relatedLinks>
          <maml:navigationLink>
            <maml:linkText>Online Version:</maml:linkText>
            <maml:uri>https://github.com/PowerShell/platyPS/blob/master/docs/Get-HelpPreview.md</maml:uri>
          </maml:navigationLink>
        </command:relatedLinks>
      </command:command>
      <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
        <command:details>
          <command:name>Get-MarkdownMetadata</command:name>
          <command:verb>Get</command:verb>
          <command:noun>MarkdownMetadata</command:noun>
          <maml:description>
            <maml:para>Gets metadata from the header of a markdown file.</maml:para>
          </maml:description>
        </command:details>
        <maml:description>
          <maml:para>The Get-MarkdownMetadata cmdlet gets the metadata from the header of a markdown file that is supported by PlatyPS. The command returns the metadata as a hash table.</maml:para>
          <maml:para>PlatyPS stores metadata in the header block of a markdown file as key-value pairs of strings. By default, PlatyPS stores help file name and markdown schema version.</maml:para>
          <maml:para>Metadata section can contain user-provided values for use with external tools. The New-ExternalHelp (New-ExternalHelp.md)cmdlet ignores this metadata.</maml:para>
        </maml:description>
        <command:syntax>
          <command:syntaxItem>
            <maml:name>Get-MarkdownMetadata</maml:name>
            <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByPropertyName, ByValue)" position="named" aliases="none">
              <maml:name>Path</maml:name>
              <maml:Description>
                <maml:para>Specifies an array of paths of markdown files or folders.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
              <dev:type>
                <maml:name>String[]</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
          </command:syntaxItem>
          <command:syntaxItem>
            <maml:name>Get-MarkdownMetadata</maml:name>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Markdown</maml:name>
              <maml:Description>
                <maml:para>Specifies a string that contains markdown formatted text.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
          </command:syntaxItem>
        </command:syntax>
        <command:parameters>
          <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByPropertyName, ByValue)" position="named" aliases="none">
            <maml:name>Path</maml:name>
            <maml:Description>
              <maml:para>Specifies an array of paths of markdown files or folders.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
            <dev:type>
              <maml:name>String[]</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Markdown</maml:name>
            <maml:Description>
              <maml:para>Specifies a string that contains markdown formatted text.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
        </command:parameters>
        <command:inputTypes>
          <command:inputType>
            <dev:type>
              <maml:name>String[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>You can pipe an array of paths to this cmdlet.</maml:para>
            </maml:description>
          </command:inputType>
        </command:inputTypes>
        <command:returnValues>
          <command:returnValue>
            <dev:type>
              <maml:name>Dictionary[String, String]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>The cmdlet returns a Dictionary[String, String] object. The dictionary contains key-value pairs found in the markdown metadata block.</maml:para>
            </maml:description>
          </command:returnValue>
        </command:returnValues>
        <maml:alertSet>
          <maml:alert>
            <maml:para></maml:para>
          </maml:alert>
        </maml:alertSet>
        <command:examples>
          <command:example>
            <maml:title>------------- Example 1: Get metadata from a file -------------</maml:title>
            <dev:code>PS C:\&gt; Get-MarkdownMetadata -Path ".\docs\Get-MarkdownMetadata.md"
    
    Key                Value
    ---                -----
    external help file platyPS-help.xml
    schema             2.0.0</dev:code>
            <dev:remarks>
              <maml:para>This command retrieves metadata from a markdown file.</maml:para>
            </dev:remarks>
          </command:example>
          <command:example>
            <maml:title>-------- Example 2: Get metadata from a markdown string --------</maml:title>
            <dev:code>PS C:\&gt; $Markdown = Get-Content -Path ".\docs\Get-MarkdownMetadata.md" -Raw
    PS C:\&gt; Get-MarkdownMetadata -Markdown $Markdown
    
    Key                Value
    ---                -----
    external help file platyPS-help.xml
    schema             2.0.0</dev:code>
            <dev:remarks>
              <maml:para>The first command gets the contents of a file, and stores them in the $Markdown variable.</maml:para>
              <maml:para>The second command retrieves metadata from the string in $Metadata.</maml:para>
            </dev:remarks>
          </command:example>
          <command:example>
            <maml:title>------ Example 3: Get metadata from all files in a folder ------</maml:title>
            <dev:code>PS C:\&gt; Get-MarkdownMetadata -Path ".\docs"
    
    Key                Value
    ---                -----
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0
    external help file platyPS-help.xml
    schema             2.0.0</dev:code>
            <dev:remarks>
              <maml:para>This command gets metadata from each of the markdown files in the .\docs folder.</maml:para>
            </dev:remarks>
          </command:example>
        </command:examples>
        <command:relatedLinks>
          <maml:navigationLink>
            <maml:linkText>Online Version:</maml:linkText>
            <maml:uri>https://github.com/PowerShell/platyPS/blob/master/docs/Get-MarkdownMetadata.md</maml:uri>
          </maml:navigationLink>
        </command:relatedLinks>
      </command:command>
      <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
        <command:details>
          <command:name>Merge-MarkdownHelp</command:name>
          <command:verb>Merge</command:verb>
          <command:noun>MarkdownHelp</command:noun>
          <maml:description>
            <maml:para>Merge multiple markdown versions of the same cmdlet into a single markdown file.</maml:para>
          </maml:description>
        </command:details>
        <maml:description>
          <maml:para>Similar modules, or different versions of the same module, often contain duplicate content.</maml:para>
          <maml:para>Merge-MarkdownHelp merges the multiple markdown files into a single markdown file. It uses the `applicable:` yaml metadata field to identify what versions or tags are applicable. It acts on two levels: for the whole cmdlet and for individual parameters.</maml:para>
          <maml:para>The resulting markdown contains the `applicable:` tags as well as all of the content of the original markdown files. Duplicate content is simply ignored. Content that is unique to each file is merged using merge markers , followed by a comma-separated list of applicable tags. A merge marker is a string of text that acts as a marker to describe the content that was merged. The default merge marker text consists of three exclamation points !!! however this can be changed to any relevant text using the -MergeMarker flag.</maml:para>
        </maml:description>
        <command:syntax>
          <command:syntaxItem>
            <maml:name>Merge-MarkdownHelp</maml:name>
            <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByValue)" position="0" aliases="none">
              <maml:name>Path</maml:name>
              <maml:Description>
                <maml:para>Specifies an array of paths of markdown files or folders. This cmdlet creates combined markdown help based on these files and folders.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
              <dev:type>
                <maml:name>String[]</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
              <maml:name>OutputPath</maml:name>
              <maml:Description>
                <maml:para>Specifies the path of the folder where this cmdlet creates the combined markdown help files.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
              <maml:name>MergeMarker</maml:name>
              <maml:Description>
                <maml:para>String to be used as a merge text indicator. Applicable tag list would be included after the marker</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>'!!! '</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Encoding</maml:name>
              <maml:Description>
                <maml:para>Specifies the character encoding for your external help file. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
              <dev:type>
                <maml:name>Encoding</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>UTF8 without BOM</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ExplicitApplicableIfAll</maml:name>
              <maml:Description>
                <maml:para>Always write out full list of applicable tags. By default cmdlets and parameters that are present in all variations don't get an application tag.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Force</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmdlet overwrites an existing file that has the same name.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
          </command:syntaxItem>
        </command:syntax>
        <command:parameters>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Encoding</maml:name>
            <maml:Description>
              <maml:para>Specifies the character encoding for your external help file. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
            <dev:type>
              <maml:name>Encoding</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>UTF8 without BOM</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ExplicitApplicableIfAll</maml:name>
            <maml:Description>
              <maml:para>Always write out full list of applicable tags. By default cmdlets and parameters that are present in all variations don't get an application tag.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Force</maml:name>
            <maml:Description>
              <maml:para>Indicates that this cmdlet overwrites an existing file that has the same name.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
            <maml:name>MergeMarker</maml:name>
            <maml:Description>
              <maml:para>String to be used as a merge text indicator. Applicable tag list would be included after the marker</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>'!!! '</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
            <maml:name>OutputPath</maml:name>
            <maml:Description>
              <maml:para>Specifies the path of the folder where this cmdlet creates the combined markdown help files.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByValue)" position="0" aliases="none">
            <maml:name>Path</maml:name>
            <maml:Description>
              <maml:para>Specifies an array of paths of markdown files or folders. This cmdlet creates combined markdown help based on these files and folders.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
            <dev:type>
              <maml:name>String[]</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
        </command:parameters>
        <command:inputTypes>
          <command:inputType>
            <dev:type>
              <maml:name>System.String[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para></maml:para>
            </maml:description>
          </command:inputType>
        </command:inputTypes>
        <command:returnValues>
          <command:returnValue>
            <dev:type>
              <maml:name>System.IO.FileInfo[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para></maml:para>
            </maml:description>
          </command:returnValue>
        </command:returnValues>
        <maml:alertSet>
          <maml:alert>
            <maml:para></maml:para>
          </maml:alert>
        </maml:alertSet>
        <command:examples>
          <command:example>
            <maml:title>-------------------------- Example 1 --------------------------</maml:title>
            <dev:code>PS C:\&gt; Merge-MarkdownHelp -Path @('Lync Server 2010\Test-CsPhoneBootstrap.md', 'Lync Server 2013\Test-CsPhoneBootstrap.md') -OutputPath lync</dev:code>
            <dev:remarks>
              <maml:para>The resulting file will be located at lync\Test-CsPhoneBootstrap.md</maml:para>
            </dev:remarks>
          </command:example>
        </command:examples>
        <command:relatedLinks />
      </command:command>
      <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
        <command:details>
          <command:name>New-ExternalHelp</command:name>
          <command:verb>New</command:verb>
          <command:noun>ExternalHelp</command:noun>
          <maml:description>
            <maml:para>Creates external help file based on markdown supported by PlatyPS.</maml:para>
          </maml:description>
        </command:details>
        <maml:description>
          <maml:para>The New-ExternalHelp cmdlet creates an external help file based on markdown help files supported by PlatyPS. You can ship this with a module to provide help by using the Get-Help cmdlet.</maml:para>
          <maml:para>If the markdown files that you specify do not follow the PlatyPS Schema (https://github.com/PowerShell/platyPS/blob/master/platyPS.schema.md), this cmdlet returns error messages.</maml:para>
        </maml:description>
        <command:syntax>
          <command:syntaxItem>
            <maml:name>New-ExternalHelp</maml:name>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>OutputPath</maml:name>
              <maml:Description>
                <maml:para>Specifies the path of a folder where this cmdlet saves your external help file. The folder name should end with a locale folder, as in the following example: `.\out\PlatyPS\en-US`.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Encoding</maml:name>
              <maml:Description>
                <maml:para>Specifies the character encoding for your external help file. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
              <dev:type>
                <maml:name>Encoding</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>UTF8 without BOM</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Force</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmdlet overwrites an existing file that has the same name.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByPropertyName, ByValue)" position="named" aliases="none">
              <maml:name>Path</maml:name>
              <maml:Description>
                <maml:para>Specifies an array of paths of markdown files or folders. This cmdlet creates external help based on these files and folders.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
              <dev:type>
                <maml:name>String[]</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ApplicableTag</maml:name>
              <maml:Description>
                <maml:para>Specify array of tags to use as a filter. If cmdlet has `applicable` in the yaml metadata and none of the passed tags is mentioned there, cmdlet would be ignored in the generated help. Same applies to the Parameter level `applicable` yaml metadata. If `applicable` is ommited, cmdlet or parameter would be always present. See design issue (https://github.com/PowerShell/platyPS/issues/273)for more details.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
              <dev:type>
                <maml:name>String[]</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>MaxAboutWidth</maml:name>
              <maml:Description>
                <maml:para>Specifies the maximimum line length when generating "about" help text files. (See New-MarkdownAboutHelp.) Other help file types are not affected by this parameter.</maml:para>
                <maml:para>Lines inside code blocks are not wrapped at all and are not affected by the MaxAboutWidth parameter.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
              <dev:type>
                <maml:name>Int32</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>80</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ErrorLogFile</maml:name>
              <maml:Description>
                <maml:para>The path where this cmdlet will save formatted results log file.</maml:para>
                <maml:para>The path must include the location and name of the folder and file name with the json extension. The JSON object contains three properties, Message, FilePath, and Severity (Warning or Error).</maml:para>
                <maml:para>If this path is not provided, no log will be generated.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ShowProgress</maml:name>
              <maml:Description>
                <maml:para>Display progress bars under parsing existing markdown files.</maml:para>
                <maml:para>If this is used generating of help is much slower.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
          </command:syntaxItem>
        </command:syntax>
        <command:parameters>
          <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>OutputPath</maml:name>
            <maml:Description>
              <maml:para>Specifies the path of a folder where this cmdlet saves your external help file. The folder name should end with a locale folder, as in the following example: `.\out\PlatyPS\en-US`.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Encoding</maml:name>
            <maml:Description>
              <maml:para>Specifies the character encoding for your external help file. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
            <dev:type>
              <maml:name>Encoding</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>UTF8 without BOM</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Force</maml:name>
            <maml:Description>
              <maml:para>Indicates that this cmdlet overwrites an existing file that has the same name.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByPropertyName, ByValue)" position="named" aliases="none">
            <maml:name>Path</maml:name>
            <maml:Description>
              <maml:para>Specifies an array of paths of markdown files or folders. This cmdlet creates external help based on these files and folders.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
            <dev:type>
              <maml:name>String[]</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ApplicableTag</maml:name>
            <maml:Description>
              <maml:para>Specify array of tags to use as a filter. If cmdlet has `applicable` in the yaml metadata and none of the passed tags is mentioned there, cmdlet would be ignored in the generated help. Same applies to the Parameter level `applicable` yaml metadata. If `applicable` is ommited, cmdlet or parameter would be always present. See design issue (https://github.com/PowerShell/platyPS/issues/273)for more details.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
            <dev:type>
              <maml:name>String[]</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>MaxAboutWidth</maml:name>
            <maml:Description>
              <maml:para>Specifies the maximimum line length when generating "about" help text files. (See New-MarkdownAboutHelp.) Other help file types are not affected by this parameter.</maml:para>
              <maml:para>Lines inside code blocks are not wrapped at all and are not affected by the MaxAboutWidth parameter.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
            <dev:type>
              <maml:name>Int32</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>80</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ErrorLogFile</maml:name>
            <maml:Description>
              <maml:para>The path where this cmdlet will save formatted results log file.</maml:para>
              <maml:para>The path must include the location and name of the folder and file name with the json extension. The JSON object contains three properties, Message, FilePath, and Severity (Warning or Error).</maml:para>
              <maml:para>If this path is not provided, no log will be generated.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ShowProgress</maml:name>
            <maml:Description>
              <maml:para>Display progress bars under parsing existing markdown files.</maml:para>
              <maml:para>If this is used generating of help is much slower.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
        </command:parameters>
        <command:inputTypes>
          <command:inputType>
            <dev:type>
              <maml:name>String[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>You can pipe an array of paths to this cmdlet.</maml:para>
            </maml:description>
          </command:inputType>
        </command:inputTypes>
        <command:returnValues>
          <command:returnValue>
            <dev:type>
              <maml:name>System.IO.FileInfo[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>This cmdlet returns a FileInfo[] object for created files.</maml:para>
            </maml:description>
          </command:returnValue>
        </command:returnValues>
        <maml:alertSet>
          <maml:alert>
            <maml:para></maml:para>
          </maml:alert>
        </maml:alertSet>
        <command:examples>
          <command:example>
            <maml:title>Example 1: Create external help based on the contents of a folder</maml:title>
            <dev:code>PS C:\&gt; New-ExternalHelp -Path ".\docs" -OutputPath "out\platyPS\en-US"
    
        Directory: D:\Working\PlatyPS\out\platyPS\en-US
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/19/2016  12:32 PM          46776 platyPS-help.xml</dev:code>
            <dev:remarks>
              <maml:para>This command creates an external help file in the specified location. This command uses the best practice that the folder name includes the locale.</maml:para>
            </dev:remarks>
          </command:example>
          <command:example>
            <maml:title>------- Example 2: Create help that uses custom encoding -------</maml:title>
            <dev:code>PS C:\&gt; New-ExternalHelp -Path ".\docs" -OutputPath "out\PlatyPS\en-US" -Force -Encoding ([System.Text.Encoding]::Unicode)
    
    
        Directory: D:\Working\PlatyPS\out\PlatyPS\en-US
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:34 PM         132942 platyPS-help.xml</dev:code>
            <dev:remarks>
              <maml:para>This command creates an external help file in the specified location. This command specifies the Force parameter, therefore, it overwrites an existing file. The command specifies Unicode encoding for the created file.</maml:para>
            </dev:remarks>
          </command:example>
          <command:example>
            <maml:title>--------- Example 3: Write warnings and errors to file ---------</maml:title>
            <dev:code>PS C:\&gt; New-ExternalHelp -Path ".\docs" -OutputPath "out\platyPS\en-US" -ErrorLogFile ".\WarningsAndErrors.json"
    
        Directory: D:\Working\PlatyPS\out\platyPS\en-US
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/19/2016  12:32 PM          46776 platyPS-help.xml</dev:code>
            <dev:remarks>
              <maml:para>This command creates an external help file in the specified location. This command uses the best practice that the folder name includes the locale. This command writes the warnings and errors to the WarningsAndErrors.json file.</maml:para>
            </dev:remarks>
          </command:example>
        </command:examples>
        <command:relatedLinks>
          <maml:navigationLink>
            <maml:linkText>Online Version:</maml:linkText>
            <maml:uri>https://github.com/PowerShell/platyPS/blob/master/docs/New-ExternalHelp.md</maml:uri>
          </maml:navigationLink>
          <maml:navigationLink>
            <maml:linkText>PowerShell V2 External MAML Help</maml:linkText>
            <maml:uri>https://blogs.msdn.microsoft.com/powershell/2008/12/24/powershell-v2-external-maml-help/</maml:uri>
          </maml:navigationLink>
          <maml:navigationLink>
            <maml:linkText>Schema</maml:linkText>
            <maml:uri>https://github.com/PowerShell/platyPS/blob/master/platyPS.schema.md</maml:uri>
          </maml:navigationLink>
        </command:relatedLinks>
      </command:command>
      <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
        <command:details>
          <command:name>New-ExternalHelpCab</command:name>
          <command:verb>New</command:verb>
          <command:noun>ExternalHelpCab</command:noun>
          <maml:description>
            <maml:para>Generates a .cab file.</maml:para>
          </maml:description>
        </command:details>
        <maml:description>
          <maml:para>The New-ExternalHelpCab cmdlet generates a .cab file that contains all the non-recursive content in a folder. This cmdlet compresses the provided files.</maml:para>
          <maml:para>We recommend that you provide as content only about_ topics and the output from the New-ExternalHelp (New-ExternalHelp.md)cmdlet to this cmdlet.</maml:para>
          <maml:para>This cmdlet uses metadata stored in the module markdown file to name your .cab file. This naming matches the pattern that the Windows PowerShell help system requires for use as updatable help. This metadata is part of the module file created by using the New-MarkdownHelp (New-MarkdownHelp.md)cmdlet with the WithModulePage parameter.</maml:para>
          <maml:para>This cmdlet also generates or updates an existing helpinfo.xml file. That file provides versioning and locale details to the Windows PowerShell help system.</maml:para>
        </maml:description>
        <command:syntax>
          <command:syntaxItem>
            <maml:name>New-ExternalHelpCab</maml:name>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>CabFilesFolder</maml:name>
              <maml:Description>
                <maml:para>Specifies the folder that contains the help content that this cmdlet packages into a .cab file.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>LandingPagePath</maml:name>
              <maml:Description>
                <maml:para>Specifies the full path of the Module Markdown file that contains all the metadata required to name the .cab file. For the required metadata, run New-MarkdownHelp with the WithLandingPage parameter.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>OutputFolder</maml:name>
              <maml:Description>
                <maml:para>Specifies the location of the .cab file and helpinfo.xml file that this cmdlet creates.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>IncrementHelpVersion</maml:name>
              <maml:Description>
                <maml:para>Automatically increment the help version in the module markdown file.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
          </command:syntaxItem>
        </command:syntax>
        <command:parameters>
          <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>CabFilesFolder</maml:name>
            <maml:Description>
              <maml:para>Specifies the folder that contains the help content that this cmdlet packages into a .cab file.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>LandingPagePath</maml:name>
            <maml:Description>
              <maml:para>Specifies the full path of the Module Markdown file that contains all the metadata required to name the .cab file. For the required metadata, run New-MarkdownHelp with the WithLandingPage parameter.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>OutputFolder</maml:name>
            <maml:Description>
              <maml:para>Specifies the location of the .cab file and helpinfo.xml file that this cmdlet creates.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>IncrementHelpVersion</maml:name>
            <maml:Description>
              <maml:para>Automatically increment the help version in the module markdown file.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
        </command:parameters>
        <command:inputTypes>
          <command:inputType>
            <dev:type>
              <maml:name>None</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>You cannot pipe values to this cmdlet.</maml:para>
            </maml:description>
          </command:inputType>
        </command:inputTypes>
        <command:returnValues>
          <command:returnValue>
            <dev:type>
              <maml:name>None</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>This cmdlet does not generate output. The cmldet saves its results in the output folder that the OutputPath parameter specifies.</maml:para>
            </maml:description>
          </command:returnValue>
        </command:returnValues>
        <maml:alertSet>
          <maml:alert>
            <maml:para></maml:para>
          </maml:alert>
        </maml:alertSet>
        <command:examples>
          <command:example>
            <maml:title>----------------- Example 1: Create a CAB file -----------------</maml:title>
            <dev:code>PS C:\&gt; New-ExternalHelpCab -CabFilesFolder 'C:\Module\ExternalHelpContent' -LandingPagePath 'C:\Module\ModuleName.md' -OutputPath 'C:\Module\Cab\'</dev:code>
            <dev:remarks>
              <maml:para>This commmand creates a .cab file that contains the content folder files. The .cab file is named for updatable help based on metadata. The command places the .cab file in the output folder.</maml:para>
            </dev:remarks>
          </command:example>
        </command:examples>
        <command:relatedLinks>
          <maml:navigationLink>
            <maml:linkText>Online Version:</maml:linkText>
            <maml:uri>https://github.com/PowerShell/platyPS/blob/master/docs/New-ExternalHelpCab.md</maml:uri>
          </maml:navigationLink>
          <maml:navigationLink>
            <maml:linkText>New-ExternalHelp</maml:linkText>
            <maml:uri></maml:uri>
          </maml:navigationLink>
          <maml:navigationLink>
            <maml:linkText>New-MarkdownAboutHelp</maml:linkText>
            <maml:uri></maml:uri>
          </maml:navigationLink>
        </command:relatedLinks>
      </command:command>
      <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
        <command:details>
          <command:name>New-MarkdownAboutHelp</command:name>
          <command:verb>New</command:verb>
          <command:noun>MarkdownAboutHelp</command:noun>
          <maml:description>
            <maml:para>Generates a new About Topic MD file from template.</maml:para>
          </maml:description>
        </command:details>
        <maml:description>
          <maml:para>The New-MarkdownAboutHelp cmdlet generates a Markdown file that is prepopulated with the standard elements of an About Topic. The cmdlet copies the template MD, renames headers and file name according to the AboutName parameter, and deposits the file in the directory designated by the OutputFoler parameter.</maml:para>
          <maml:para>The About Topic can be converted to Txt format. About topics must be in txt format or the PowerShell Help engine will not be able to parse the document. Use the New-ExternalHelp (New-ExternalHelp.md)cmdlet to convert About Topic markdown files into About Topic txt files.</maml:para>
        </maml:description>
        <command:syntax>
          <command:syntaxItem>
            <maml:name>New-MarkdownAboutHelp</maml:name>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
              <maml:name>OutputFolder</maml:name>
              <maml:Description>
                <maml:para>The directory to create the about topic in.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
              <maml:name>AboutName</maml:name>
              <maml:Description>
                <maml:para>The name of the about topic.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
          </command:syntaxItem>
        </command:syntax>
        <command:parameters>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
            <maml:name>AboutName</maml:name>
            <maml:Description>
              <maml:para>The name of the about topic.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
            <maml:name>OutputFolder</maml:name>
            <maml:Description>
              <maml:para>The directory to create the about topic in.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
        </command:parameters>
        <command:inputTypes>
          <command:inputType>
            <dev:type>
              <maml:name>None</maml:name>
            </dev:type>
            <maml:description>
              <maml:para></maml:para>
            </maml:description>
          </command:inputType>
        </command:inputTypes>
        <command:returnValues>
          <command:returnValue>
            <dev:type>
              <maml:name>System.Object</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>This cmdlet returns a object for created files.</maml:para>
            </maml:description>
          </command:returnValue>
        </command:returnValues>
        <maml:alertSet>
          <maml:alert>
            <maml:para>The about topics will need to be added to a cab file to leverage updatable help.</maml:para>
          </maml:alert>
        </maml:alertSet>
        <command:examples>
          <command:example>
            <maml:title>-------------------------- Example 1 --------------------------</maml:title>
            <dev:code>PS C:\&gt; New-MarkdownAboutHelp -OutputFolder C:\Test -AboutName
    PS C:\&gt; Get-ChildItem C:\Test
    
        Directory: C:\Test
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        7/13/2016   2:12 PM           1491 TestAboutTopic.md</dev:code>
            <dev:remarks>
              <maml:para>Create and display file info for PowerShell About Topic Markdown File.</maml:para>
            </dev:remarks>
          </command:example>
          <command:example>
            <maml:title>-------------------------- Example 2 --------------------------</maml:title>
            <dev:code>PS C:\&gt; New-ExternalHelp -Path C:\Test\ -OutputPath C:\Test
    
    
        Directory: C:\Test
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        7/13/2016   2:15 PM           1550 TestAboutTopic.txt</dev:code>
            <dev:remarks>
              <maml:para>Create PowerShell About Topic Txt file from existing Markdown About file.</maml:para>
            </dev:remarks>
          </command:example>
        </command:examples>
        <command:relatedLinks>
          <maml:navigationLink>
            <maml:linkText>Online Version:</maml:linkText>
            <maml:uri>https://github.com/PowerShell/platyPS/blob/master/docs/New-MarkdownAboutHelp.md</maml:uri>
          </maml:navigationLink>
          <maml:navigationLink>
            <maml:linkText>New-ExternalHelp</maml:linkText>
            <maml:uri></maml:uri>
          </maml:navigationLink>
          <maml:navigationLink>
            <maml:linkText>New-ExternalHelpCab</maml:linkText>
            <maml:uri></maml:uri>
          </maml:navigationLink>
        </command:relatedLinks>
      </command:command>
      <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
        <command:details>
          <command:name>New-MarkdownHelp</command:name>
          <command:verb>New</command:verb>
          <command:noun>MarkdownHelp</command:noun>
          <maml:description>
            <maml:para>Creates help in markdown format.</maml:para>
          </maml:description>
        </command:details>
        <maml:description>
          <maml:para>The New-MarkdownHelp cmdlet creates help in markdown format based on a module, a command, or a file in Microsoft Assistance Markup Language (MAML) format.</maml:para>
        </maml:description>
        <command:syntax>
          <command:syntaxItem>
            <maml:name>New-MarkdownHelp</maml:name>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Command</maml:name>
              <maml:Description>
                <maml:para>Specifies the name of a command in your current session. This can be any command supported by Windows PowerShell help, such as a cmdlet or a function.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
              <dev:type>
                <maml:name>String[]</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Encoding</maml:name>
              <maml:Description>
                <maml:para>Specifies the character encoding for your markdown help files. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
              <dev:type>
                <maml:name>Encoding</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>UTF8 without BOM</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Force</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmdlet overwrites existing files that have the same names.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Metadata</maml:name>
              <maml:Description>
                <maml:para>Specifies metadata that this cmdlet includes in the help markdown files as a hash table of string-to-sting key-value pairs. This cmdlet writes the metadata in the header of each markdown help file.</maml:para>
                <maml:para>The New-ExternalHelp cmdlet does not use this metadata. External tools can use this metadata.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">Hashtable</command:parameterValue>
              <dev:type>
                <maml:name>Hashtable</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>NoMetadata</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmdlet does not write any metadata in the generated markdown.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>OnlineVersionUrl</maml:name>
              <maml:Description>
                <maml:para>Specifies the URL where the updatable help function downloads updated help. If you do not specify a value, the cmdlet uses an empty string.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>OutputFolder</maml:name>
              <maml:Description>
                <maml:para>Specifies the path of the folder where this cmdlet creates the markdown help files.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>AlphabeticParamsOrder</maml:name>
              <maml:Description>
                <maml:para>Order parameters alphabetically by name in PARAMETERS section. There are 5 exceptions: -Confirm, -WhatIf, -IncludeTotalCount, -Skip, and -First parameters will be the last. These parameters are common and hence have well-defined behavior.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>UseFullTypeName</maml:name>
              <maml:Description>
                <maml:para>Indicates that the target document will use a full type name instead of a short name for parameters.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Session</maml:name>
              <maml:Description>
                <maml:para>Provides support for remote commands. Pass the session that you used to create the commands with `Import-PSSession`. This is required to get accurate parameters metadata from the remote session.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">PSSession</command:parameterValue>
              <dev:type>
                <maml:name>PSSession</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ExcludeDontShow</maml:name>
              <maml:Description>
                <maml:para>Exclude the parameters marked with `DontShow` in the parameter attribute from the help content.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
          </command:syntaxItem>
          <command:syntaxItem>
            <maml:name>New-MarkdownHelp</maml:name>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Encoding</maml:name>
              <maml:Description>
                <maml:para>Specifies the character encoding for your markdown help files. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
              <dev:type>
                <maml:name>Encoding</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>UTF8 without BOM</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Force</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmdlet overwrites existing files that have the same names.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>FwLink</maml:name>
              <maml:Description>
                <maml:para>Specifies the forward link for the module page. This value is required for .cab file creation. This value is used as markdown header metadata in the module page.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>HelpVersion</maml:name>
              <maml:Description>
                <maml:para>Specifies the version of your help. This value is required for .cab file creation. This value is used as markdown header metadata in the module page.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Locale</maml:name>
              <maml:Description>
                <maml:para>Specifies the locale of your help. This value is required for .cab file creation. This value is used as markdown header metadata in the module page.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Metadata</maml:name>
              <maml:Description>
                <maml:para>Specifies metadata that this cmdlet includes in the help markdown files as a hash table of string-to-sting key-value pairs. This cmdlet writes the metadata in the header of each markdown help file.</maml:para>
                <maml:para>The New-ExternalHelp cmdlet does not use this metadata. External tools can use this metadata.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">Hashtable</command:parameterValue>
              <dev:type>
                <maml:name>Hashtable</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
              <maml:name>Module</maml:name>
              <maml:Description>
                <maml:para>Specifies an array of names of modules for which this cmdlet creates help in markdown format.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
              <dev:type>
                <maml:name>String[]</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>NoMetadata</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmdlet does not write any metadata in the generated markdown.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>OutputFolder</maml:name>
              <maml:Description>
                <maml:para>Specifies the path of the folder where this cmdlet creates the markdown help files.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>WithModulePage</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmdlet creates a module page in the output folder. This file has the name that the ModuleName parameter specifies. If you did not specify that parameter, the cmdlet supplies the default name MamlModule. You can overwrite this setting by using ModulePagePath which allows you to define different path for module page</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>AlphabeticParamsOrder</maml:name>
              <maml:Description>
                <maml:para>Order parameters alphabetically by name in PARAMETERS section. There are 5 exceptions: -Confirm, -WhatIf, -IncludeTotalCount, -Skip, and -First parameters will be the last. These parameters are common and hence have well-defined behavior.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>UseFullTypeName</maml:name>
              <maml:Description>
                <maml:para>Indicates that the target document will use a full type name instead of a short name for parameters.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Session</maml:name>
              <maml:Description>
                <maml:para>Provides support for remote commands. Pass the session that you used to create the commands with `Import-PSSession`. This is required to get accurate parameters metadata from the remote session.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">PSSession</command:parameterValue>
              <dev:type>
                <maml:name>PSSession</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ModulePagePath</maml:name>
              <maml:Description>
                <maml:para>When WithModule parameter is used by default it puts .md file in same location as all other docs. With this parameter you can specify new name/location providing better placement options.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ExcludeDontShow</maml:name>
              <maml:Description>
                <maml:para>Exclude the parameters marked with `DontShow` in the parameter attribute from the help content.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
          </command:syntaxItem>
          <command:syntaxItem>
            <maml:name>New-MarkdownHelp</maml:name>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Encoding</maml:name>
              <maml:Description>
                <maml:para>Specifies the character encoding for your markdown help files. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
              <dev:type>
                <maml:name>Encoding</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>UTF8 without BOM</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Force</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmdlet overwrites existing files that have the same names.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>FwLink</maml:name>
              <maml:Description>
                <maml:para>Specifies the forward link for the module page. This value is required for .cab file creation. This value is used as markdown header metadata in the module page.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>HelpVersion</maml:name>
              <maml:Description>
                <maml:para>Specifies the version of your help. This value is required for .cab file creation. This value is used as markdown header metadata in the module page.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Locale</maml:name>
              <maml:Description>
                <maml:para>Specifies the locale of your help. This value is required for .cab file creation. This value is used as markdown header metadata in the module page.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>MamlFile</maml:name>
              <maml:Description>
                <maml:para>Specifies an array of paths path of MAML .xml help files.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
              <dev:type>
                <maml:name>String[]</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Metadata</maml:name>
              <maml:Description>
                <maml:para>Specifies metadata that this cmdlet includes in the help markdown files as a hash table of string-to-sting key-value pairs. This cmdlet writes the metadata in the header of each markdown help file.</maml:para>
                <maml:para>The New-ExternalHelp cmdlet does not use this metadata. External tools can use this metadata.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">Hashtable</command:parameterValue>
              <dev:type>
                <maml:name>Hashtable</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ModuleGuid</maml:name>
              <maml:Description>
                <maml:para>Specifies the GUID of the module of your help. This value is required for .cab file creation. This value is used as markdown header metadata in the module page.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ModuleName</maml:name>
              <maml:Description>
                <maml:para>Specifies the name of the module of your help. This value is required for .cab file creation. This value is used as markdown header metadata in the module page.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>NoMetadata</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmdlet does not write any metadata in the generated markdown.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>OutputFolder</maml:name>
              <maml:Description>
                <maml:para>Specifies the path of the folder where this cmdlet creates the markdown help files.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>WithModulePage</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmdlet creates a module page in the output folder. This file has the name that the ModuleName parameter specifies. If you did not specify that parameter, the cmdlet supplies the default name MamlModule. You can overwrite this setting by using ModulePagePath which allows you to define different path for module page</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ConvertNotesToList</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmldet formats multiple paragraph items in the NOTES section as single list items. This output follows TechNet formatting.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ConvertDoubleDashLists</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmldet converts double-hyphen list bullets into single-hyphen bullets. Double-hyphen lists are common in Windows PowerShell documentation. Markdown accepts single-hyphens for lists.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>AlphabeticParamsOrder</maml:name>
              <maml:Description>
                <maml:para>Order parameters alphabetically by name in PARAMETERS section. There are 5 exceptions: -Confirm, -WhatIf, -IncludeTotalCount, -Skip, and -First parameters will be the last. These parameters are common and hence have well-defined behavior.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>UseFullTypeName</maml:name>
              <maml:Description>
                <maml:para>Indicates that the target document will use a full type name instead of a short name for parameters.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ModulePagePath</maml:name>
              <maml:Description>
                <maml:para>When WithModule parameter is used by default it puts .md file in same location as all other docs. With this parameter you can specify new name/location providing better placement options.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ExcludeDontShow</maml:name>
              <maml:Description>
                <maml:para>Exclude the parameters marked with `DontShow` in the parameter attribute from the help content.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
          </command:syntaxItem>
        </command:syntax>
        <command:parameters>
          <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Command</maml:name>
            <maml:Description>
              <maml:para>Specifies the name of a command in your current session. This can be any command supported by Windows PowerShell help, such as a cmdlet or a function.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
            <dev:type>
              <maml:name>String[]</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Encoding</maml:name>
            <maml:Description>
              <maml:para>Specifies the character encoding for your markdown help files. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
            <dev:type>
              <maml:name>Encoding</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>UTF8 without BOM</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Force</maml:name>
            <maml:Description>
              <maml:para>Indicates that this cmdlet overwrites existing files that have the same names.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>FwLink</maml:name>
            <maml:Description>
              <maml:para>Specifies the forward link for the module page. This value is required for .cab file creation. This value is used as markdown header metadata in the module page.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>HelpVersion</maml:name>
            <maml:Description>
              <maml:para>Specifies the version of your help. This value is required for .cab file creation. This value is used as markdown header metadata in the module page.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Locale</maml:name>
            <maml:Description>
              <maml:para>Specifies the locale of your help. This value is required for .cab file creation. This value is used as markdown header metadata in the module page.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>MamlFile</maml:name>
            <maml:Description>
              <maml:para>Specifies an array of paths path of MAML .xml help files.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
            <dev:type>
              <maml:name>String[]</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Metadata</maml:name>
            <maml:Description>
              <maml:para>Specifies metadata that this cmdlet includes in the help markdown files as a hash table of string-to-sting key-value pairs. This cmdlet writes the metadata in the header of each markdown help file.</maml:para>
              <maml:para>The New-ExternalHelp cmdlet does not use this metadata. External tools can use this metadata.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">Hashtable</command:parameterValue>
            <dev:type>
              <maml:name>Hashtable</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
            <maml:name>Module</maml:name>
            <maml:Description>
              <maml:para>Specifies an array of names of modules for which this cmdlet creates help in markdown format.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
            <dev:type>
              <maml:name>String[]</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ModuleGuid</maml:name>
            <maml:Description>
              <maml:para>Specifies the GUID of the module of your help. This value is required for .cab file creation. This value is used as markdown header metadata in the module page.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ModuleName</maml:name>
            <maml:Description>
              <maml:para>Specifies the name of the module of your help. This value is required for .cab file creation. This value is used as markdown header metadata in the module page.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>NoMetadata</maml:name>
            <maml:Description>
              <maml:para>Indicates that this cmdlet does not write any metadata in the generated markdown.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>OnlineVersionUrl</maml:name>
            <maml:Description>
              <maml:para>Specifies the URL where the updatable help function downloads updated help. If you do not specify a value, the cmdlet uses an empty string.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>OutputFolder</maml:name>
            <maml:Description>
              <maml:para>Specifies the path of the folder where this cmdlet creates the markdown help files.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>WithModulePage</maml:name>
            <maml:Description>
              <maml:para>Indicates that this cmdlet creates a module page in the output folder. This file has the name that the ModuleName parameter specifies. If you did not specify that parameter, the cmdlet supplies the default name MamlModule. You can overwrite this setting by using ModulePagePath which allows you to define different path for module page</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ConvertNotesToList</maml:name>
            <maml:Description>
              <maml:para>Indicates that this cmldet formats multiple paragraph items in the NOTES section as single list items. This output follows TechNet formatting.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ConvertDoubleDashLists</maml:name>
            <maml:Description>
              <maml:para>Indicates that this cmldet converts double-hyphen list bullets into single-hyphen bullets. Double-hyphen lists are common in Windows PowerShell documentation. Markdown accepts single-hyphens for lists.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>AlphabeticParamsOrder</maml:name>
            <maml:Description>
              <maml:para>Order parameters alphabetically by name in PARAMETERS section. There are 5 exceptions: -Confirm, -WhatIf, -IncludeTotalCount, -Skip, and -First parameters will be the last. These parameters are common and hence have well-defined behavior.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>UseFullTypeName</maml:name>
            <maml:Description>
              <maml:para>Indicates that the target document will use a full type name instead of a short name for parameters.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Session</maml:name>
            <maml:Description>
              <maml:para>Provides support for remote commands. Pass the session that you used to create the commands with `Import-PSSession`. This is required to get accurate parameters metadata from the remote session.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">PSSession</command:parameterValue>
            <dev:type>
              <maml:name>PSSession</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ModulePagePath</maml:name>
            <maml:Description>
              <maml:para>When WithModule parameter is used by default it puts .md file in same location as all other docs. With this parameter you can specify new name/location providing better placement options.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ExcludeDontShow</maml:name>
            <maml:Description>
              <maml:para>Exclude the parameters marked with `DontShow` in the parameter attribute from the help content.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
        </command:parameters>
        <command:inputTypes>
          <command:inputType>
            <dev:type>
              <maml:name>String[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>You can pipe module names to this cmdlet. These are the modules from which this cmdlet creates help markdown.</maml:para>
            </maml:description>
          </command:inputType>
        </command:inputTypes>
        <command:returnValues>
          <command:returnValue>
            <dev:type>
              <maml:name>System.IO.FileInfo[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>This cmdlet returns a FileInfo[] object for created files.</maml:para>
            </maml:description>
          </command:returnValue>
        </command:returnValues>
        <maml:alertSet>
          <maml:alert>
            <maml:para></maml:para>
          </maml:alert>
        </maml:alertSet>
        <command:examples>
          <command:example>
            <maml:title>------------ Example 1: Create help from a command ------------</maml:title>
            <dev:code>PS C:\&gt; function Command03 {param([string]$Value)}
    PS C:\&gt; New-MarkdownHelp -Command "Command03" -OutputFolder ".\docs"
    
    
        Directory: D:\Working\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:53 PM            664 Command03.md</dev:code>
            <dev:remarks>
              <maml:para>The first command creates a function named Command03 by using standard Windows PowerShell syntax.</maml:para>
              <maml:para>The second command creates help for that stub function in the .\docs folder.</maml:para>
            </dev:remarks>
          </command:example>
          <command:example>
            <maml:title>------------- Example 2: Create help from a module -------------</maml:title>
            <dev:code>PS C:\&gt; Import-Module -Module "PlatyPS"
    PS C:\&gt; New-MarkdownHelp -Module "PlatyPS" -OutputFolder ".\docs" -Force
    
    
        Directory: D:\Working\PlatyPS\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:54 PM           1496 Get-HelpPreview.md
    -a----        5/22/2016   6:54 PM           3208 Get-MarkdownMetadata.md
    -a----        5/22/2016   6:54 PM           3059 New-ExternalHelp.md
    -a----        5/22/2016   6:54 PM           2702 New-ExternalHelpCab.md
    -a----        5/22/2016   6:54 PM           6234 New-MarkdownHelp.md
    -a----        5/22/2016   6:54 PM           2346 Update-MarkdownHelp.md
    -a----        5/22/2016   6:54 PM           1633 Update-MarkdownHelpModule.md
    -a----        5/22/2016   6:54 PM           1630 Update-MarkdownHelpSchema.md</dev:code>
            <dev:remarks>
              <maml:para>The first command loads the PlatyPS module into the current session by using the Import-Module cmdlet.</maml:para>
              <maml:para>The second command creates help for all the cmdlets in the PlatyPS module. It stores them in the .\docs folder. This command specifies the Force parameter. Therefore, it overwrites existing help markdown files that have the same name.</maml:para>
            </dev:remarks>
          </command:example>
          <command:example>
            <maml:title>------ Example 3: Create help from an existing MAML file ------</maml:title>
            <dev:code>PS C:\&gt; New-MarkdownHelp -OutputFolder "D:\PSReadline\docs" -MamlFile 'C:\Program Files\WindowsPowerShell\Modules\PSReadline\1.1\en-US\Microsoft.PowerShell.PSReadline.dll-help.xml'
    
        Directory: D:\PSReadline\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:56 PM           7443 Get-PSReadlineKeyHandler.md
    -a----        5/22/2016   6:56 PM           3586 Get-PSReadlineOption.md
    -a----        5/22/2016   6:56 PM           1549 Remove-PSReadlineKeyHandler.md
    -a----        5/22/2016   6:56 PM           5947 Set-PSReadlineKeyHandler.md
    -a----        5/22/2016   6:56 PM          15320 Set-PSReadlineOption.md</dev:code>
            <dev:remarks>
              <maml:para>This command creates help in markdown format for the specified help MAML file. You do not have to load the module, as in the previous example. If the module is already loaded, this command creates help based on the MAML file, not on the currently installed module.</maml:para>
            </dev:remarks>
          </command:example>
          <command:example>
            <maml:title>Example 4: Create help from an existing MAML file for use in a CAB file</maml:title>
            <dev:code>PS C:\&gt; New-MarkdownHelp -OutputFolder "D:\PSReadline\docs" -MamlFile 'C:\Program Files\WindowsPowerShell\Modules\PSReadline\1.1\en-US\Microsoft.PowerShell.PSReadline.dll-help.xml' -WithModulePage  -Force -ModuleName "PSReadLine"
    
    
        Directory: D:\PSReadline\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:59 PM           7443 Get-PSReadlineKeyHandler.md
    -a----        5/22/2016   6:59 PM           3586 Get-PSReadlineOption.md
    -a----        5/22/2016   6:59 PM           1549 Remove-PSReadlineKeyHandler.md
    -a----        5/22/2016   6:59 PM           5947 Set-PSReadlineKeyHandler.md
    -a----        5/22/2016   6:59 PM          15320 Set-PSReadlineOption.md
    -a----        5/22/2016   6:59 PM            942 PSReadLine.md</dev:code>
            <dev:remarks>
              <maml:para>This command creates help in markdown format for the specified help MAML file, as in the previous example. This command also specifies the WithModulePage parameter and the ModuleName parameter. The command creates a file named PSReadLine.md that contains links to the other markdown files in this module and metadata that can be used to create .cab files.</maml:para>
            </dev:remarks>
          </command:example>
        </command:examples>
        <command:relatedLinks>
          <maml:navigationLink>
            <maml:linkText>Online Version:</maml:linkText>
            <maml:uri>https://github.com/PowerShell/platyPS/blob/master/docs/New-MarkdownHelp.md</maml:uri>
          </maml:navigationLink>
          <maml:navigationLink>
            <maml:linkText>Character Encoding in the .NET Framework</maml:linkText>
            <maml:uri>https://msdn.microsoft.com/en-us/library/ms404377.aspx</maml:uri>
          </maml:navigationLink>
          <maml:navigationLink>
            <maml:linkText>Using PowerShell to write a file in UTF-8 without the BOM</maml:linkText>
            <maml:uri>http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom</maml:uri>
          </maml:navigationLink>
        </command:relatedLinks>
      </command:command>
      <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
        <command:details>
          <command:name>New-YamlHelp</command:name>
          <command:verb>New</command:verb>
          <command:noun>YamlHelp</command:noun>
          <maml:description>
            <maml:para>Converts Markdown help into YAML to be read easily by external tools</maml:para>
          </maml:description>
        </command:details>
        <maml:description>
          <maml:para>The New-YamlHelp cmdlet works similarly to the New-ExternalHelp cmdlet but rather than creating a MAML file to support Get-Help , it creates a set of YAML files that can be read by external tools to provide custom rendering of help pages.</maml:para>
        </maml:description>
        <command:syntax>
          <command:syntaxItem>
            <maml:name>New-YamlHelp</maml:name>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="1" aliases="none">
              <maml:name>Path</maml:name>
              <maml:Description>
                <maml:para>Specifies an array of paths of markdown files or folders. This cmdlet creates external help based on these files and folders.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
              <dev:type>
                <maml:name>String[]</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Encoding</maml:name>
              <maml:Description>
                <maml:para>Specifies the character encoding for your external help file. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
              <dev:type>
                <maml:name>Encoding</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Force</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmdlet overwrites an existing file that has the same name.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>OutputFolder</maml:name>
              <maml:Description>
                <maml:para>Specifies the folder to create the YAML files in</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
          </command:syntaxItem>
        </command:syntax>
        <command:parameters>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Encoding</maml:name>
            <maml:Description>
              <maml:para>Specifies the character encoding for your external help file. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
            <dev:type>
              <maml:name>Encoding</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Force</maml:name>
            <maml:Description>
              <maml:para>Indicates that this cmdlet overwrites an existing file that has the same name.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="1" aliases="none">
            <maml:name>Path</maml:name>
            <maml:Description>
              <maml:para>Specifies an array of paths of markdown files or folders. This cmdlet creates external help based on these files and folders.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
            <dev:type>
              <maml:name>String[]</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>OutputFolder</maml:name>
            <maml:Description>
              <maml:para>Specifies the folder to create the YAML files in</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
        </command:parameters>
        <command:inputTypes>
          <command:inputType>
            <dev:type>
              <maml:name>System.String[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>You can pipe an array of paths to this cmdlet.</maml:para>
            </maml:description>
          </command:inputType>
        </command:inputTypes>
        <command:returnValues>
          <command:returnValue>
            <dev:type>
              <maml:name>System.IO.FileInfo[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>This cmdlet returns a FileInfo[] object for created files.</maml:para>
            </maml:description>
          </command:returnValue>
        </command:returnValues>
        <maml:alertSet>
          <maml:alert>
            <maml:para></maml:para>
          </maml:alert>
        </maml:alertSet>
        <command:examples>
          <command:example>
            <maml:title>----------------- Example 1: Create YAML files -----------------</maml:title>
            <dev:code>PS C:\&gt; New-YamlHelp -Path .\docs -OutputFolder .\out\yaml
    
        Directory: D:\Working\PlatyPS\out\yaml
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        6/15/2017  11:13 AM           2337 Get-HelpPreview.yml
    -a----        6/15/2017  11:13 AM           3502 Get-MarkdownMetadata.yml
    -a----        6/15/2017  11:13 AM           4143 New-ExternalHelp.yml
    -a----        6/15/2017  11:13 AM           3082 New-ExternalHelpCab.yml
    -a----        6/15/2017  11:13 AM           2581 New-MarkdownAboutHelp.yml
    -a----        6/15/2017  11:13 AM          12356 New-MarkdownHelp.yml
    -a----        6/15/2017  11:13 AM           1681 New-YamlHelp.yml
    -a----        6/15/2017  11:13 AM           5053 Update-MarkdownHelp.yml
    -a----        6/15/2017  11:13 AM           4661 Update-MarkdownHelpModule.yml
    -a----        6/15/2017  11:13 AM           3350 Update-MarkdownHelpSchema.yml</dev:code>
            <dev:remarks>
              <maml:para>This creates one YAML file for each cmdlet so external tools can read the structured data for each cmdlet.</maml:para>
            </dev:remarks>
          </command:example>
          <command:example>
            <maml:title>----- Example 2: Create YAML files with specific encoding -----</maml:title>
            <dev:code>PS C:\&gt; New-YamlHelp -Path .\docs -OutputFolder .\out\yaml -Force -Encoding ([System.Text.Encoding]::Unicode)
    
        Directory: D:\Working\PlatyPS\out\yaml
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        6/15/2017  11:13 AM           2337 Get-HelpPreview.yml
    -a----        6/15/2017  11:13 AM           3502 Get-MarkdownMetadata.yml
    -a----        6/15/2017  11:13 AM           4143 New-ExternalHelp.yml
    -a----        6/15/2017  11:13 AM           3082 New-ExternalHelpCab.yml
    -a----        6/15/2017  11:13 AM           2581 New-MarkdownAboutHelp.yml
    -a----        6/15/2017  11:13 AM          12356 New-MarkdownHelp.yml
    -a----        6/15/2017  11:13 AM           1681 New-YamlHelp.yml
    -a----        6/15/2017  11:13 AM           5053 Update-MarkdownHelp.yml
    -a----        6/15/2017  11:13 AM           4661 Update-MarkdownHelpModule.yml
    -a----        6/15/2017  11:13 AM           3350 Update-MarkdownHelpSchema.yml</dev:code>
            <dev:remarks>
              <maml:para>This will both read and write the files in the specified -Encoding. The -Force parameter will overwrite files that already exist.</maml:para>
            </dev:remarks>
          </command:example>
        </command:examples>
        <command:relatedLinks>
          <maml:navigationLink>
            <maml:linkText>Online Version:</maml:linkText>
            <maml:uri>https://github.com/PowerShell/platyPS/blob/master/docs/New-YamlHelp.md</maml:uri>
          </maml:navigationLink>
        </command:relatedLinks>
      </command:command>
      <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
        <command:details>
          <command:name>Update-MarkdownHelp</command:name>
          <command:verb>Update</command:verb>
          <command:noun>MarkdownHelp</command:noun>
          <maml:description>
            <maml:para>Update PlatyPS markdown help files.</maml:para>
          </maml:description>
        </command:details>
        <maml:description>
          <maml:para>The Update-MarkdownHelp cmdlet updates PlatyPS markdown help files without completely replacing the content of the files.</maml:para>
          <maml:para>Some parameter attributes change over time. For instance, parameter sets, types, default value, and required. This cmdlet updates markdown help to reflect those changes. It also adds placeholder text to the markdown file for any new parameter.</maml:para>
          <maml:para>To propagate changes to your markdown help files, do the following:</maml:para>
          <maml:para>- Load the new version of the module into your Windows PowerShell session.</maml:para>
          <maml:para>- Run the Update-MarkdownHelp cmdlet to update the files. - Check new parameters metadata in the markdown files.</maml:para>
        </maml:description>
        <command:syntax>
          <command:syntaxItem>
            <maml:name>Update-MarkdownHelp</maml:name>
            <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByValue)" position="0" aliases="none">
              <maml:name>Path</maml:name>
              <maml:Description>
                <maml:para>Specifies an array of paths of markdown files and folders to update.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
              <dev:type>
                <maml:name>String[]</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
              <maml:name>Encoding</maml:name>
              <maml:Description>
                <maml:para>Specifies the character encoding for your markdown help files. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
              <dev:type>
                <maml:name>Encoding</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>UTF8 without BOM</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
              <maml:name>LogPath</maml:name>
              <maml:Description>
                <maml:para>Specifies a file path for log information. The cmdlet writes the VERBOSE stream to the log. If you specify the Verbose parameter, this cmdlet also writes that information to the console.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>LogAppend</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmdlet appends information to the log instead overwriting it.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>AlphabeticParamsOrder</maml:name>
              <maml:Description>
                <maml:para>Order parameters alphabetically by name in PARAMETERS section. There are 5 exceptions: -Confirm, -WhatIf, -IncludeTotalCount, -Skip, and -First parameters will be the last. These parameters are common and hence have well-defined behavior.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>UseFullTypeName</maml:name>
              <maml:Description>
                <maml:para>Indicates that the target document will use a full type name instead of a short name for parameters.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Session</maml:name>
              <maml:Description>
                <maml:para>Provides support for remote commands. Pass the session that you used to create the commands with `Import-PSSession`. This is required to get accurate parameters metadata from the remote session.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">PSSession</command:parameterValue>
              <dev:type>
                <maml:name>PSSession</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>UpdateInputOutput</maml:name>
              <maml:Description>
                <maml:para>Refreshes the Input and Output section to reflect the current state of the cmdlet.  WARNING: this parameter will remove any manual additions to these sections.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Force</maml:name>
              <maml:Description>
                <maml:para>Remove help files that no longer exists within sessions (for example if function was deleted)</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ExcludeDontShow</maml:name>
              <maml:Description>
                <maml:para>Exclude the parameters marked with `DontShow` in the parameter attribute from the help content.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
          </command:syntaxItem>
        </command:syntax>
        <command:parameters>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
            <maml:name>Encoding</maml:name>
            <maml:Description>
              <maml:para>Specifies the character encoding for your markdown help files. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
            <dev:type>
              <maml:name>Encoding</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>UTF8 without BOM</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>LogAppend</maml:name>
            <maml:Description>
              <maml:para>Indicates that this cmdlet appends information to the log instead overwriting it.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
            <maml:name>LogPath</maml:name>
            <maml:Description>
              <maml:para>Specifies a file path for log information. The cmdlet writes the VERBOSE stream to the log. If you specify the Verbose parameter, this cmdlet also writes that information to the console.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByValue)" position="0" aliases="none">
            <maml:name>Path</maml:name>
            <maml:Description>
              <maml:para>Specifies an array of paths of markdown files and folders to update.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
            <dev:type>
              <maml:name>String[]</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>AlphabeticParamsOrder</maml:name>
            <maml:Description>
              <maml:para>Order parameters alphabetically by name in PARAMETERS section. There are 5 exceptions: -Confirm, -WhatIf, -IncludeTotalCount, -Skip, and -First parameters will be the last. These parameters are common and hence have well-defined behavior.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>UseFullTypeName</maml:name>
            <maml:Description>
              <maml:para>Indicates that the target document will use a full type name instead of a short name for parameters.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Session</maml:name>
            <maml:Description>
              <maml:para>Provides support for remote commands. Pass the session that you used to create the commands with `Import-PSSession`. This is required to get accurate parameters metadata from the remote session.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">PSSession</command:parameterValue>
            <dev:type>
              <maml:name>PSSession</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>UpdateInputOutput</maml:name>
            <maml:Description>
              <maml:para>Refreshes the Input and Output section to reflect the current state of the cmdlet.  WARNING: this parameter will remove any manual additions to these sections.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Force</maml:name>
            <maml:Description>
              <maml:para>Remove help files that no longer exists within sessions (for example if function was deleted)</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ExcludeDontShow</maml:name>
            <maml:Description>
              <maml:para>Exclude the parameters marked with `DontShow` in the parameter attribute from the help content.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
        </command:parameters>
        <command:inputTypes>
          <command:inputType>
            <dev:type>
              <maml:name>String[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>You can pipe an array of paths to this cmdlet.</maml:para>
            </maml:description>
          </command:inputType>
        </command:inputTypes>
        <command:returnValues>
          <command:returnValue>
            <dev:type>
              <maml:name>System.IO.FileInfo[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>This cmdlet returns a FileInfo[] object for updated files.</maml:para>
            </maml:description>
          </command:returnValue>
        </command:returnValues>
        <maml:alertSet>
          <maml:alert>
            <maml:para>The module for which you want to update the help should first be imported from the location containing the previous version of the help. If this condition is not met, the parameter order will be alphabetical in the updated help, even if the parameter AlphabeticParamsOrder has not been used.</maml:para>
          </maml:alert>
        </maml:alertSet>
        <command:examples>
          <command:example>
            <maml:title>----------- Example 1: Update all files in a folder -----------</maml:title>
            <dev:code>PS C:\&gt; Update-MarkdownHelp -Path ".\docs"
    
        Directory: D:\working\PlatyPS\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:54 PM           1496 Get-HelpPreview.md
    -a----        5/22/2016   6:54 PM           3208 Get-MarkdownMetadata.md
    -a----        5/22/2016   6:54 PM           3059 New-ExternalHelp.md
    -a----        5/22/2016   6:54 PM           2702 New-ExternalHelpCab.md
    -a----        5/22/2016   6:54 PM           6234 New-MarkdownHelp.md
    -a----        5/22/2016   6:54 PM           2346 Update-MarkdownHelp.md
    -a----        5/22/2016   6:54 PM           1633 Update-MarkdownHelpModule.md
    -a----        5/22/2016   6:54 PM           1630 Update-MarkdownHelpSchema.md</dev:code>
            <dev:remarks>
              <maml:para>This command updates all markdown help files in the specified path to match the current cmdlets.</maml:para>
            </dev:remarks>
          </command:example>
          <command:example>
            <maml:title>---------- Example 2: Update one file and capture log ----------</maml:title>
            <dev:code>PS C:\&gt; Update-MarkdownHelp -Path ".\docs\Update-MarkdownHelp.md" -LogPath ".\markdown.log"
    
        Directory: D:\Working\PlatyPS\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   8:20 PM           9993 New-MarkdownHelp.md</dev:code>
            <dev:remarks>
              <maml:para>This command updates a markdown help file. It writes log information to the markdown.log file.</maml:para>
            </dev:remarks>
          </command:example>
        </command:examples>
        <command:relatedLinks>
          <maml:navigationLink>
            <maml:linkText>Online Version:</maml:linkText>
            <maml:uri>https://github.com/PowerShell/platyPS/blob/master/docs/Update-MarkdownHelp.md</maml:uri>
          </maml:navigationLink>
          <maml:navigationLink>
            <maml:linkText>Character Encoding in the .NET Framework</maml:linkText>
            <maml:uri>https://msdn.microsoft.com/en-us/library/ms404377.aspx</maml:uri>
          </maml:navigationLink>
          <maml:navigationLink>
            <maml:linkText>Using PowerShell to write a file in UTF-8 without the BOM</maml:linkText>
            <maml:uri>http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom</maml:uri>
          </maml:navigationLink>
        </command:relatedLinks>
      </command:command>
      <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
        <command:details>
          <command:name>Update-MarkdownHelpModule</command:name>
          <command:verb>Update</command:verb>
          <command:noun>MarkdownHelpModule</command:noun>
          <maml:description>
            <maml:para>Update all files in a markdown help module folder.</maml:para>
          </maml:description>
        </command:details>
        <maml:description>
          <maml:para>The Update-MarkdownHelpModule cmdlet updates existing help markdown files and creates markdown files for new cmdlets in a module. This cmdlet combines functionality of the Update-MarkdownHelp (Update-MarkdownHelp.md) and [New-MarkdownHelp](New-MarkdownHelp.md)cmdlets to perform a bulk update.</maml:para>
        </maml:description>
        <command:syntax>
          <command:syntaxItem>
            <maml:name>Update-MarkdownHelpModule</maml:name>
            <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByValue)" position="0" aliases="none">
              <maml:name>Path</maml:name>
              <maml:Description>
                <maml:para>Specifies an array of paths of markdown folders to update. The folder must contain a module page from which this cmdlet can get the module name.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
              <dev:type>
                <maml:name>String[]</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
              <maml:name>Encoding</maml:name>
              <maml:Description>
                <maml:para>Specifies the character encoding for your markdown help files. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
              <dev:type>
                <maml:name>Encoding</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>UTF8 without BOM</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
              <maml:name>LogPath</maml:name>
              <maml:Description>
                <maml:para>Specifies a file path for log information. The cmdlet writes the VERBOSE stream to the log. If you specify the Verbose parameter, this cmdlet also writes that information to the console.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>LogAppend</maml:name>
              <maml:Description>
                <maml:para>Indicates that this cmdlet appends information to the log instead overwriting it.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>RefreshModulePage</maml:name>
              <maml:Description>
                <maml:para>Update module page when updating the help module.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>AlphabeticParamsOrder</maml:name>
              <maml:Description>
                <maml:para>Order parameters alphabetically by name in PARAMETERS section. There are 5 exceptions: -Confirm, -WhatIf, -IncludeTotalCount, -Skip, and -First parameters will be the last. These parameters are common and hence have well-defined behavior.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Session</maml:name>
              <maml:Description>
                <maml:para>Provides support for remote commands. Pass the session that you used to create the commands with `Import-PSSession`. This is required to get accurate parameters metadata from the remote session.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">PSSession</command:parameterValue>
              <dev:type>
                <maml:name>PSSession</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>UseFullTypeName</maml:name>
              <maml:Description>
                <maml:para>Indicates that the target document will use a full type name instead of a short name for parameters.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>UpdateInputOutput</maml:name>
              <maml:Description>
                <maml:para>Refreshes the Input and Output sections to reflect the current state of the cmdlet.  WARNING: this parameter will remove any manual additions to these sections.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ModulePagePath</maml:name>
              <maml:Description>
                <maml:para>When -RefreshModulePage is used by default it puts .md file in same location as all other docs. With this parameter you can specify new name/location providing better placement options.</maml:para>
              </maml:Description>
              <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
              <dev:type>
                <maml:name>String</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>None</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>Force</maml:name>
              <maml:Description>
                <maml:para>Remove help files that no longer exists within sessions (for example if function was deleted)</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
            <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
              <maml:name>ExcludeDontShow</maml:name>
              <maml:Description>
                <maml:para>Exclude the parameters marked with `DontShow` in the parameter attribute from the help content.</maml:para>
              </maml:Description>
              <dev:type>
                <maml:name>SwitchParameter</maml:name>
                <maml:uri />
              </dev:type>
              <dev:defaultValue>False</dev:defaultValue>
            </command:parameter>
          </command:syntaxItem>
        </command:syntax>
        <command:parameters>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
            <maml:name>Encoding</maml:name>
            <maml:Description>
              <maml:para>Specifies the character encoding for your markdown help files. Specify a System.Text.Encoding object. For more information, see Character Encoding in the .NET Framework (https://msdn.microsoft.com/en-us/library/ms404377.aspx)in the Microsoft Developer Network. For example, you can control Byte Order Mark (BOM) preferences. For more information, see Using PowerShell to write a file in UTF-8 without the BOM (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom)at the Stack Overflow community.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">Encoding</command:parameterValue>
            <dev:type>
              <maml:name>Encoding</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>UTF8 without BOM</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>LogAppend</maml:name>
            <maml:Description>
              <maml:para>Indicates that this cmdlet appends information to the log instead overwriting it.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
            <maml:name>LogPath</maml:name>
            <maml:Description>
              <maml:para>Specifies a file path for log information. The cmdlet writes the VERBOSE stream to the log. If you specify the Verbose parameter, this cmdlet also writes that information to the console.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByValue)" position="0" aliases="none">
            <maml:name>Path</maml:name>
            <maml:Description>
              <maml:para>Specifies an array of paths of markdown folders to update. The folder must contain a module page from which this cmdlet can get the module name.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
            <dev:type>
              <maml:name>String[]</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>RefreshModulePage</maml:name>
            <maml:Description>
              <maml:para>Update module page when updating the help module.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>AlphabeticParamsOrder</maml:name>
            <maml:Description>
              <maml:para>Order parameters alphabetically by name in PARAMETERS section. There are 5 exceptions: -Confirm, -WhatIf, -IncludeTotalCount, -Skip, and -First parameters will be the last. These parameters are common and hence have well-defined behavior.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Session</maml:name>
            <maml:Description>
              <maml:para>Provides support for remote commands. Pass the session that you used to create the commands with `Import-PSSession`. This is required to get accurate parameters metadata from the remote session.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">PSSession</command:parameterValue>
            <dev:type>
              <maml:name>PSSession</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>UseFullTypeName</maml:name>
            <maml:Description>
              <maml:para>Indicates that the target document will use a full type name instead of a short name for parameters.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>UpdateInputOutput</maml:name>
            <maml:Description>
              <maml:para>Refreshes the Input and Output sections to reflect the current state of the cmdlet.  WARNING: this parameter will remove any manual additions to these sections.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ModulePagePath</maml:name>
            <maml:Description>
              <maml:para>When -RefreshModulePage is used by default it puts .md file in same location as all other docs. With this parameter you can specify new name/location providing better placement options.</maml:para>
            </maml:Description>
            <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
            <dev:type>
              <maml:name>String</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>None</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>Force</maml:name>
            <maml:Description>
              <maml:para>Remove help files that no longer exists within sessions (for example if function was deleted)</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
          <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
            <maml:name>ExcludeDontShow</maml:name>
            <maml:Description>
              <maml:para>Exclude the parameters marked with `DontShow` in the parameter attribute from the help content.</maml:para>
            </maml:Description>
            <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
            <dev:type>
              <maml:name>SwitchParameter</maml:name>
              <maml:uri />
            </dev:type>
            <dev:defaultValue>False</dev:defaultValue>
          </command:parameter>
        </command:parameters>
        <command:inputTypes>
          <command:inputType>
            <dev:type>
              <maml:name>System.String[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>You can pipe an array of paths to this cmdlet.</maml:para>
            </maml:description>
          </command:inputType>
        </command:inputTypes>
        <command:returnValues>
          <command:returnValue>
            <dev:type>
              <maml:name>System.IO.FileInfo[]</maml:name>
            </dev:type>
            <maml:description>
              <maml:para>This cmdlet returns a FileInfo[] object for updated and new files.</maml:para>
            </maml:description>
          </command:returnValue>
        </command:returnValues>
        <maml:alertSet>
          <maml:alert>
            <maml:para>The module for which you want to update the help should first be imported from the location containing the previous version of the help.  If this condition is not met, the parameter order will be alphabetical in the updated help, even if the parameter AlphabeticParamsOrder has not been used.</maml:para>
          </maml:alert>
        </maml:alertSet>
        <command:examples>
          <command:example>
            <maml:title>----------- Example 1: Update a markdown help module -----------</maml:title>
            <dev:code>PS C:\&gt; Update-MarkdownHelpModule -Path ".\docs"
    
        Directory: D:\Working\PlatyPS\docs
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----        5/22/2016   6:54 PM           1496 Get-HelpPreview.md
    -a----        5/22/2016   6:54 PM           3208 Get-MarkdownMetadata.md
    -a----        5/22/2016   6:54 PM           3059 New-ExternalHelp.md
    -a----        5/22/2016   6:54 PM           2702 New-ExternalHelpCab.md
    -a----        5/22/2016   6:54 PM           6234 New-MarkdownHelp.md
    -a----        5/22/2016   6:54 PM           2346 Update-MarkdownHelp.md
    -a----        5/22/2016   6:54 PM           1633 Update-MarkdownHelpModule.md
    -a----        5/22/2016   6:54 PM           1630 Update-MarkdownHelpSchema.md</dev:code>
            <dev:remarks>
              <maml:para>This command updates all the files in the specified folder based on the cmdlets as loaded into your current session. The command creates markdown help topics for any cmdlets that are not already included in the .\docs folder.</maml:para>
            </dev:remarks>
          </command:example>
        </command:examples>
        <command:relatedLinks>
          <maml:navigationLink>
            <maml:linkText>Online Version:</maml:linkText>
            <maml:uri>https://github.com/PowerShell/platyPS/blob/master/docs/Update-MarkdownHelpModule.md</maml:uri>
          </maml:navigationLink>
          <maml:navigationLink>
            <maml:linkText>Character Encoding in the .NET Framework</maml:linkText>
            <maml:uri>https://msdn.microsoft.com/en-us/library/ms404377.aspx</maml:uri>
          </maml:navigationLink>
          <maml:navigationLink>
            <maml:linkText>Using PowerShell to write a file in UTF-8 without the BOM</maml:linkText>
            <maml:uri>http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom</maml:uri>
          </maml:navigationLink>
        </command:relatedLinks>
      </command:command>
    </helpItems>
  • tools\PlatyPS\Markdown.MAML.dll Show
    md5: 3AE73CC089E56C5A2A8C8287E5BAC582 | sha1: 1EE2E68EE207796639F924258D4CAAE0AEE63B7A | sha256: 67B836D940D9C0F6362D15F0A70CD90956E4ABB5644CD794585587CD41C2E260 | sha512: 1BC6B3F069967439289F532DD764B81EC13EA2D08AF98036C60048111699BB90A86EB44EC0C6AF248DC6701B6AF917CBF59624A264F69B3FF2E47B7227FA9C5C
  • tools\PlatyPS\platyPS.psd1 Show
    #
    # Module manifest for module 'platyPS'
    #
    # Generated by: PowerShell team
    #
    # Generated on: 2/4/2016
    #
    
    @{
    
    # Script module or binary module file associated with this manifest.
    RootModule = 'platyPS.psm1'
    
    # Version number of this module.
    ModuleVersion = '0.14.0'
    
    # ID used to uniquely identify this module
    GUID = '0bdcabef-a4b7-4a6d-bf7e-d879817ebbff'
    
    # Author of this module
    Author = 'PowerShell team'
    
    # Company or vendor of this module
    CompanyName = 'Microsoft'
    
    # Copyright statement for this module
    Copyright = '(c) 2016 PowerShell team. All rights reserved.'
    
    # Description of the functionality provided by this module
    Description = 'Generate PowerShell External Help files from Markdown'
    
    # Minimum version of the Windows PowerShell engine required by this module
    # PowerShellVersion = ''
    
    # Name of the Windows PowerShell host required by this module
    # PowerShellHostName = ''
    
    # Minimum version of the Windows PowerShell host required by this module
    # PowerShellHostVersion = ''
    
    # Minimum version of Microsoft .NET Framework required by this module
    # DotNetFrameworkVersion = ''
    
    # Minimum version of the common language runtime (CLR) required by this module
    # CLRVersion = ''
    
    # Processor architecture (None, X86, Amd64) required by this module
    # ProcessorArchitecture = ''
    
    # Modules that must be imported into the global environment prior to importing this module
    # RequiredModules = @()
    
    # Assemblies that must be loaded prior to importing this module
    RequiredAssemblies = @('Markdown.MAML.dll','YamlDotNet.dll')
    
    # Script files (.ps1) that are run in the caller's environment prior to importing this module.
    # ScriptsToProcess = @()
    
    # Type files (.ps1xml) to be loaded when importing this module
    # TypesToProcess = @()
    
    # Format files (.ps1xml) to be loaded when importing this module
    # FormatsToProcess = @()
    
    # Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
    NestedModules = @()
    
    # Functions to export from this module
    FunctionsToExport = @(
        'New-MarkdownHelp',
        'Get-MarkdownMetadata',
        'New-ExternalHelp',
        'New-YamlHelp',
        'Get-HelpPreview',
        'New-ExternalHelpCab',
        'Update-MarkdownHelp',
        'Update-MarkdownHelpModule',
        'New-MarkdownAboutHelp',
        'Merge-MarkdownHelp'
    )
    
    # Cmdlets to export from this module
    CmdletsToExport = @()
    
    # Variables to export from this module
    VariablesToExport = @()
    
    # Aliases to export from this module
    AliasesToExport = @()
    
    # DSC resources to export from this module
    # DscResourcesToExport = @()
    
    # List of all modules packaged with this module
    # ModuleList = @()
    
    # List of all files packaged with this module
    # FileList = @()
    
    # Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
    PrivateData = @{
    
        PSData = @{
    
            # Tags applied to this module. These help with module discovery in online galleries.
            Tags = @('help', 'markdown', 'MAML', 'PSEdition_Core', 'PSEdition_Desktop')
    
            # A URL to the license for this module.
            LicenseUri = 'https://github.com/PowerShell/platyPS/blob/master/LICENSE'
    
            # A URL to the main website for this project.
            ProjectUri = 'https://github.com/PowerShell/platyPS'
    
            # A URL to an icon representing this module.
            # IconUri = ''
    
            # ReleaseNotes of this module
            # ReleaseNotes = ''
    
        } # End of PSData hashtable
    
    } # End of PrivateData hashtable
    
    # HelpInfo URI of this module
    # HelpInfoURI = ''
    
    # Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
    # DefaultCommandPrefix = ''
    
    }
    
    
  • tools\PlatyPS\platyPS.psm1 Show
    #region PlatyPS
    
    ## DEVELOPERS NOTES & CONVENTIONS
    ##
    ##  1. Non-exported functions (subroutines) should avoid using
    ##     PowerShell standard Verb-Noun naming convention.
    ##     They should use camalCase or PascalCase instead.
    ##  2. SMALL subroutines, used only from ONE function
    ##     should be placed inside the parent function body.
    ##     They should use camalCase for the name.
    ##  3. LARGE subroutines and subroutines used from MORE THEN ONE function
    ##     should be placed after the IMPLEMENTATION text block in the middle
    ##     of this module.
    ##     They should use PascalCase for the name.
    ##  4. Add comment "# yeild" on subroutine calls that write values to pipeline.
    ##     It would help keep code maintainable and simplify ramp up for others.
    ##
    
    Import-LocalizedData -BindingVariable LocalizedData -FileName platyPS.Resources.psd1
    
    ## Script constants
    
    $script:EXTERNAL_HELP_FILE_YAML_HEADER = 'external help file'
    $script:ONLINE_VERSION_YAML_HEADER = 'online version'
    $script:SCHEMA_VERSION_YAML_HEADER = 'schema'
    $script:APPLICABLE_YAML_HEADER = 'applicable'
    
    $script:UTF8_NO_BOM = New-Object System.Text.UTF8Encoding -ArgumentList $False
    $script:SET_NAME_PLACEHOLDER = 'UNNAMED_PARAMETER_SET'
    # TODO: this is just a place-holder, we can do better
    $script:DEFAULT_MAML_XML_OUTPUT_NAME = 'rename-me-help.xml'
    
    $script:MODULE_PAGE_MODULE_NAME = "Module Name"
    $script:MODULE_PAGE_GUID = "Module Guid"
    $script:MODULE_PAGE_LOCALE = "Locale"
    $script:MODULE_PAGE_FW_LINK = "Download Help Link"
    $script:MODULE_PAGE_HELP_VERSION = "Help Version"
    $script:MODULE_PAGE_ADDITIONAL_LOCALE = "Additional Locale"
    
    $script:MAML_ONLINE_LINK_DEFAULT_MONIKER = 'Online Version:'
    
    function New-MarkdownHelp
    {
        [CmdletBinding()]
        [OutputType([System.IO.FileInfo[]])]
        param(
            [Parameter(Mandatory=$true,
                ValueFromPipeline=$true,
                ParameterSetName="FromModule")]
            [string[]]$Module,
    
            [Parameter(Mandatory=$true,
                ParameterSetName="FromCommand")]
            [string[]]$Command,
    
            [Parameter(Mandatory=$true,
                ParameterSetName="FromMaml")]
            [string[]]$MamlFile,
    
            [Parameter(ParameterSetName="FromModule")]
            [Parameter(ParameterSetName="FromCommand")]
            [System.Management.Automation.Runspaces.PSSession]$Session,
    
            [Parameter(ParameterSetName="FromMaml")]
            [switch]$ConvertNotesToList,
    
            [Parameter(ParameterSetName="FromMaml")]
            [switch]$ConvertDoubleDashLists,
    
            [switch]$Force,
    
            [switch]$AlphabeticParamsOrder,
    
            [hashtable]$Metadata,
    
            [Parameter(ParameterSetName="FromCommand")]
            [string]$OnlineVersionUrl = '',
    
            [Parameter(Mandatory=$true)]
            [string]$OutputFolder,
    
            [switch]$NoMetadata,
    
            [switch]$UseFullTypeName,
    
            [System.Text.Encoding]$Encoding = $script:UTF8_NO_BOM,
    
            [Parameter(ParameterSetName="FromModule")]
            [Parameter(ParameterSetName="FromMaml")]
            [switch]$WithModulePage,
    
            [Parameter(ParameterSetName="FromModule")]
            [Parameter(ParameterSetName="FromMaml")]
            [string]$ModulePagePath,
    
            [Parameter(ParameterSetName="FromModule")]
            [Parameter(ParameterSetName="FromMaml")]
            [string]
            $Locale = "en-US",
    
            [Parameter(ParameterSetName="FromModule")]
            [Parameter(ParameterSetName="FromMaml")]
            [string]
            $HelpVersion = $LocalizedData.HelpVersion,
    
            [Parameter(ParameterSetName="FromModule")]
            [Parameter(ParameterSetName="FromMaml")]
            [string]
            $FwLink = $LocalizedData.FwLink,
    
            [Parameter(ParameterSetName="FromMaml")]
            [string]
            $ModuleName = "MamlModule",
    
            [Parameter(ParameterSetName="FromMaml")]
            [string]
            $ModuleGuid = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
    
            [switch]
            $ExcludeDontShow
        )
    
        begin
        {
            validateWorkingProvider
            New-Item -Type Directory $OutputFolder -ErrorAction SilentlyContinue > $null
        }
    
        process
        {
            function updateMamlObject
            {
                param(
                    [Parameter(Mandatory=$true)]
                    [Markdown.MAML.Model.MAML.MamlCommand]$MamlCommandObject
                )
    
                #
                # Here we define our misc template for new markdown to bootstrape easier
                #
    
                # Example
                if ($MamlCommandObject.Examples.Count -eq 0)
                {
                    $MamlExampleObject = New-Object -TypeName Markdown.MAML.Model.MAML.MamlExample
    
                    $MamlExampleObject.Title = $LocalizedData.ExampleTitle
                    $MamlExampleObject.Code = @(
                        New-Object -TypeName Markdown.MAML.Model.MAML.MamlCodeBlock ($LocalizedData.ExampleCode, 'powershell')
                    )
                    $MamlExampleObject.Remarks = $LocalizedData.ExampleRemark
    
                    $MamlCommandObject.Examples.Add($MamlExampleObject)
                }
    
                if ($AlphabeticParamsOrder)
                {
                    SortParamsAlphabetically $MamlCommandObject
                }
            }
    
            function processMamlObjectToFile
            {
                param(
                    [Parameter(ValueFromPipeline=$true)]
                    [ValidateNotNullOrEmpty()]
                    [Markdown.MAML.Model.MAML.MamlCommand]$mamlObject
                )
    
                process
                {
                    # populate template
                    updateMamlObject $mamlObject
                    if (-not $OnlineVersionUrl)
                    {
                        # if it's not passed, we should get it from the existing help
                        $onlineLink = $mamlObject.Links | Select-Object -First 1
                        if ($onlineLink)
                        {
                            $online = $onlineLink.LinkUri
                            if ($onlineLink.LinkName -eq $script:MAML_ONLINE_LINK_DEFAULT_MONIKER -or $onlineLink.LinkName -eq $onlineLink.LinkUri)
                            {
                                # if links follow standart MS convention or doesn't have name,
                                # remove it to avoid duplications
                                $mamlObject.Links.Remove($onlineLink) > $null
                            }
                        }
                    }
                    else
                    {
                        $online = $OnlineVersionUrl
                    }
    
                    $commandName = $mamlObject.Name
    
                    # create markdown
                    if ($NoMetadata)
                    {
                        $newMetadata = $null
                    }
                    else
                    {
                        # get help file name
                        if ($MamlFile)
                        {
                            $helpFileName = Split-Path -Leaf $MamlFile
                        }
                        else
                        {
                            # Get-Command requires that script input be a path
                            if ($mamlObject.Name.EndsWith(".ps1"))
                            {
                                $getCommandName = Resolve-Path $Command
                            }
                            # For cmdlets, nothing needs to be done
                            else
                            {
                                $getCommandName = $commandName
                            }
    
                            $a = @{
                                Name = $getCommandName
                            }
                            if ($module) {
                                # for module case, scope it just to this module
                                $a['Module'] = $module
                            }
    
                            $helpFileName = GetHelpFileName (Get-Command @a)
                        }
    
                        Write-Verbose "Maml things module is: $($mamlObject.ModuleName)"
    
                        $newMetadata = ($Metadata + @{
                            $script:EXTERNAL_HELP_FILE_YAML_HEADER = $helpFileName
                            $script:ONLINE_VERSION_YAML_HEADER = $online
                            $script:MODULE_PAGE_MODULE_NAME = $mamlObject.ModuleName
                        })
                    }
    
                    $md = ConvertMamlModelToMarkdown -mamlCommand $mamlObject -metadata $newMetadata -NoMetadata:$NoMetadata
    
                    MySetContent -path (Join-Path $OutputFolder "$commandName.md") -value $md -Encoding $Encoding -Force:$Force
                }
            }
    
            if ($NoMetadata -and $Metadata)
            {
                throw $LocalizedData.NoMetadataAndMetadata
            }
    
            if ($PSCmdlet.ParameterSetName -eq 'FromCommand')
            {
                $command | ForEach-Object {
                    if (-not (Get-Command $_ -ErrorAction SilentlyContinue))
                    {
                        throw $LocalizedData.CommandNotFound -f $_
                    }
    
                    GetMamlObject -Session $Session -Cmdlet $_ -UseFullTypeName:$UseFullTypeName -ExcludeDontShow:$ExcludeDontShow.IsPresent | processMamlObjectToFile
                }
            }
            else
            {
                if ($module)
                {
                    $iterator = $module
                }
                else
                {
                    $iterator = $MamlFile
                }
    
                $iterator | ForEach-Object {
                    if ($PSCmdlet.ParameterSetName -eq 'FromModule')
                    {
                        if (-not (GetCommands -AsNames -module $_))
                        {
                            throw $LocalizedData.ModuleNotFound -f $_
                        }
    
                        GetMamlObject -Session $Session -Module $_ -UseFullTypeName:$UseFullTypeName -ExcludeDontShow:$ExcludeDontShow.IsPresent | processMamlObjectToFile
    
                        $ModuleName = $_
                        $ModuleGuid = (Get-Module $ModuleName).Guid
                        $CmdletNames = GetCommands -AsNames -Module $ModuleName
                    }
                    else # 'FromMaml'
                    {
                        if (-not (Test-Path $_))
                        {
                            throw $LocalizedData.FileNotFound -f $_
                        }
    
                        GetMamlObject -MamlFile $_ -ConvertNotesToList:$ConvertNotesToList -ConvertDoubleDashLists:$ConvertDoubleDashLists  -ExcludeDontShow:$ExcludeDontShow.IsPresent | processMamlObjectToFile
    
                        $CmdletNames += GetMamlObject -MamlFile $_ -ExcludeDontShow:$ExcludeDontShow.IsPresent | ForEach-Object {$_.Name}
                    }
    
                    if($WithModulePage)
                    {
                        if(-not $ModuleGuid)
                        {
                            $ModuleGuid = "00000000-0000-0000-0000-000000000000"
                        }
                        if($ModuleGuid.Count -gt 1)
                        {
                            Write-Warning -Message $LocalizedData.MoreThanOneGuid
                        }
                        # yeild
                        NewModuleLandingPage  -Path $OutputFolder `
                                            -ModulePagePath $ModulePagePath `
                                            -ModuleName $ModuleName `
                                            -ModuleGuid $ModuleGuid `
                                            -CmdletNames $CmdletNames `
                                            -Locale $Locale `
                                            -Version $HelpVersion `
                                            -FwLink $FwLink `
                                            -Encoding $Encoding `
                                            -Force:$Force
                    }
                }
            }
        }
    }
    
    
    function Get-MarkdownMetadata
    {
        [CmdletBinding(DefaultParameterSetName="FromPath")]
    
        param(
            [Parameter(Mandatory=$true,
                ValueFromPipeline=$true,
                ValueFromPipelineByPropertyName=$true,
                Position=1,
                ParameterSetName="FromPath")]
            [SupportsWildcards()]
            [string[]]$Path,
    
            [Parameter(Mandatory=$true,
                ParameterSetName="FromMarkdownString")]
            [string]$Markdown
        )
    
        process
        {
            if ($PSCmdlet.ParameterSetName -eq 'FromMarkdownString')
            {
                return [Markdown.MAML.Parser.MarkdownParser]::GetYamlMetadata($Markdown)
            }
            else # FromFile)
            {
                GetMarkdownFilesFromPath $Path -IncludeModulePage | ForEach-Object {
                    $md = Get-Content -Raw $_.FullName
                    [Markdown.MAML.Parser.MarkdownParser]::GetYamlMetadata($md) # yeild
                }
            }
        }
    }
    
    function Update-MarkdownHelp
    {
        [CmdletBinding()]
        [OutputType([System.IO.FileInfo[]])]
        param(
            [Parameter(Mandatory=$true,
                ValueFromPipeline=$true)]
            [SupportsWildcards()]
            [string[]]$Path,
    
            [System.Text.Encoding]$Encoding = $script:UTF8_NO_BOM,
    
            [string]$LogPath,
            [switch]$LogAppend,
            [switch]$AlphabeticParamsOrder,
            [switch]$UseFullTypeName,
            [switch]$UpdateInputOutput,
            [Switch]$Force,
            [System.Management.Automation.Runspaces.PSSession]$Session,
            [switch]$ExcludeDontShow
        )
    
        begin
        {
            validateWorkingProvider
            $infoCallback = GetInfoCallback $LogPath -Append:$LogAppend
            $MarkdownFiles = @()
        }
    
        process
        {
            $MarkdownFiles += GetMarkdownFilesFromPath $Path
        }
    
        end
        {
            function log
            {
                param(
                    [string]$message,
                    [switch]$warning
                )
    
                $message = "[Update-MarkdownHelp] $([datetime]::now) $message"
                if ($warning)
                {
                    Write-Warning $message
                }
    
                $infoCallback.Invoke($message)
            }
    
            if (-not $MarkdownFiles)
            {
                log -warning ($LocalizedData.NoMarkdownFiles -f $Path)
                return
            }
    
    
            $MarkdownFiles | ForEach-Object {
                $file = $_
    
                $filePath = $file.FullName
                $oldModels = GetMamlModelImpl $filePath -ForAnotherMarkdown -Encoding $Encoding
    
                if ($oldModels.Count -gt 1)
                {
                    log -warning ($LocalizedData.FileContainsMoreThanOneCommand -f $filePath)
                    log -warning $LocalizedData.OneCommandPerFile
                    return
                }
    
                $oldModel = $oldModels[0]
    
                $name = $oldModel.Name
                [Array]$loadedModulesBefore = $(Get-Module | Select-Object -Property Name)
                $command = Get-Command $name -ErrorAction SilentlyContinue
                if (-not $command)
                {
                    if ($Force) {
                        if (Test-Path $filePath) {
                            Remove-Item -Path $filePath -Confirm:$false
                            log -warning ($LocalizedData.CommandNotFoundFileRemoved -f $name, $filePath)
                            return
                        }
                    } else {
                        log -warning ($LocalizedData.CommandNotFoundSkippingFile -f $name, $filePath)
                        return
                    }
                }
                elseif (($null -ne $command.ModuleName) -and ($loadedModulesBefore.Name -notcontains $command.ModuleName))
                {
                    log -warning ($LocalizedData.ModuleImporteAutomaticaly -f $($command.ModuleName))
                }
    
                # update the help file entry in the metadata
                $metadata = Get-MarkdownMetadata $filePath
                $metadata["external help file"] = GetHelpFileName $command
                $reflectionModel = GetMamlObject -Session $Session -Cmdlet $name -UseFullTypeName:$UseFullTypeName -ExcludeDontShow:$ExcludeDontShow.IsPresent
                $metadata[$script:MODULE_PAGE_MODULE_NAME] = $reflectionModel.ModuleName
    
                $merger = New-Object Markdown.MAML.Transformer.MamlModelMerger -ArgumentList $infoCallback
                $newModel = $merger.Merge($reflectionModel, $oldModel, $UpdateInputOutput)
    
                if ($AlphabeticParamsOrder)
                {
                    SortParamsAlphabetically $newModel
                }
    
                $md = ConvertMamlModelToMarkdown -mamlCommand $newModel -metadata $metadata -PreserveFormatting
                MySetContent -path $file.FullName -value $md -Encoding $Encoding -Force # yield
            }
        }
    }
    
    function Merge-MarkdownHelp
    {
        [CmdletBinding()]
        [OutputType([System.IO.FileInfo[]])]
        param(
            [Parameter(Mandatory=$true,
                ValueFromPipeline=$true)]
            [SupportsWildcards()]
            [string[]]$Path,
    
            [Parameter(Mandatory=$true)]
            [string]$OutputPath,
    
            [System.Text.Encoding]$Encoding = $script:UTF8_NO_BOM,
    
            [Switch]$ExplicitApplicableIfAll,
    
            [Switch]$Force,
    
            [string]$MergeMarker = "!!! "
        )
    
        begin
        {
            validateWorkingProvider
            $MarkdownFiles = @()
        }
    
        process
        {
            $MarkdownFiles += GetMarkdownFilesFromPath $Path
        }
    
        end
        {
            function log
            {
                param(
                    [string]$message,
                    [switch]$warning
                )
    
                $message = "[Update-MarkdownHelp] $([datetime]::now) $message"
                if ($warning)
                {
                    Write-Warning $message
                }
                else
                {
                    Write-Verbose $message
                }
            }
    
            if (-not $MarkdownFiles)
            {
                log -warning ($LocalizedData.NoMarkdownFiles -f $Path)
                return
            }
    
            function getTags
            {
                param($files)
    
                ($files | Split-Path | Split-Path -Leaf | Group-Object).Name
            }
    
            # use parent folder names as tags
            $allTags = getTags $MarkdownFiles
            log "Using following tags for the merge: $tags"
            $fileGroups = $MarkdownFiles | Group-Object -Property Name
            log "Found $($fileGroups.Count) file groups"
    
            $fileGroups | ForEach-Object {
                $files = $_.Group
                $groupName = $_.Name
    
                $dict = New-Object 'System.Collections.Generic.Dictionary[string, Markdown.MAML.Model.MAML.MamlCommand]'
                $files | ForEach-Object {
                    $model = GetMamlModelImpl $_.FullName -ForAnotherMarkdown -Encoding $Encoding
                    # unwrap List of 1 element
                    $model = $model[0]
                    $tag = getTags $_
                    log "Adding tag $tag and $model"
                    $dict[$tag] = $model
                }
    
                $tags = $dict.Keys
                if (($allTags | measure-object).Count -gt ($tags | measure-object).Count -or $ExplicitApplicableIfAll)
                {
                    $newMetadata = @{ $script:APPLICABLE_YAML_HEADER = $tags -join ', ' }
                }
                else
                {
                    $newMetadata = @{}
                }
    
                $merger = New-Object Markdown.MAML.Transformer.MamlMultiModelMerger -ArgumentList $null, (-not $ExplicitApplicableIfAll), $MergeMarker
                $newModel = $merger.Merge($dict)
    
                $md = ConvertMamlModelToMarkdown -mamlCommand $newModel -metadata $newMetadata -PreserveFormatting
                $outputFilePath = Join-Path $OutputPath $groupName
                MySetContent -path $outputFilePath -value $md -Encoding $Encoding -Force:$Force # yeild
            }
        }
    }
    
    function Update-MarkdownHelpModule
    {
        [CmdletBinding()]
        [OutputType([System.IO.FileInfo[]])]
        param(
            [Parameter(Mandatory=$true,
                ValueFromPipeline=$true)]
            [SupportsWildcards()]
            [string[]]$Path,
    
            [System.Text.Encoding]$Encoding = $script:UTF8_NO_BOM,
            [switch]$RefreshModulePage,
            [string]$ModulePagePath,
            [string]$LogPath,
            [switch]$LogAppend,
            [switch]$AlphabeticParamsOrder,
            [switch]$UseFullTypeName,
            [switch]$UpdateInputOutput,
            [switch]$Force,
            [System.Management.Automation.Runspaces.PSSession]$Session,
            [switch]$ExcludeDontShow
        )
    
        begin
        {
            validateWorkingProvider
            $infoCallback = GetInfoCallback $LogPath -Append:$LogAppend
            $MarkdownFiles = @()
        }
    
        process
        {
        }
    
        end
        {
            function log
            {
                param(
                    [string]$message,
                    [switch]$warning
                )
    
                $message = "[Update-MarkdownHelpModule] $([datetime]::now) $message"
                if ($warning)
                {
                    Write-Warning $message
                }
    
                $infoCallback.Invoke($message)
            }
    
            foreach ($modulePath in $Path)
            {
                $module = $null
                $h = Get-MarkdownMetadata -Path $modulePath
                # this is pretty hacky and would lead to errors
                # the idea is to find module name from landing page when it's available
                if ($h.$script:MODULE_PAGE_MODULE_NAME)
                {
                    $module = $h.$script:MODULE_PAGE_MODULE_NAME | Select-Object -First 1
                    log ($LocalizedData.ModuleNameFromPath -f $modulePath, $module)
                }
    
                if (-not $module)
                {
                    Write-Error -Message ($LocalizedData.ModuleNameNotFoundFromPath -f $modulePath)
                    continue
                }
    
                # always append on this call
                log ("[Update-MarkdownHelpModule]" + (Get-Date).ToString())
                log ($LocalizedData.UpdateDocsForModule -f $module, $modulePath)
                $affectedFiles = Update-MarkdownHelp -Session $Session -Path $modulePath -LogPath $LogPath -LogAppend -Encoding $Encoding -AlphabeticParamsOrder:$AlphabeticParamsOrder -UseFullTypeName:$UseFullTypeName -UpdateInputOutput:$UpdateInputOutput -Force:$Force -ExcludeDontShow:$ExcludeDontShow
                $affectedFiles # yeild
    
                $allCommands = GetCommands -AsNames -Module $Module
                if (-not $allCommands)
                {
                    throw $LocalizedData.ModuleOrCommandNotFound -f $Module
                }
    
                $updatedCommands = $affectedFiles.BaseName
                $allCommands | ForEach-Object {
                    if ( -not ($updatedCommands -contains $_) )
                    {
                        log ($LocalizedData.CreatingNewMarkdownForCommand -f $_)
                        $newFiles = New-MarkdownHelp -Command $_ -OutputFolder $modulePath -AlphabeticParamsOrder:$AlphabeticParamsOrder -Force:$Force -ExcludeDontShow:$ExcludeDontShow
                        $newFiles # yeild
                    }
                }
    
                if($RefreshModulePage)
                {
                    $MamlModel = New-Object System.Collections.Generic.List[Markdown.MAML.Model.MAML.MamlCommand]
                    $files = @()
                    $MamlModel = GetMamlModelImpl $affectedFiles -ForAnotherMarkdown -Encoding $Encoding
                    NewModuleLandingPage  -RefreshModulePage -ModulePagePath $ModulePagePath -Path $modulePath -ModuleName $module -Module $MamlModel -Encoding $Encoding -Force
                }
            }
        }
    }
    
    function New-MarkdownAboutHelp
    {
        [CmdletBinding()]
        param(
            [Parameter(Mandatory=$true)]
            [string] $OutputFolder,
            [string] $AboutName
        )
    
        begin
        {
            if ($AboutName.StartsWith('about_')) { $AboutName = $AboutName.Substring('about_'.Length)}
            validateWorkingProvider
            $templatePath =  Join-Path $PSScriptRoot "templates\aboutTemplate.md"
        }
    
        process
        {
            if(Test-Path $OutputFolder)
            {
                $AboutContent = Get-Content $templatePath
                $AboutContent = $AboutContent.Replace("{{FileNameForHelpSystem}}",("about_" + $AboutName))
                $AboutContent = $AboutContent.Replace("{{TOPIC NAME}}",$AboutName)
                $NewAboutTopic = New-Item -Path $OutputFolder -Name "about_$($AboutName).md"
                Set-Content -Value $AboutContent -Path $NewAboutTopic -Encoding UTF8
            }
            else
            {
                throw $LocalizedData.OutputFolderNotFound
            }
        }
    }
    
    function New-YamlHelp
    {
        [CmdletBinding()]
        [OutputType([System.IO.FileInfo[]])]
        param(
            [Parameter(Mandatory=$true,
                Position=1,
                ValueFromPipeline=$true,
                ValueFromPipelineByPropertyName=$true)]
            [string[]]$Path,
    
            [Parameter(Mandatory=$true)]
            [string]$OutputFolder,
    
            [System.Text.Encoding]$Encoding = [System.Text.Encoding]::UTF8,
    
            [switch]$Force
        )
        begin
        {
            validateWorkingProvider
    
            $MarkdownFiles = @()
    
            if(-not (Test-Path $OutputFolder))
            {
                New-Item -Type Directory $OutputFolder -ErrorAction SilentlyContinue > $null
            }
    
            if(-not (Test-Path -PathType Container $OutputFolder))
            {
                throw $LocalizedData.PathIsNotFolder -f $OutputFolder
            }
        }
        process
        {
            $MarkdownFiles += GetMarkdownFilesFromPath $Path
        }
        end
        {
            $MarkdownFiles | ForEach-Object {
                Write-Verbose -Message ($LocalizedData.InputMarkdownFile -f '[New-YamlHelp]', $_)
            }
    
            foreach($markdownFile in $MarkdownFiles)
            {
                $mamlModels = GetMamlModelImpl $markdownFile.FullName -Encoding $Encoding
                foreach($mamlModel in $mamlModels)
                {
                    $markdownMetadata = Get-MarkdownMetadata -Path $MarkdownFile.FullName
    
                    ## We set the module here in the PowerShell since the Yaml block is not read by the parser
                    $mamlModel.ModuleName = $markdownMetadata[$script:MODULE_PAGE_MODULE_NAME]
    
                    $yaml = [Markdown.MAML.Renderer.YamlRenderer]::MamlModelToString($mamlModel)
                    $outputFilePath = Join-Path $OutputFolder ($mamlModel.Name + ".yml")
                    Write-Verbose -Message ($LocalizedData.WritingYamlToPath -f $outputFilePath)
                    MySetContent -Path $outputFilePath -Value $yaml -Encoding $Encoding -Force:$Force
                }
            }
        }
    }
    
    function New-ExternalHelp
    {
        [CmdletBinding()]
        [OutputType([System.IO.FileInfo[]])]
        param(
            [Parameter(Mandatory=$true,
                Position=1,
                ValueFromPipeline=$true,
                ValueFromPipelineByPropertyName=$true)]
            [SupportsWildcards()]
            [string[]]$Path,
    
            [Parameter(Mandatory=$true)]
            [string]$OutputPath,
    
            [string[]]$ApplicableTag,
    
            [System.Text.Encoding]$Encoding = [System.Text.Encoding]::UTF8,
    
            [ValidateRange(80, [int]::MaxValue)]
            [int] $MaxAboutWidth = 80,
    
            [string]$ErrorLogFile,
    
            [switch]$Force,
    
            [switch]$ShowProgress
        )
    
        begin
        {
            validateWorkingProvider
    
            $MarkdownFiles = @()
            $AboutFiles = @()
            $IsOutputContainer = $true
            if ( $OutputPath.EndsWith('.xml') -and (-not (Test-Path -PathType Container $OutputPath )) )
            {
                $IsOutputContainer = $false
                Write-Verbose -Message ($LocalizedData.OutputPathAsFile -f '[New-ExternalHelp]', $OutputPath)
            }
            else
            {
                New-Item -Type Directory $OutputPath -ErrorAction SilentlyContinue > $null
                Write-Verbose -Message ($LocalizedData.OutputPathAsDirectory -f '[New-ExternalHelp]', $OutputPath)
            }
    
            if ( -not $ShowProgress -or $(Get-Variable -Name IsCoreClr -ValueOnly -ErrorAction SilentlyContinue) )
            {
                Function Write-Progress() {}
            }
        }
    
        process
        {
            $MarkdownFiles += GetMarkdownFilesFromPath $Path
    
            if($MarkdownFiles)
            {
                $AboutFiles += GetAboutTopicsFromPath -Path $Path -MarkDownFilesAlreadyFound $MarkdownFiles.FullName
            }
            else
            {
                $AboutFiles += GetAboutTopicsFromPath -Path $Path
            }
        }
    
        end
        {
           # Tracks all warnings and errors
           $warningsAndErrors = New-Object System.Collections.Generic.List[System.Object]
    
           try {
             # write verbose output and filter out files based on applicable tag
             $MarkdownFiles | ForEach-Object {
                Write-Verbose -Message ($LocalizedData.InputMarkdownFile -f '[New-ExternalHelp]', $_)
             }
    
             if ($ApplicableTag) {
                Write-Verbose -Message ($LocalizedData.FilteringForApplicableTag -f '[New-ExternalHelp]', $ApplicableTag)
                $MarkdownFiles = $MarkdownFiles | ForEach-Object {
                   $applicableList = GetApplicableList -Path $_.FullName
                   # this Compare-Object call is getting the intersection of two string[]
                   if ((-not $applicableList) -or (Compare-Object $applicableList $ApplicableTag -IncludeEqual -ExcludeDifferent)) {
                      # yeild
                      $_
                   }
                   else {
                      Write-Verbose -Message ($LocalizedData.SkippingMarkdownFile -f '[New-ExternalHelp]', $_)
                   }
                }
             }
    
             # group the files based on the output xml path metadata tag
             if ($IsOutputContainer) {
                $defaultPath = Join-Path $OutputPath $script:DEFAULT_MAML_XML_OUTPUT_NAME
                $groups = $MarkdownFiles | Group-Object {
                   $h = Get-MarkdownMetadata -Path $_.FullName
                   if ($h -and $h[$script:EXTERNAL_HELP_FILE_YAML_HEADER]) {
                      Join-Path $OutputPath $h[$script:EXTERNAL_HELP_FILE_YAML_HEADER]
                   }
                   else {
                      $msgLine1 = $LocalizedData.CannotFindInMetadataFile -f $script:EXTERNAL_HELP_FILE_YAML_HEADER, $_.FullName
                      $msgLine2 = $LocalizedData.PathWillBeUsed -f $defaultPath
                      $warningsAndErrors.Add(@{
                            Severity = "Warning"
                            Message  = "$msgLine1 $msgLine2"
                            FilePath = "$($_.FullName)"
                         })
    
                      Write-Warning -Message "[New-ExternalHelp] $msgLine1"
                      Write-Warning -Message "[New-ExternalHelp] $msgLine2"
                      $defaultPath
                   }
                }
             }
             else {
                $groups = $MarkdownFiles | Group-Object { $OutputPath }
             }
    
             # generate the xml content
             $r = new-object -TypeName 'Markdown.MAML.Renderer.MamlRenderer'
    
             foreach ($group in $groups) {
                $maml = GetMamlModelImpl ($group.Group | ForEach-Object {$_.FullName}) -Encoding $Encoding -ApplicableTag $ApplicableTag
                $xml = $r.MamlModelToString($maml)
    
                $outPath = $group.Name # group name
                Write-Verbose -Message ($LocalizedData.WritingExternalHelpToPath -f $outPath)
                MySetContent -Path $outPath -Value $xml -Encoding $Encoding -Force:$Force
             }
    
             # handle about topics
             if ($AboutFiles.Count -gt 0) {
                foreach ($About in $AboutFiles) {
                   $r = New-Object -TypeName 'Markdown.MAML.Renderer.TextRenderer' -ArgumentList($MaxAboutWidth)
                   $Content = Get-Content -Raw $About.FullName
                   $p = NewMarkdownParser
                   $model = $p.ParseString($Content)
                   $value = $r.AboutMarkDownToString($model)
    
                   $outPath = Join-Path $OutputPath ([io.path]::GetFileNameWithoutExtension($About.FullName) + ".help.txt")
                   if (!(Split-Path -Leaf $outPath).ToUpper().StartsWith("ABOUT_", $true, $null)) {
                      $outPath = Join-Path (Split-Path -Parent $outPath) ("about_" + (Split-Path -Leaf $outPath))
                   }
                   MySetContent -Path $outPath -Value $value -Encoding $Encoding -Force:$Force
                }
             }
           }
           catch {
              # Log error and rethrow
              $warningsAndErrors.Add(@{
                   Severity = "Error"
                   Message  = "$_.Exception.Message"
                   FilePath = ""
                })
    
             throw
           }
           finally {
             if ($ErrorLogFile) {
                ConvertTo-Json $warningsAndErrors | Out-File $ErrorLogFile
             }
           }
        }
    }
    
    function Get-HelpPreview
    {
        [CmdletBinding()]
        [OutputType('MamlCommandHelpInfo')]
        param(
            [Parameter(Mandatory=$true,
                ValueFromPipeline=$true,
                Position=1)]
            [SupportsWildcards()]
            [string[]]$Path,
    
            [switch]$ConvertNotesToList,
            [switch]$ConvertDoubleDashLists
        )
    
        process
        {
            foreach ($MamlFilePath in $Path)
            {
                if (-not (Test-path -Type Leaf $MamlFilePath))
                {
                    Write-Error -Message ($LocalizedData.FileNotFoundSkipping -f $MamlFilePath)
                    continue
                }
    
                # this is Resolve-Path that resolves mounted drives (i.e. good for tests)
                $MamlFilePath = (Get-ChildItem $MamlFilePath).FullName
    
                # Read the malm file
                $xml = [xml](Get-Content $MamlFilePath -Raw -ea SilentlyContinue)
                if (-not $xml)
                {
                    # already error-out on the convertion, no need to repeat ourselves
                    continue
                }
    
                # we need a copy of maml file to bypass powershell cache,
                # in case we reuse the same filename few times.
                $MamlCopyPath = [System.IO.Path]::GetTempFileName()
                try
                {
                    if ($ConvertDoubleDashLists)
                    {
                        $p = $xml.GetElementsByTagName('maml:para') | ForEach-Object {
                            # Convert "-- "-lists into "- "-lists
                            # to make them markdown compatible
                            # as described in https://github.com/PowerShell/platyPS/issues/117
                            $newInnerXml = $_.get_InnerXml() -replace "(`n|^)-- ", '$1- '
                            $_.set_InnerXml($newInnerXml)
                        }
                    }
    
                    if ($ConvertNotesToList)
                    {
                        # Add inline bullet-list, as described in https://github.com/PowerShell/platyPS/issues/125
                        $xml.helpItems.command.alertSet.alert |
                            ForEach-Object {
                                # make first <para> a list item
                                # add indentations to other <para> to make them continuation of list item
                                $_.ChildNodes | Select-Object -First 1 |
                                ForEach-Object {
                                    $newInnerXml = '* ' + $_.get_InnerXml()
                                    $_.set_InnerXml($newInnerXml)
                                }
    
                                $_.ChildNodes | Select-Object -Skip 1 |
                                ForEach-Object {
                                    # this character is not a valid space.
                                    # We have to use some odd character here, becasue help engine strips out
                                    # all legetimate whitespaces.
                                    # Note: powershell doesn't render it properly, it will appear as a non-writable char.
                                    $newInnerXml = ([string][char]0xc2a0) * 2 + $_.get_InnerXml()
                                    $_.set_InnerXml($newInnerXml)
                                }
                            }
                    }
    
                    # in PS v5 help engine is not happy, when first non-empty link (== Online version link) is not a valid URI
                    # User encounter this problem too oftern to ignore it, hence this workaround in platyPS:
                    # always add a dummy link with a valid URI into xml and then remove the first link from the help object.
                    # for more context see https://github.com/PowerShell/platyPS/issues/144
                    $xml.helpItems.command.relatedLinks | ForEach-Object {
                        if ($_)
                        {
                            $_.InnerXml = '<maml:navigationLink xmlns:maml="http://schemas.microsoft.com/maml/2004/10"><maml:linkText>PLATYPS_DUMMY_LINK</maml:linkText><maml:uri>https://github.com/PowerShell/platyPS/issues/144</maml:uri></maml:navigationLink>' + $_.InnerXml
                        }
                    }
    
                    $xml.Save($MamlCopyPath)
    
                    foreach ($command in $xml.helpItems.command.details.name)
                    {
                        #PlatyPS will have trouble parsing a command with space around the name.
                        $command = $command.Trim()
                        $thisDefinition = @"
    
    <#
    .ExternalHelp $MamlCopyPath
    #>
    filter $command
    {
        [CmdletBinding()]
        Param
        (
            [Parameter(Mandatory=`$true)]
            [switch]`$platyPSHijack
        )
    
        Microsoft.PowerShell.Utility\Write-Warning 'PlatyPS hijacked your command $command.'
        Microsoft.PowerShell.Utility\Write-Warning 'We are sorry for that. It means, there is a bug in our Get-HelpPreview logic.'
        Microsoft.PowerShell.Utility\Write-Warning 'Please report this issue https://github.com/PowerShell/platyPS/issues'
        Microsoft.PowerShell.Utility\Write-Warning 'Restart PowerShell to fix the problem.'
    }
    
    # filter is rare enough to distinguish with other commands
    `$innerHelp = Microsoft.PowerShell.Core\Get-Help $command -Full -Category filter
    
    Microsoft.PowerShell.Core\Export-ModuleMember -Function @()
    "@
                        $m = New-Module ( [scriptblock]::Create( "$thisDefinition" ))
                        $help = & $m { $innerHelp }
                        # this is the second part of the workaround for https://github.com/PowerShell/platyPS/issues/144
                        # see comments above for context
                        $help.relatedLinks | ForEach-Object {
                            if ($_)
                            {
                                $_.navigationLink = $_.navigationLink | Select-Object -Skip 1
                            }
                        }
                        $help # yeild
                    }
                }
                finally
                {
                    Remove-Item $MamlCopyPath
                }
            }
        }
    }
    
    
    function New-ExternalHelpCab
    {
        [Cmdletbinding()]
        param(
            [parameter(Mandatory=$true)]
            [ValidateScript(
                {
                    if(Test-Path $_ -PathType Container)
                    {
                        $True
                    }
                    else
                    {
                        Throw $LocalizedData.PathIsNotFolder -f $_
                    }
                })]
            [string] $CabFilesFolder,
            [parameter(Mandatory=$true)]
            [ValidateScript(
                {
                    if(Test-Path $_ -PathType Leaf)
                    {
                        $True
                    }
                    else
                    {
                        Throw $LocalizedData.PathIsNotFile -f $_
                    }
                })]
            [string] $LandingPagePath,
            [parameter(Mandatory=$true)]
            [string] $OutputFolder,
    
            [parameter()]
            [switch] $IncrementHelpVersion
        )
        begin
        {
            validateWorkingProvider
            New-Item -Type Directory $OutputFolder -ErrorAction SilentlyContinue > $null
        }
        process
        {
            #Testing for MakeCab.exe
            Write-Verbose -Message ($LocalizedData.TestCommandExists -f 'MakeCab.exe')
            $MakeCab = Get-Command MakeCab
            if(-not $MakeCab)
            {
                throw $LocalizedData.CommandNotFound -f 'MakeCab.exe'
            }
            #Testing for files in source directory
            if((Get-ChildItem -Path $CabFilesFolder).Count -le 0)
            {
                throw $LocalizedData.FilesNotFoundInFolder -f $CabFilesFolder
            }
            #Testing for valid help file types
            $ValidHelpFileTypes = '.xml', '.txt'
            $HelpFiles = Get-ChildItem -Path $CabFilesFolder -File
            $ValidHelpFiles = $HelpFiles | Where-Object { $_.Extension -in $ValidHelpFileTypes }
            $InvalidHelpFiles = $HelpFiles | Where-Object { $_.Extension -notin $ValidHelpFileTypes }
            if(-not $ValidHelpFiles)
            {
                throw $LocalizedData.NoValidHelpFiles
            }
            if($InvalidHelpFiles)
            {
                $InvalidHelpFiles | ForEach-Object { Write-Warning -Message ($LocalizedData.FileNotValidHelpFileType -f $_.FullName) }
            }
    
    
        ###Get Yaml Metadata here
        $Metadata = Get-MarkdownMetadata -Path $LandingPagePath
    
        $ModuleName = $Metadata[$script:MODULE_PAGE_MODULE_NAME]
        $Guid = $Metadata[$script:MODULE_PAGE_GUID]
        $Locale = $Metadata[$script:MODULE_PAGE_LOCALE]
        $FwLink = $Metadata[$script:MODULE_PAGE_FW_LINK]
        $OldHelpVersion = $Metadata[$script:MODULE_PAGE_HELP_VERSION]
        $AdditionalLocale = $Metadata[$script:MODULE_PAGE_ADDITIONAL_LOCALE]
    
        if($IncrementHelpVersion)
        {
            #IncrementHelpVersion
            $HelpVersion = IncrementHelpVersion -HelpVersionString $OldHelpVersion
            $MdContent = Get-Content -raw $LandingPagePath
            $MdContent = $MdContent.Replace($OldHelpVersion,$HelpVersion)
            Set-Content -path $LandingPagePath -value $MdContent
        }
        else
        {
            $HelpVersion = $OldHelpVersion
        }
    
        #Create HelpInfo File
    
            #Testing the destination directories, creating if none exists.
            if(-not (Test-Path $OutputFolder))
            {
                Write-Verbose -Message ($LocalizedData.FolderNotFoundCreating -f $OutputFolder)
                New-Item -ItemType Directory -Path $OutputFolder | Out-Null
            }
    
            Write-Verbose -Message ($LocalizedData.CabFileInfo -f $ModuleName, $Guid, $Locale)
    
            #Building the cabinet file name.
            $cabName = ("{0}_{1}_{2}_HelpContent.cab" -f $ModuleName,$Guid,$Locale)
            $zipName = ("{0}_{1}_{2}_HelpContent.zip" -f $ModuleName,$Guid,$Locale)
            $zipPath = (Join-Path $OutputFolder $zipName)
    
            #Setting Cab Directives, make a cab is turned on, compression is turned on
            Write-Verbose -Message ($LocalizedData.CreatingCabFileDirectives)
            $DirectiveFile = "dir.dff"
            New-Item -ItemType File -Name $DirectiveFile -Force | Out-Null
            Add-Content $DirectiveFile ".Set Cabinet=on"
            Add-Content $DirectiveFile ".Set Compress=on"
    
            #Creates an entry in the cab directive file for each file in the source directory (uses FullName to get fuly qualified file path and name)
            foreach($file in $ValidHelpFiles)
            {
                Add-Content $DirectiveFile ("'" + ($file).FullName +"'" )
                Compress-Archive -DestinationPath $zipPath -Path $file.FullName -Update
            }
    
            #Making Cab
            Write-Verbose -Message ($LocalizedData.CreatingCabFile)
            MakeCab.exe /f $DirectiveFile | Out-Null
    
            #Naming CabFile
            Write-Verbose -Message ($LocalizedData.MovingCabFile -f $OutputFolder)
            Copy-Item "disk1/1.cab" (Join-Path $OutputFolder $cabName)
    
            #Remove ExtraFiles created by the cabbing process
            Write-Verbose -Message ($LocalizedData.RemovingExtraCabFileContents)
            Remove-Item "setup.inf" -ErrorAction SilentlyContinue
            Remove-Item "setup.rpt" -ErrorAction SilentlyContinue
            Remove-Item $DirectiveFile -ErrorAction SilentlyContinue
            Remove-Item -Path "disk1" -Recurse -ErrorAction SilentlyContinue
    
            #Create the HelpInfo Xml
            MakeHelpInfoXml -ModuleName $ModuleName -GUID $Guid -HelpCulture $Locale -HelpVersion $HelpVersion -URI $FwLink -OutputFolder $OutputFolder
    
            if($AdditionalLocale)
            {
                $allLocales = $AdditionalLocale -split ','
    
                foreach($loc in $allLocales)
                {
                    #Create the HelpInfo Xml for each locale
                    $locVersion = $Metadata["$loc Version"]
    
                    if([String]::IsNullOrEmpty($locVersion))
                    {
                        Write-Warning -Message ($LocalizedData.VersionNotFoundForLocale -f $loc)
                    }
                    else
                    {
                        MakeHelpInfoXml -ModuleName $ModuleName -GUID $Guid -HelpCulture $loc -HelpVersion $locVersion -URI $FwLink -OutputFolder $OutputFolder
                    }
                }
            }
        }
    }
    
    #endregion
    
    #region Implementation
    # IIIIIIIIII                                            lllllll                                                                                            tttt                                    tttt            iiii
    # I::::::::I                                            l:::::l                                                                                         ttt:::t                                 ttt:::t           i::::i
    # I::::::::I                                            l:::::l                                                                                         t:::::t                                 t:::::t            iiii
    # II::::::II                                            l:::::l                                                                                         t:::::t                                 t:::::t
    #   I::::I     mmmmmmm    mmmmmmm   ppppp   ppppppppp    l::::l     eeeeeeeeeeee       mmmmmmm    mmmmmmm       eeeeeeeeeeee    nnnn  nnnnnnnn    ttttttt:::::ttttttt      aaaaaaaaaaaaa  ttttttt:::::ttttttt    iiiiiii    ooooooooooo   nnnn  nnnnnnnn
    #   I::::I   mm:::::::m  m:::::::mm p::::ppp:::::::::p   l::::l   ee::::::::::::ee   mm:::::::m  m:::::::mm   ee::::::::::::ee  n:::nn::::::::nn  t:::::::::::::::::t      a::::::::::::a t:::::::::::::::::t    i:::::i  oo:::::::::::oo n:::nn::::::::nn
    #   I::::I  m::::::::::mm::::::::::mp:::::::::::::::::p  l::::l  e::::::eeeee:::::eem::::::::::mm::::::::::m e::::::eeeee:::::een::::::::::::::nn t:::::::::::::::::t      aaaaaaaaa:::::at:::::::::::::::::t     i::::i o:::::::::::::::on::::::::::::::nn
    #   I::::I  m::::::::::::::::::::::mpp::::::ppppp::::::p l::::l e::::::e     e:::::em::::::::::::::::::::::me::::::e     e:::::enn:::::::::::::::ntttttt:::::::tttttt               a::::atttttt:::::::tttttt     i::::i o:::::ooooo:::::onn:::::::::::::::n
    #   I::::I  m:::::mmm::::::mmm:::::m p:::::p     p:::::p l::::l e:::::::eeeee::::::em:::::mmm::::::mmm:::::me:::::::eeeee::::::e  n:::::nnnn:::::n      t:::::t              aaaaaaa:::::a      t:::::t           i::::i o::::o     o::::o  n:::::nnnn:::::n
    #   I::::I  m::::m   m::::m   m::::m p:::::p     p:::::p l::::l e:::::::::::::::::e m::::m   m::::m   m::::me:::::::::::::::::e   n::::n    n::::n      t:::::t            aa::::::::::::a      t:::::t           i::::i o::::o     o::::o  n::::n    n::::n
    #   I::::I  m::::m   m::::m   m::::m p:::::p     p:::::p l::::l e::::::eeeeeeeeeee  m::::m   m::::m   m::::me::::::eeeeeeeeeee    n::::n    n::::n      t:::::t           a::::aaaa::::::a      t:::::t           i::::i o::::o     o::::o  n::::n    n::::n
    #   I::::I  m::::m   m::::m   m::::m p:::::p    p::::::p l::::l e:::::::e           m::::m   m::::m   m::::me:::::::e             n::::n    n::::n      t:::::t    tttttta::::a    a:::::a      t:::::t    tttttt i::::i o::::o     o::::o  n::::n    n::::n
    # II::::::IIm::::m   m::::m   m::::m p:::::ppppp:::::::pl::::::le::::::::e          m::::m   m::::m   m::::me::::::::e            n::::n    n::::n      t::::::tttt:::::ta::::a    a:::::a      t::::::tttt:::::ti::::::io:::::ooooo:::::o  n::::n    n::::n
    # I::::::::Im::::m   m::::m   m::::m p::::::::::::::::p l::::::l e::::::::eeeeeeee  m::::m   m::::m   m::::m e::::::::eeeeeeee    n::::n    n::::n      tt::::::::::::::ta:::::aaaa::::::a      tt::::::::::::::ti::::::io:::::::::::::::o  n::::n    n::::n
    # I::::::::Im::::m   m::::m   m::::m p::::::::::::::pp  l::::::l  ee:::::::::::::e  m::::m   m::::m   m::::m  ee:::::::::::::e    n::::n    n::::n        tt:::::::::::tt a::::::::::aa:::a       tt:::::::::::tti::::::i oo:::::::::::oo   n::::n    n::::n
    # IIIIIIIIIImmmmmm   mmmmmm   mmmmmm p::::::pppppppp    llllllll    eeeeeeeeeeeeee  mmmmmm   mmmmmm   mmmmmm    eeeeeeeeeeeeee    nnnnnn    nnnnnn          ttttttttttt    aaaaaaaaaa  aaaa         ttttttttttt  iiiiiiii   ooooooooooo     nnnnnn    nnnnnn
    #                                    p:::::p
    #                                    p:::::p
    #                                   p:::::::p
    #                                   p:::::::p
    #                                   p:::::::p
    #                                   ppppppppp
    
    # parse out the list "applicable" tags from yaml header
    function GetApplicableList
    {
        param(
            [Parameter(Mandatory=$true)]
            $Path
        )
    
        $h = Get-MarkdownMetadata -Path $Path
        if ($h -and $h[$script:APPLICABLE_YAML_HEADER]) {
            return $h[$script:APPLICABLE_YAML_HEADER].Split(',').Trim()
        }
    }
    
    function SortParamsAlphabetically
    {
        param(
            [Parameter(Mandatory=$true)]
            $MamlCommandObject
        )
    
        # sort parameters alphabetically with minor exceptions
        # https://github.com/PowerShell/platyPS/issues/142
        $confirm = $MamlCommandObject.Parameters | Where-Object { $_.Name -eq 'Confirm' }
        $whatif = $MamlCommandObject.Parameters | Where-Object { $_.Name -eq 'WhatIf' }
        $includeTotalCount = $MamlCommandObject.Parameters | Where-Object { $_.Name -eq 'IncludeTotalCount' }
        $skip = $MamlCommandObject.Parameters | Where-Object { $_.Name -eq 'Skip' }
        $first = $MamlCommandObject.Parameters | Where-Object { $_.Name -eq 'First' }
    
        if ($confirm)
        {
            $MamlCommandObject.Parameters.Remove($confirm) > $null
        }
    
        if ($whatif)
        {
            $MamlCommandObject.Parameters.Remove($whatif) > $null
        }
    
        if ($includeTotalCount)
        {
            $MamlCommandObject.Parameters.Remove($includeTotalCount) > $null
        }
    
        if ($skip)
        {
            $MamlCommandObject.Parameters.Remove($skip) > $null
        }
    
        if ($first)
        {
            $MamlCommandObject.Parameters.Remove($first) > $null
        }
    
        $sortedParams = $MamlCommandObject.Parameters | Sort-Object -Property Name
        $MamlCommandObject.Parameters.Clear()
    
        $sortedParams | ForEach-Object {
            $MamlCommandObject.Parameters.Add($_)
        }
    
        if ($confirm)
        {
            $MamlCommandObject.Parameters.Add($confirm)
        }
    
        if ($whatif)
        {
            $MamlCommandObject.Parameters.Add($whatif)
        }
    
        if ($includeTotalCount)
        {
            $MamlCommandObject.Parameters.Add($includeTotalCount)
        }
    
        if ($skip)
        {
            $MamlCommandObject.Parameters.Add($skip)
        }
    
        if ($first)
        {
            $MamlCommandObject.Parameters.Add($first)
        }
    }
    
    # If LogPath not provided, use -Verbose output for logs
    function GetInfoCallback
    {
        param(
            [string]$LogPath,
            [switch]$Append
        )
    
        if ($LogPath)
        {
            if (-not (Test-Path $LogPath -PathType Leaf))
            {
                $containerFolder = Split-Path $LogPath
                if ($containerFolder)
                {
                    # this if is for $LogPath -eq foo.log  case
                    New-Item -Type Directory $containerFolder -ErrorAction SilentlyContinue > $null
                }
    
                if (-not $Append)
                {
                    # wipe the file, so it can be reused
                    Set-Content -Path $LogPath -value '' -Encoding UTF8
                }
            }
    
            $infoCallback = {
                param([string]$message)
                Add-Content -Path $LogPath -value $message -Encoding UTF8
            }
        }
        else
        {
            $infoCallback = {
                param([string]$message)
                Write-Verbose $message
            }
        }
        return $infoCallback
    }
    
    function GetWarningCallback
    {
        $warningCallback = {
            param([string]$message)
            Write-Warning $message
        }
    
        return $warningCallback
    }
    
    function GetAboutTopicsFromPath
    {
        [CmdletBinding()]
        param(
            [Parameter(Mandatory=$true)]
            [string[]]$Path,
            [string[]]$MarkDownFilesAlreadyFound
        )
    
        function ConfirmAboutBySecondHeaderText
        {
            param(
                [string]$AboutFilePath
            )
    
            $MdContent = Get-Content -raw $AboutFilePath
            $MdParser = new-object -TypeName 'Markdown.MAML.Parser.MarkdownParser' `
                                    -ArgumentList { param([int]$current, [int]$all)
                                    Write-Progress -Activity $LocalizedData.ParsingMarkdown -status $LocalizedData.Progress -percentcomplete ($current/$all*100)}
            $MdObject = $MdParser.ParseString($MdContent)
    
            if($MdObject.Children[1].text.length -gt 5)
            {
                if($MdObject.Children[1].text.substring(0,5).ToUpper() -eq "ABOUT")
                {
                    return $true
                }
            }
    
            return $false
        }
    
        $AboutMarkDownFiles = @()
    
        if ($Path) {
            $Path | ForEach-Object {
                if (Test-Path -PathType Leaf $_)
                {
                    if(ConfirmAboutBySecondHeaderText($_))
                    {
                        $AboutMarkdownFiles += Get-ChildItem $_
                    }
                }
                elseif (Test-Path -PathType Container $_)
                {
                    if($MarkDownFilesAlreadyFound)
                    {
                        $AboutMarkdownFiles += Get-ChildItem $_ -Filter '*.md' | Where-Object {($_.FullName -notin $MarkDownFilesAlreadyFound) -and (ConfirmAboutBySecondHeaderText($_.FullName))}
                    }
                    else
                    {
                        $AboutMarkdownFiles += Get-ChildItem $_ -Filter '*.md' | Where-Object {ConfirmAboutBySecondHeaderText($_.FullName)}
                    }
                }
                else
                {
                    Write-Error -Message ($LocalizedData.AboutFileNotFound -f $_)
                }
            }
        }
    
    
    
        return $AboutMarkDownFiles
    }
    
    function GetMarkdownFilesFromPath
    {
        [CmdletBinding()]
        param(
            [Parameter(Mandatory=$true)]
            [SupportsWildcards()]
            [string[]]$Path,
    
            [switch]$IncludeModulePage
        )
    
        if ($IncludeModulePage)
        {
            $filter = '*.md'
        }
        else
        {
            $filter = '*-*.md'
        }
    
        $aboutFilePrefixPattern = 'about_*'
    
    
        $MarkdownFiles = @()
        if ($Path) {
            $Path | ForEach-Object {
                if (Test-Path -PathType Leaf $_)
                {
                    if ((Split-Path -Leaf $_) -notlike $aboutFilePrefixPattern)
                    {
                        $MarkdownFiles += Get-ChildItem $_
                    }
                }
                elseif (Test-Path -PathType Container $_)
                {
                    $MarkdownFiles += Get-ChildItem $_ -Filter $filter | Where-Object {$_.BaseName -notlike $aboutFilePrefixPattern}
                }
                else
                {
                    Write-Error -Message ($LocalizedData.PathNotFound -f $_)
                }
            }
        }
    
        return $MarkdownFiles
    }
    
    function GetParserMode
    {
        param(
            [switch]$PreserveFormatting
        )
    
        if ($PreserveFormatting)
        {
            return [Markdown.MAML.Parser.ParserMode]::FormattingPreserve
        }
        else
        {
            return [Markdown.MAML.Parser.ParserMode]::Full
        }
    }
    
    function GetMamlModelImpl
    {
        param(
            [Parameter(Mandatory=$true)]
            [string[]]$markdownFiles,
            [Parameter(Mandatory=$true)]
            [System.Text.Encoding]$Encoding,
            [switch]$ForAnotherMarkdown,
            [String[]]$ApplicableTag
        )
    
        if ($ForAnotherMarkdown -and $ApplicableTag) {
            throw $LocalizedData.ForAnotherMarkdownAndApplicableTag
        }
    
        # we need to pass it into .NET IEnumerable<MamlCommand> API
        $res = New-Object 'System.Collections.Generic.List[Markdown.MAML.Model.MAML.MamlCommand]'
    
        $markdownFiles | ForEach-Object {
            $mdText = MyGetContent $_ -Encoding $Encoding
            $schema = GetSchemaVersion $mdText
            $p = NewMarkdownParser
            $t = NewModelTransformer -schema $schema $ApplicableTag
    
            $parseMode = GetParserMode -PreserveFormatting:$ForAnotherMarkdown
            $model = $p.ParseString($mdText, $parseMode, $_)
            Write-Progress -Activity $LocalizedData.ParsingMarkdown -Completed
            $maml = $t.NodeModelToMamlModel($model)
    
            # flatten
            $maml | ForEach-Object {
                if (-not $ForAnotherMarkdown)
                {
                    # we are preparing model to be transformed in MAML, need to embeed online version url
                    SetOnlineVersionUrlLink -MamlCommandObject $_ -OnlineVersionUrl (GetOnlineVersion $mdText)
                }
    
                $res.Add($_)
            }
        }
    
        return @(,$res)
    }
    
    function NewMarkdownParser
    {
        $warningCallback = GetWarningCallback
        $progressCallback = {
            param([int]$current, [int]$all)
            Write-Progress -Activity $LocalizedData.ParsingMarkdown -status $LocalizedData.Progress -percentcomplete ($current/$all*100)
        }
        return new-object -TypeName 'Markdown.MAML.Parser.MarkdownParser' -ArgumentList ($progressCallback, $warningCallback)
    }
    
    function NewModelTransformer
    {
        param(
            [ValidateSet('1.0.0', '2.0.0')]
            [string]$schema,
            [string[]]$ApplicableTag
        )
    
        if ($schema -eq '1.0.0')
        {
            throw $LocalizedData.PlatyPS100SchemaDeprecated
        }
        elseif ($schema -eq '2.0.0')
        {
            $infoCallback = {
                param([string]$message)
                Write-Verbose $message
            }
            $warningCallback = GetWarningCallback
            return new-object -TypeName 'Markdown.MAML.Transformer.ModelTransformerVersion2' -ArgumentList ($infoCallback, $warningCallback, $ApplicableTag)
        }
    }
    
    function GetSchemaVersion
    {
        param(
            [string]$markdown
        )
    
        $metadata = Get-MarkdownMetadata -markdown $markdown
        if ($metadata)
        {
            $schema = $metadata[$script:SCHEMA_VERSION_YAML_HEADER]
        }
    
        if (-not $schema)
        {
            # either there is no metadata, or schema version is not specified.
            # assume 2.0.0
            $schema = '2.0.0'
        }
    
        return $schema
    }
    
    function GetOnlineVersion
    {
        param(
            [string]$markdown
        )
    
        $metadata = Get-MarkdownMetadata -markdown $markdown
        $onlineVersionUrl = $null
        if ($metadata)
        {
            $onlineVersionUrl = $metadata[$script:ONLINE_VERSION_YAML_HEADER]
        }
    
        return $onlineVersionUrl
    }
    
    function SetOnlineVersionUrlLink
    {
        param(
            [Parameter(Mandatory=$true)]
            [Markdown.MAML.Model.MAML.MamlCommand]$MamlCommandObject,
    
            [string]$OnlineVersionUrl = $null
        )
    
        # Online Version URL
        $currentFirstLink = $MamlCommandObject.Links | Select-Object -First 1
    
        if ($OnlineVersionUrl -and ((-not $currentFirstLink) -or ($currentFirstLink.LinkUri -ne $OnlineVersionUrl))) {
            $mamlLink = New-Object -TypeName Markdown.MAML.Model.MAML.MamlLink
            $mamlLink.LinkName = $script:MAML_ONLINE_LINK_DEFAULT_MONIKER
            $mamlLink.LinkUri = $OnlineVersionUrl
    
            # Insert link at the beginning
            $MamlCommandObject.Links.Insert(0, $mamlLink)
        }
    }
    
    function MakeHelpInfoXml
    {
        Param(
            [Parameter(mandatory=$true)]
            [string]
            $ModuleName,
            [Parameter(mandatory=$true)]
            [string]
            $GUID,
            [Parameter(mandatory=$true)]
            [string]
            $HelpCulture,
            [Parameter(mandatory=$true)]
            [string]
            $HelpVersion,
            [Parameter(mandatory=$true)]
            [string]
            $URI,
            [Parameter(mandatory=$true)]
            [string]
            $OutputFolder
    
    
        )
    
        $HelpInfoFileNme = $ModuleName + "_" + $GUID + "_HelpInfo.xml"
        $OutputFullPath = Join-Path $OutputFolder $HelpInfoFileNme
    
        if(Test-Path $OutputFullPath -PathType Leaf)
        {
            [xml] $HelpInfoContent = Get-Content $OutputFullPath
        }
    
        #Create the base XML object for the Helpinfo.xml file.
        $xml = new-object xml
    
        $ns = "http://schemas.microsoft.com/powershell/help/2010/05"
        $declaration = $xml.CreateXmlDeclaration("1.0","utf-8",$null)
    
        $rootNode = $xml.CreateElement("HelpInfo",$ns)
        $xml.InsertBefore($declaration,$xml.DocumentElement)
        $xml.AppendChild($rootNode)
    
        $HelpContentUriNode = $xml.CreateElement("HelpContentURI",$ns)
        $HelpContentUriNode.InnerText = $URI
        $xml["HelpInfo"].AppendChild($HelpContentUriNode)
    
        $HelpSupportedCulturesNode = $xml.CreateElement("SupportedUICultures",$ns)
        $xml["HelpInfo"].AppendChild($HelpSupportedCulturesNode)
    
    
        #If no previous help file
        if(-not $HelpInfoContent)
        {
            $HelpUICultureNode = $xml.CreateElement("UICulture",$ns)
            $xml["HelpInfo"]["SupportedUICultures"].AppendChild($HelpUICultureNode)
    
            $HelpUICultureNameNode = $xml.CreateElement("UICultureName",$ns)
            $HelpUICultureNameNode.InnerText = $HelpCulture
            $xml["HelpInfo"]["SupportedUICultures"]["UICulture"].AppendChild($HelpUICultureNameNode)
    
            $HelpUICultureVersionNode = $xml.CreateElement("UICultureVersion",$ns)
            $HelpUICultureVersionNode.InnerText = $HelpVersion
            $xml["HelpInfo"]["SupportedUICultures"]["UICulture"].AppendChild($HelpUICultureVersionNode)
    
            [xml] $HelpInfoContent = $xml
    
        }
        else
        {
            #Get old culture info
            $ExistingCultures = @{}
            foreach($Culture in $HelpInfoContent.HelpInfo.SupportedUICultures.UICulture)
            {
                $ExistingCultures.Add($Culture.UICultureName, $Culture.UICultureVersion)
            }
    
            #If culture exists update version, if not, add culture and version
            if(-not ($HelpCulture -in $ExistingCultures.Keys))
            {
                $ExistingCultures.Add($HelpCulture,$HelpVersion)
            }
            else
            {
                $ExistingCultures[$HelpCulture] = $HelpVersion
            }
    
            $cultureNames = @()
            $cultureNames += $ExistingCultures.GetEnumerator()
    
            #write out cultures to XML
            for($i=0;$i -lt $ExistingCultures.Count; $i++)
            {
                $HelpUICultureNode = $xml.CreateElement("UICulture",$ns)
    
    
                $HelpUICultureNameNode = $xml.CreateElement("UICultureName",$ns)
                $HelpUICultureNameNode.InnerText = $cultureNames[$i].Name
                $HelpUICultureNode.AppendChild($HelpUICultureNameNode)
    
                $HelpUICultureVersionNode = $xml.CreateElement("UICultureVersion",$ns)
                $HelpUICultureVersionNode.InnerText = $cultureNames[$i].Value
                $HelpUICultureNode.AppendChild($HelpUICultureVersionNode)
    
                $xml["HelpInfo"]["SupportedUICultures"].AppendChild($HelpUICultureNode)
            }
    
            [xml] $HelpInfoContent = $xml
        }
    
        #Commit Help
            if(!(Test-Path $OutputFullPath))
        {
            New-Item -Path $OutputFolder -ItemType File -Name $HelpInfoFileNme
    
        }
    
        $HelpInfoContent.Save((Get-ChildItem $OutputFullPath).FullName)
    
    }
    
    
    function GetHelpFileName
    {
        param(
            [System.Management.Automation.CommandInfo]$CommandInfo
        )
    
        if ($CommandInfo)
        {
            if ($CommandInfo.HelpFile)
            {
                if ([System.IO.Path]::IsPathRooted($CommandInfo.HelpFile))
                {
                    return (Split-Path -Leaf $CommandInfo.HelpFile)
                }
                else
                {
                    return $CommandInfo.HelpFile
                }
            }
            # only run module evaluations if the input command isn't a script
            if ($CommandInfo.CommandType -ne "ExternalScript")
            {
                # overwise, lets guess it
                $module = @($CommandInfo.Module) + ($CommandInfo.Module.NestedModules) |
                    Where-Object {$_.ModuleType -ne 'Manifest'} |
                    Where-Object {$_.ExportedCommands.Keys -contains $CommandInfo.Name}
    
                if (-not $module)
                {
                    Write-Warning -Message ($LocalizedData.ModuleNotFoundFromCommand -f '[GetHelpFileName]', $CommandInfo.Name)
                    return
                }
    
                if ($module.Count -gt 1)
                {
                    Write-Warning -Message ($LocalizedData.MultipleModulesFoundFromCommand -f '[GetHelpFileName]', $CommandInfo.Name)
                    $module = $module | Select-Object -First 1
                }
    
                if (Test-Path $module.Path -Type Leaf)
                {
                    # for regular modules, we can deduct the filename from the module path file
                    $moduleItem = Get-Item -Path $module.Path
                    if ($moduleItem.Extension -eq '.psm1') {
                        $fileName = $moduleItem.BaseName
                    } else {
                        $fileName = $moduleItem.Name
                    }
                }
                else
                {
                    # if it's something like Dynamic module,
                    # we  guess the desired help file name based on the module name
                    $fileName = $module.Name
                }
            }
    
            return "$fileName-help.xml"
        }
    }
    
    function MySetContent
    {
        [OutputType([System.IO.FileInfo])]
        param(
            [Parameter(Mandatory=$true)]
            [string]$Path,
            [Parameter(Mandatory=$true)]
            [string]$value,
            [Parameter(Mandatory=$true)]
            [System.Text.Encoding]$Encoding,
            [switch]$Force
        )
    
        if (Test-Path $Path)
        {
            if (Test-Path $Path -PathType Container)
            {
                Write-Error -Message ($LocalizedData.CannotWriteFileDirectoryExists -f $Path)
                return
            }
    
            if ((MyGetContent -Path $Path -Encoding $Encoding) -eq $value)
            {
                Write-Verbose "Not writing to $Path, because content is not changing."
                return (Get-ChildItem $Path)
            }
    
            if (-not $Force)
            {
                Write-Error -Message ($LocalizedData.CannotWriteFileWithoutForce -f $Path)
                return
            }
        }
        else
        {
            $dir = Split-Path $Path
            if ($dir)
            {
                New-Item -Type Directory $dir -ErrorAction SilentlyContinue > $null
            }
        }
    
        Write-Verbose -Message ($LocalizedData.WritingWithEncoding -f $Path, $Encoding.EncodingName)
        # just to create a file
        Set-Content -Path $Path -Value ''
        $resolvedPath = (Get-ChildItem $Path).FullName
        [System.IO.File]::WriteAllText($resolvedPath, $value, $Encoding)
        return (Get-ChildItem $Path)
    }
    
    function MyGetContent
    {
        [OutputType([System.String])]
        param(
            [Parameter(Mandatory=$true)]
            [string]$Path,
            [Parameter(Mandatory=$true)]
            [System.Text.Encoding]$Encoding
        )
    
        if (-not(Test-Path $Path))
        {
            throw $LocalizedData.FileNotFound
            return
        }
        else
        {
            if (Test-Path $Path -PathType Container)
            {
                throw $LocalizedData.PathIsNotFile
                return
            }
        }
    
        Write-Verbose -Message ($LocalizedData.ReadingWithEncoding -f $Path, $Encoding.EncodingName)
        $resolvedPath = (Get-ChildItem $Path).FullName
        return [System.IO.File]::ReadAllText($resolvedPath, $Encoding)
    }
    
    function NewModuleLandingPage
    {
        Param(
            [Parameter(mandatory=$true)]
            [string]
            $Path,
            [Parameter(mandatory=$true)]
            [string]
            $ModuleName,
            [Parameter(mandatory=$true,ParameterSetName="NewLandingPage")]
            [string]
            $ModuleGuid,
            [Parameter(mandatory=$true,ParameterSetName="NewLandingPage")]
            [string[]]
            $CmdletNames,
            [Parameter(mandatory=$true,ParameterSetName="NewLandingPage")]
            [string]
            $Locale,
            [Parameter(mandatory=$true,ParameterSetName="NewLandingPage")]
            [string]
            $Version,
            [Parameter(mandatory=$true,ParameterSetName="NewLandingPage")]
            [string]
            $FwLink,
            [Parameter(ParameterSetName="UpdateLandingPage")]
            [switch]
            $RefreshModulePage,
            [string]$ModulePagePath,
            [Parameter(mandatory=$true,ParameterSetName="UpdateLandingPage")]
            [System.Collections.Generic.List[Markdown.MAML.Model.MAML.MamlCommand]]
            $Module,
            [Parameter(mandatory=$true)]
            [System.Text.Encoding]$Encoding = $script:UTF8_NO_BOM,
            [switch]$Force
        )
    
        begin
        {
            if ($ModulePagePath) {
                $LandingPagePath = $ModulePagePath
            } else {
                $LandingPageName = $ModuleName + ".md"
                $LandingPagePath = Join-Path $Path $LandingPageName
            }
        }
    
        process
        {
            $Description = $LocalizedData.Description
    
            if($RefreshModulePage)
            {
                if(Test-Path $LandingPagePath)
                {
                    $OldLandingPageContent = Get-Content -Raw $LandingPagePath
                    $OldMetaData = Get-MarkdownMetadata -Markdown $OldLandingPageContent
                    $ModuleGuid = $OldMetaData["Module Guid"]
                    $FwLink = $OldMetaData["Download Help Link"]
                    $Version = $OldMetaData["Help Version"]
                    $Locale = $OldMetaData["Locale"]
    
                    $p = NewMarkdownParser
                    $model = $p.ParseString($OldLandingPageContent)
                    $index = $model.Children.IndexOf(($model.Children | Where-Object {$_.Text -eq "Description"}))
                    $i = 1
                    $stillParagraph = $true
                    $Description = ""
                    while($stillParagraph -eq $true)
                    {
                        $Description += $model.Children[$index + $i].spans.text
                        $i++
    
                        if($model.Children[$i].NodeType -eq "Heading")
                        {
                            $stillParagraph = $false
                        }
                    }
                }
                else
                {
                    $ModuleGuid = $LocalizedData.ModuleGuid
                    $FwLink = $LocalizedData.FwLink
                    $Version = $LocalizedData.Version
                    $Locale = $LocalizedData.Locale
                    $Description = $LocalizedData.Description
                }
            }
    
            $Content = "---`r`nModule Name: $ModuleName`r`nModule Guid: $ModuleGuid`r`nDownload Help Link: $FwLink`r`n"
            $Content += "Help Version: $Version`r`nLocale: $Locale`r`n"
            $Content += "---`r`n`r`n"
            $Content += "# $ModuleName Module`r`n## Description`r`n"
            $Content += "$Description`r`n`r`n## $ModuleName Cmdlets`r`n"
    
            if($RefreshModulePage)
            {
                $Module | ForEach-Object {
                    $command = $_
                    if(-not $command.Synopsis)
                    {
                        $Content += "### [" + $command.Name + "](" + $command.Name + ".md)`r`n" + $LocalizedData.Description + "`r`n`r`n"
                    }
                    else
                    {
                        $Content += "### [" + $command.Name + "](" + $command.Name + ".md)`r`n" + $command.Synopsis + "`r`n`r`n"
                    }
                }
            }
            else
            {
                $CmdletNames | ForEach-Object {
                    $Content += "### [" + $_ + "](" + $_ + ".md)`r`n" + $LocalizedData.Description + "`r`n`r`n"
                }
            }
    
            MySetContent -Path $LandingPagePath -value $Content -Encoding $Encoding -Force:$Force # yeild
        }
    
    }
    
    function ConvertMamlModelToMarkdown
    {
        param(
            [ValidateNotNullOrEmpty()]
            [Parameter(Mandatory=$true)]
            [Markdown.MAML.Model.MAML.MamlCommand]$mamlCommand,
    
            [hashtable]$metadata,
    
            [switch]$NoMetadata,
    
            [switch]$PreserveFormatting
        )
    
        begin
        {
            $parseMode = GetParserMode -PreserveFormatting:$PreserveFormatting
            $r = New-Object Markdown.MAML.Renderer.MarkdownV2Renderer -ArgumentList $parseMode
            $count = 0
        }
    
        process
        {
            if (($count++) -eq 0 -and (-not $NoMetadata))
            {
                return $r.MamlModelToString($mamlCommand, $metadata)
            }
            else
            {
                return $r.MamlModelToString($mamlCommand, $true) # skip version header
            }
        }
    }
    
    function GetCommands
    {
        param(
            [Parameter(Mandatory=$true)]
            [string]$Module,
            # return names, instead of objects
            [switch]$AsNames,
            # use Session for remoting support
            [System.Management.Automation.Runspaces.PSSession]$Session
        )
    
        process {
            # Get-Module doesn't know about Microsoft.PowerShell.Core, so we don't use (Get-Module).ExportedCommands
    
            # We use: & (dummy module) {...} syntax to workaround
            # the case `GetMamlObject -Module platyPS`
            # because in this case, we are in the module context and Get-Command returns all commands,
            # not only exported ones.
            $commands = & (New-Module {}) ([scriptblock]::Create("Get-Command -Module '$Module'")) |
                Where-Object {$_.CommandType -ne 'Alias'}  # we don't want aliases in the markdown output for a module
    
            if ($AsNames)
            {
                $commands.Name
            }
            else
            {
                if ($Session) {
                    $commands.Name | ForEach-Object {
                        # yeild
                        MyGetCommand -Cmdlet $_ -Session $Session
                    }
                } else {
                    $commands
                }
            }
        }
    }
    
    <#
        Get a compact string representation from TypeInfo or TypeInfo-like object
    
        The typeObjectHash api is provided for the remoting support.
        We use two different parameter sets ensure the tupe of -TypeObject
    #>
    function GetTypeString
    {
        param(
            [Parameter(ValueFromPipeline=$true, ParameterSetName='typeObject')]
            [System.Reflection.TypeInfo]
            $TypeObject,
    
            [Parameter(ValueFromPipeline=$true, ParameterSetName='typeObjectHash')]
            [PsObject]
            $TypeObjectHash
        )
    
        if ($TypeObject) {
            $TypeObjectHash = $TypeObject
        }
    
        # special case for nullable value types
        if ($TypeObjectHash.Name -eq 'Nullable`1')
        {
            return $TypeObjectHash.GenericTypeArguments.Name
        }
    
        if ($TypeObjectHash.IsGenericType)
        {
            # keep information about generic parameters
            return $TypeObjectHash.ToString()
        }
    
        return $TypeObjectHash.Name
    }
    
    <#
        You cannot just write 0..($n-1) because if $n == 0 you are screwed.
        Hence this helper.
    #>
    function GetRange
    {
        Param(
            [CmdletBinding()]
            [parameter(mandatory=$true)]
            [int]$n
        )
        if ($n -lt 0) {
            throw $LocalizedData.RangeIsLessThanZero -f $n
        }
        if ($n -eq 0) {
            return
        }
        0..($n - 1)
    }
    
    <#
        This function proxies Get-Command call.
    
        In case of the Remote module, we need to jump thru some hoops
        to get the actual Command object with proper fields.
        Remoting doesn't properly serialize command objects, so we need to be creative
        while extracting all the required metadata from the remote session
        See https://github.com/PowerShell/platyPS/issues/338 for historical context.
    #>
    function MyGetCommand
    {
        Param(
            [CmdletBinding()]
            [parameter(mandatory=$true, parametersetname="Cmdlet")]
            [string] $Cmdlet,
            [System.Management.Automation.Runspaces.PSSession]$Session
        )
        # if there is no remoting, just proxy to Get-Command
        if (-not $Session) {
            return Get-Command $Cmdlet
        }
    
        # Here is the structure that we use in ConvertPsObjectsToMamlModel
        # we fill it up from the remote with some workarounds
        #
        # $Command.CommandType
        # $Command.Name
        # $Command.ModuleName
        # $Command.DefaultParameterSet
        # $Command.CmdletBinding
        # $ParameterSet in $Command.ParameterSets
        #     $ParameterSet.Name
        #     $ParameterSet.IsDefault
        #     $Parameter in $ParameterSet.Parameters
        #         $Parameter.Name
        #         $Parameter.IsMandatory
        #         $Parameter.Aliases
        #         $Parameter.HelpMessage
        #         $Parameter.Type
        #         $Parameter.ParameterType
        #            $Parameter.ParameterType.Name
        #            $Parameter.ParameterType.GenericTypeArguments.Name
        #            $Parameter.ParameterType.IsGenericType
        #            $Parameter.ParameterType.ToString() - we get that for free from expand
    
        # expand first layer of properties
        function expand([string]$property) {
            Invoke-Command -Session $Session -ScriptBlock {
                Get-Command $using:Cmdlet |
                Select-Object -ExpandProperty $using:property
            }
        }
    
        # expand second layer of properties on the selected item
        function expand2([string]$property1, [int]$num, [string]$property2) {
            Invoke-Command -Session $Session -ScriptBlock {
                Get-Command $using:Cmdlet |
                Select-Object -ExpandProperty $using:property1 |
                Select-Object -Index $using:num -Wait |
                Select-Object -ExpandProperty $using:property2
            }
        }
    
        # expand second and 3rd layer of properties on the selected item
        function expand3(
            [string]$property1,
            [int]$num,
            [string]$property2,
            [string]$property3
            ) {
            Invoke-Command -Session $Session -ScriptBlock {
                Get-Command $using:Cmdlet |
                Select-Object -ExpandProperty $using:property1 |
                Select-Object -Index $using:num -Wait |
                Select-Object -ExpandProperty $using:property2 |
                Select-Object -ExpandProperty $using:property3
            }
        }
    
        function local([string]$property) {
            Get-Command $Cmdlet | select-object -ExpandProperty $property
        }
    
        # helper function to fill up the parameters metadata
        function getParams([int]$num) {
            # this call we need to fill-up ParameterSets.Parameters.ParameterType with metadata
            $parameterType = expand3 'ParameterSets' $num 'Parameters' 'ParameterType'
            # this call we need to fill-up ParameterSets.Parameters with metadata
            $parameters = expand2 'ParameterSets' $num 'Parameters'
            if ($parameters.Length -ne $parameterType.Length) {
                Write-Error -Message ($LocalizedData.MetadataDoesNotMatchLength -f $Cmdlet)
            }
    
            foreach ($i in (GetRange $parameters.Length)) {
                $typeObjectHash = New-Object -TypeName pscustomobject -Property @{
                    Name = $parameterType[$i].Name
                    IsGenericType = $parameterType[$i].IsGenericType
                    # almost .ParameterType.GenericTypeArguments.Name
                    # TODO: doesn't it worth another round-trip to make it more accurate
                    # and query for the Name?
                    GenericTypeArguments = @{ Name = $parameterType[$i].GenericTypeArguments }
                }
                Add-Member -Type NoteProperty -InputObject $parameters[$i] -Name 'ParameterTypeName' -Value (GetTypeString -TypeObjectHash $typeObjectHash)
            }
            return $parameters
        }
    
        # we cannot use the nested properties from this $remote command.
        # ps remoting doesn't serialize all of them properly.
        # but we can use the top-level onces
        $remote = Invoke-Command -Session $Session { Get-Command $using:Cmdlet }
    
        $psets = expand 'ParameterSets'
        $psetsArray = @()
        foreach ($i in (GetRange ($psets | measure-object).Count)) {
            $parameters = getParams $i
            $psetsArray += @(New-Object -TypeName pscustomobject -Property @{
                Name = $psets[$i].Name
                IsDefault = $psets[$i].IsDefault
                Parameters = $parameters
            })
        }
    
        $commandHash = @{
            Name = $Cmdlet
            CommandType = $remote.CommandType
            DefaultParameterSet = $remote.DefaultParameterSet
            CmdletBinding = $remote.CmdletBinding
            # for office we cannot get the module name from the remote, grab the local one instead
            ModuleName = local 'ModuleName'
            ParameterSets = $psetsArray
        }
    
        return New-Object -TypeName pscustomobject -Property $commandHash
    }
    
    <#
        This function prepares help and command object (possibly do mock)
        and passes it to ConvertPsObjectsToMamlModel, then return results
    #>
    function GetMamlObject
    {
        Param(
            [CmdletBinding()]
            [parameter(mandatory=$true, parametersetname="Cmdlet")]
            [string] $Cmdlet,
            [parameter(mandatory=$true, parametersetname="Module")]
            [string] $Module,
            [parameter(mandatory=$true, parametersetname="Maml")]
            [string] $MamlFile,
            [parameter(parametersetname="Maml")]
            [switch] $ConvertNotesToList,
            [parameter(parametersetname="Maml")]
            [switch] $ConvertDoubleDashLists,
            [switch] $UseFullTypeName,
            [parameter(parametersetname="Cmdlet")]
            [parameter(parametersetname="Module")]
            [System.Management.Automation.Runspaces.PSSession]$Session,
            [switch]$ExcludeDontShow
        )
    
        function CommandHasAutogeneratedSynopsis
        {
            param([object]$help)
    
            return (Get-Command $help.Name -Syntax) -eq ($help.Synopsis)
        }
    
        if($Cmdlet)
        {
            Write-Verbose -Message ($LocalizedData.Processing -f $Cmdlet)
            $Help = Get-Help $Cmdlet
            $Command = MyGetCommand -Session $Session -Cmdlet $Cmdlet
            return ConvertPsObjectsToMamlModel -Command $Command -Help $Help -UsePlaceholderForSynopsis:(CommandHasAutogeneratedSynopsis $Help) -UseFullTypeName:$UseFullTypeName -ExcludeDontShow:$ExcludeDontShow
        }
        elseif ($Module)
        {
            Write-Verbose -Message ($LocalizedData.Processing -f $Module)
    
            # GetCommands is slow over remoting, piping here is important for good UX
            GetCommands $Module -Session $Session | ForEach-Object {
                $Command = $_
                Write-Verbose -Message ("`t" + ($LocalizedData.Processing -f $Command.Name))
                $Help = Get-Help $Command.Name
                # yield
                ConvertPsObjectsToMamlModel -Command $Command -Help $Help -UsePlaceholderForSynopsis:(CommandHasAutogeneratedSynopsis $Help)  -UseFullTypeName:$UseFullTypeName -ExcludeDontShow:$ExcludeDontShow
            }
        }
        else # Maml
        {
            $HelpCollection = Get-HelpPreview -Path $MamlFile -ConvertNotesToList:$ConvertNotesToList -ConvertDoubleDashLists:$ConvertDoubleDashLists
    
            #Provides Name, CommandType, and Empty Module name from MAML generated module in the $command object.
            #Otherwise loads the results from Get-Command <Cmdlet> into the $command object
    
            $HelpCollection | ForEach-Object {
    
                $Help = $_
    
                $Command = [PsObject] @{
                    Name = $Help.Name
                    CommandType = $Help.Category
                    HelpFile = (Split-Path $MamlFile -Leaf)
                }
    
                # yield
                ConvertPsObjectsToMamlModel -Command $Command -Help $Help -UseHelpForParametersMetadata  -UseFullTypeName:$UseFullTypeName -ExcludeDontShow:$ExcludeDontShow
            }
        }
    }
    
    function AddLineBreaksForParagraphs
    {
        [CmdletBinding()]
        param(
            [Parameter(Mandatory=$false, ValueFromPipeline=$true)]
            [string]$text
        )
    
        begin
        {
            $paragraphs = @()
        }
    
        process
        {
            $text = $text.Trim()
            $paragraphs += $text
        }
    
        end
        {
            $paragraphs -join "`r`n`r`n"
        }
    }
    
    function DescriptionToPara
    {
        [CmdletBinding()]
        param(
            [Parameter(Mandatory=$false, ValueFromPipeline=$true)]
            $description
        )
    
        process
        {
            # on some old maml modules description uses Tag to store *-bullet-points
            # one example of it is Exchange
            $description.Tag + "" + $description.Text
        }
    }
    
    function IncrementHelpVersion
    {
        param(
            [string]
            $HelpVersionString
        )
        process
        {
            if($HelpVersionString -eq $LocalizedData.HelpVersion)
            {
                return "1.0.0.0"
            }
            $lastDigitPosition = $HelpVersionString.LastIndexOf(".") + 1
            $frontDigits = $HelpVersionString.Substring(0,$lastDigitPosition)
            $frontDigits += ([int] $HelpVersionString.Substring($lastDigitPosition)) + 1
            return $frontDigits
        }
    }
    
    <#
        This function converts help and command object (possibly mocked) into a Maml Model
    #>
    function ConvertPsObjectsToMamlModel
    {
        [CmdletBinding()]
        [OutputType([Markdown.MAML.Model.MAML.MamlCommand])]
        param(
            [Parameter(Mandatory=$true)]
            [object]$Command,
            [Parameter(Mandatory=$true)]
            [object]$Help,
            [switch]$UseHelpForParametersMetadata,
            [switch]$UsePlaceholderForSynopsis,
            [switch]$UseFullTypeName,
            [switch]$ExcludeDontShow
        )
    
        function isCommonParameterName
        {
            param([string]$parameterName, [switch]$Workflow)
    
            if (@(
                    'Verbose',
                    'Debug',
                    'ErrorAction',
                    'WarningAction',
                    'InformationAction',
                    'ErrorVariable',
                    'WarningVariable',
                    'InformationVariable',
                    'OutVariable',
                    'OutBuffer',
                    'PipelineVariable'
            ) -contains $parameterName) {
                return $true
            }
    
            if ($Workflow)
            {
                return @(
                    'PSParameterCollection',
                    'PSComputerName',
                    'PSCredential',
                    'PSConnectionRetryCount',
                    'PSConnectionRetryIntervalSec',
                    'PSRunningTimeoutSec',
                    'PSElapsedTimeoutSec',
                    'PSPersist',
                    'PSAuthentication',
                    'PSAuthenticationLevel',
                    'PSApplicationName',
                    'PSPort',
                    'PSUseSSL',
                    'PSConfigurationName',
                    'PSConnectionURI',
                    'PSAllowRedirection',
                    'PSSessionOption',
                    'PSCertificateThumbprint',
                    'PSPrivateMetadata',
                    'AsJob',
                    'JobName'
                ) -contains $parameterName
            }
    
            return $false
        }
    
        function getPipelineValue($Parameter)
        {
            if ($Parameter.ValueFromPipeline)
            {
                if ($Parameter.ValueFromPipelineByPropertyName)
                {
                    return 'True (ByPropertyName, ByValue)'
                }
                else
                {
                    return 'True (ByValue)'
                }
            }
            else
            {
                if ($Parameter.ValueFromPipelineByPropertyName)
                {
                    return 'True (ByPropertyName)'
                }
                else
                {
                    return 'False'
                }
            }
        }
    
        function normalizeFirstLatter
        {
            param(
                [Parameter(ValueFromPipeline=$true)]
                [string]$value
            )
    
            if ($value -and $value.Length -gt 0)
            {
                return $value.Substring(0,1).ToUpperInvariant() + $value.substring(1)
            }
    
            return $value
        }
    
        #endregion
    
        $MamlCommandObject = New-Object -TypeName Markdown.MAML.Model.MAML.MamlCommand
    
        #region Command Object Values Processing
    
        $IsWorkflow = $Command.CommandType -eq 'Workflow'
    
        #Get Name
        $MamlCommandObject.Name = $Command.Name
    
        $MamlCommandObject.ModuleName = $Command.ModuleName
    
        #region Data not provided by the command object
    
        #Get Description
        #Not provided by the command object.
        $MamlCommandObject.Description = New-Object -TypeName Markdown.MAML.Model.Markdown.SectionBody ($LocalizedData.Description)
    
        #endregion
    
        #Get Syntax
        #region Get the Syntax Parameter Set objects
    
        function FillUpParameterFromHelp
        {
            param(
                [Parameter(Mandatory=$true)]
                [Markdown.MAML.Model.MAML.MamlParameter]$ParameterObject
            )
    
            $HelpEntry = $Help.parameters.parameter | Where-Object {$_.Name -eq $ParameterObject.Name}
    
            $ParameterObject.DefaultValue = $HelpEntry.defaultValue | normalizeFirstLatter
            $ParameterObject.VariableLength = $HelpEntry.variableLength -eq 'True'
            $ParameterObject.Globbing = $HelpEntry.globbing -eq 'True'
            $ParameterObject.Position = $HelpEntry.position | normalizeFirstLatter
            if ($HelpEntry.description)
            {
                if ($HelpEntry.description.text)
                {
                    $ParameterObject.Description = $HelpEntry.description |
                        DescriptionToPara |
                        AddLineBreaksForParagraphs
                }
                else
                {
                    # this case happens, when there is HelpMessage in 'Parameter' attribute,
                    # but there is no maml or comment-based help.
                    # then help engine put string outside of 'text' property
                    # In this case there is no DescriptionToPara call needed
                    $ParameterObject.Description = $HelpEntry.description | AddLineBreaksForParagraphs
                }
            }
    
            $syntaxParam = $Help.syntax.syntaxItem.parameter |  Where-Object {$_.Name -eq $Parameter.Name} | Select-Object -First 1
            if ($syntaxParam)
            {
                # otherwise we could potentialy get it from Reflection but not doing it for now
                foreach ($parameterValue in $syntaxParam.parameterValueGroup.parameterValue)
                {
                    $ParameterObject.parameterValueGroup.Add($parameterValue)
                }
            }
        }
    
        function FillUpSyntaxFromCommand
        {
            foreach($ParameterSet in $Command.ParameterSets)
            {
                $SyntaxObject = New-Object -TypeName Markdown.MAML.Model.MAML.MamlSyntax
    
                $SyntaxObject.ParameterSetName = $ParameterSet.Name
                $SyntaxObject.IsDefault = $ParameterSet.IsDefault
    
                foreach($Parameter in $ParameterSet.Parameters)
                {
                    # ignore CommonParameters
                    if (isCommonParameterName $Parameter.Name -Workflow:$IsWorkflow)
                    {
                        # but don't ignore them, if they have explicit help entries
                        if ($Help.parameters.parameter | Where-Object {$_.Name -eq $Parameter.Name})
                        {
                        }
                        else
                        {
                            continue
                        }
                    }
    
                    if ($ExcludeDontShow)
                    {
                        $hasDontShow = $false
                        foreach ($Attribute in $Parameter.Attributes)
                        {
                            if ($Attribute.TypeId.ToString() -eq 'System.Management.Automation.ParameterAttribute' -and $Attribute.DontShow)
                            {
                                $hasDontShow = $true
                            }
                        }
    
                        if ($hasDontShow)
                        {
                            continue
                        }
                    }
    
                    $ParameterObject = New-Object -TypeName Markdown.MAML.Model.MAML.MamlParameter
                    $ParameterObject.Name = $Parameter.Name
                    $ParameterObject.Required = $Parameter.IsMandatory
                    $ParameterObject.PipelineInput = getPipelineValue $Parameter
                    # the ParameterType could be just a string in case of remoting
                    # or a TypeInfo object, in the regular case
                    if ($Session) {
                        # in case of remoting we already pre-calcuated the Type string
                        $ParameterObject.Type = $Parameter.ParameterTypeName
                    } else {
                        $ParameterObject.Type = GetTypeString -TypeObject $Parameter.ParameterType
                    }
                    # ToString() works in both cases
                    $ParameterObject.FullType = $Parameter.ParameterType.ToString()
    
                    $ParameterObject.ValueRequired = -not ($Parameter.Type -eq "SwitchParameter") # thisDefinition is a heuristic
    
                    foreach($Alias in $Parameter.Aliases)
                    {
                        $ParameterObject.Aliases += $Alias
                    }
    
                    $ParameterObject.Description = if ([String]::IsNullOrEmpty($Parameter.HelpMessage))
                    {
                        # additional new-lines are needed for Update-MarkdownHelp scenario.
                        switch ($Parameter.Name)
                        {
                            # we have well-known parameters and can generate a reasonable description for them
                            # https://github.com/PowerShell/platyPS/issues/211
                            'Confirm' { $LocalizedData.Confirm + "`r`n`r`n" }
                            'WhatIf' { $LocalizedData.WhatIf + "`r`n`r`n" }
                            'IncludeTotalCount' { $LocalizedData.IncludeTotalCount + "`r`n`r`n" }
                            'Skip' { $LocalizedData.Skip + "`r`n`r`n" }
                            'First' { $LocalizedData.First + "`r`n`r`n" }
                            default { ($LocalizedData.ParameterDescription -f $Parameter.Name) + "`r`n`r`n" }
                        }
                    }
                    else
                    {
                        $Parameter.HelpMessage
                    }
    
                    FillUpParameterFromHelp $ParameterObject
    
                    $SyntaxObject.Parameters.Add($ParameterObject)
                }
    
                $MamlCommandObject.Syntax.Add($SyntaxObject)
            }
        }
    
        function FillUpSyntaxFromHelp
        {
            function GuessTheType
            {
                param([string]$type)
    
                if (-not $type)
                {
                    # weired, but that's how it works
                    return 'SwitchParameter'
                }
    
                return $type
            }
    
            $ParamSetCount = 0
            foreach($ParameterSet in $Help.syntax.syntaxItem)
            {
                $SyntaxObject = New-Object -TypeName Markdown.MAML.Model.MAML.MamlSyntax
    
                $ParamSetCount++
                $SyntaxObject.ParameterSetName = $script:SET_NAME_PLACEHOLDER + "_" + $ParamSetCount
    
                foreach($Parameter in $ParameterSet.Parameter)
                {
                    $ParameterObject = New-Object -TypeName Markdown.MAML.Model.MAML.MamlParameter
    
                    $ParameterObject.Type = GuessTheType $Parameter.parameterValue
    
                    $ParameterObject.Name = $Parameter.Name
                    $ParameterObject.Required = $Parameter.required -eq 'true'
                    $ParameterObject.PipelineInput = $Parameter.pipelineInput | normalizeFirstLatter
    
                    $ParameterObject.ValueRequired = -not ($ParameterObject.Type -eq "SwitchParameter") # thisDefinition is a heuristic
    
                    if ($parameter.Aliases -ne 'None')
                    {
                        $ParameterObject.Aliases = $parameter.Aliases
                    }
    
                    FillUpParameterFromHelp $ParameterObject
    
                    $SyntaxObject.Parameters.Add($ParameterObject)
                }
    
                $MamlCommandObject.Syntax.Add($SyntaxObject)
            }
        }
    
        if ($UseHelpForParametersMetadata)
        {
            FillUpSyntaxFromHelp
        }
        else
        {
            FillUpSyntaxFromCommand
        }
    
        #endregion
        ##########
    
        #####GET THE HELP-Object Content and add it to the MAML Object#####
        #region Help-Object processing
    
        #Get Synopsis
        if ($UsePlaceholderForSynopsis)
        {
            # Help object ALWAYS contains SYNOPSIS.
            # If it's not available, it's auto-generated.
            # We don't want to include auto-generated SYNOPSIS (see https://github.com/PowerShell/platyPS/issues/110)
            $MamlCommandObject.Synopsis = New-Object -TypeName Markdown.MAML.Model.Markdown.SectionBody ($LocalizedData.Synopsis)
        }
        else
        {
            $MamlCommandObject.Synopsis = New-Object -TypeName Markdown.MAML.Model.Markdown.SectionBody (
                # $Help.Synopsis only contains the first paragraph
                # https://github.com/PowerShell/platyPS/issues/328
                $Help.details.description |
                DescriptionToPara |
                AddLineBreaksForParagraphs
            )
        }
    
        #Get Description
        if($Help.description -ne $null)
        {
            $MamlCommandObject.Description =  New-Object -TypeName Markdown.MAML.Model.Markdown.SectionBody (
                $Help.description |
                DescriptionToPara |
                AddLineBreaksForParagraphs
            )
        }
    
        #Add to Notes
        #From the Help AlertSet data
        if($help.alertSet)
        {
            $MamlCommandObject.Notes =  New-Object -TypeName Markdown.MAML.Model.Markdown.SectionBody (
                $help.alertSet.alert |
                DescriptionToPara |
                AddLineBreaksForParagraphs
            )
        }
    
        # Not provided by the command object. Using the Command Type to create a note declaring it's type.
        # We can add this placeholder
    
    
        #Add to relatedLinks
        if($help.relatedLinks)
        {
           foreach($link in $Help.relatedLinks.navigationLink)
            {
                $mamlLink = New-Object -TypeName Markdown.MAML.Model.MAML.MamlLink
                $mamlLink.LinkName = $link.linkText
                $mamlLink.LinkUri = $link.uri
                $MamlCommandObject.Links.Add($mamlLink)
            }
        }
    
        #Add Examples
        foreach($Example in $Help.examples.example)
        {
            $MamlExampleObject = New-Object -TypeName Markdown.MAML.Model.MAML.MamlExample
    
            $MamlExampleObject.Introduction = $Example.introduction
            $MamlExampleObject.Title = $Example.title
            $MamlExampleObject.Code = @(
                New-Object -TypeName Markdown.MAML.Model.MAML.MamlCodeBlock ($Example.code, '')
            )
    
            $RemarkText = $Example.remarks |
                DescriptionToPara |
                AddLineBreaksForParagraphs
    
            $MamlExampleObject.Remarks = $RemarkText
            $MamlCommandObject.Examples.Add($MamlExampleObject)
        }
    
        #Get Inputs
        #Reccomend adding a Parameter Name and Parameter Set Name to each input object.
        #region Inputs
        $Inputs = @()
    
        $Help.inputTypes.inputType | ForEach-Object {
            $InputDescription = $_.description
            $inputtypes = $_.type.name
            if ($_.description -eq $null -and $_.type.name -ne $null)
            {
                $inputtypes = $_.type.name.split("`n", [System.StringSplitOptions]::RemoveEmptyEntries)
            }
    
            $inputtypes | ForEach-Object {
                $InputObject = New-Object -TypeName Markdown.MAML.Model.MAML.MamlInputOutput
                $InputObject.TypeName = $_
                $InputObject.Description = $InputDescription |
                    DescriptionToPara |
                    AddLineBreaksForParagraphs
                $Inputs += $InputObject
            }
        }
    
        foreach($Input in $Inputs) {$MamlCommandObject.Inputs.Add($Input)}
    
        #endregion
    
        #Get Outputs
        #No Output Type description is provided from the command object.
        #region Outputs
        $Outputs = @()
    
        $Help.returnValues.returnValue | ForEach-Object {
            $OuputDescription = $_.description
            $Outputtypes = $_.type.name
            if ($_.description -eq $null -and $_.type.name -ne $null)
            {
                $Outputtypes = $_.type.name.split("`n", [System.StringSplitOptions]::RemoveEmptyEntries)
            }
    
            $Outputtypes | ForEach-Object {
                $OutputObject = New-Object -TypeName Markdown.MAML.Model.MAML.MamlInputOutput
                $OutputObject.TypeName = $_
                $OutputObject.Description = $OuputDescription |
                    DescriptionToPara |
                    AddLineBreaksForParagraphs
                $Outputs += $OutputObject
            }
        }
    
        foreach($Output in $Outputs) {$MamlCommandObject.Outputs.Add($Output)}
        #endregion
        ##########
    
        #####Adding Parameters Section from Syntax block#####
        #region Parameter Unique Selection from Parameter Sets
        #This will only work when the Parameters member has a public set as well as a get.
    
        function Get-ParameterByName
        {
            param(
                [string]$Name
            )
    
            $defaultSyntax = $MamlCommandObject.Syntax | Where-Object { $Command.DefaultParameterSet -eq $_.ParameterSetName }
            # default syntax should have a priority
            $syntaxes = @($defaultSyntax) + $MamlCommandObject.Syntax
    
            foreach ($s in $syntaxes)
            {
                $param = $s.Parameters | Where-Object { $_.Name -eq $Name }
                if ($param)
                {
                    return $param
                }
            }
        }
    
        function Get-ParameterNamesOrder()
        {
            # we want to keep original order for existing help
            # if something changed:
            #   - remove it from it's position
            #   - add to the end
    
            $helpNames = $Help.parameters.parameter.Name
            if (-not $helpNames) { $helpNames = @() }
    
            # sort-object unique does case-insensiteve unification
            $realNames = $MamlCommandObject.Syntax.Parameters.Name | Sort-object -Unique
            if (-not $realNames) { $realNames = @() }
    
            $realNamesList = New-Object 'System.Collections.Generic.List[string]'
            $realNamesList.AddRange( ( [string[]] $realNames) )
    
            foreach ($name in $helpNames)
            {
                if ($realNamesList.Remove($name))
                {
                    # yeild
                    $name
                }
                # Otherwise it didn't exist
            }
    
            foreach ($name in $realNamesList)
            {
                # yeild
                $name
            }
    
        }
    
        foreach($ParameterName in (Get-ParameterNamesOrder))
        {
            $Parameter = Get-ParameterByName $ParameterName
            if ($Parameter)
            {
                if ($UseFullTypeName)
                {
                    $Parameter = $Parameter.Clone()
                    $Parameter.Type = $Parameter.FullType
                }
                $MamlCommandObject.Parameters.Add($Parameter)
            }
            else
            {
                Write-Warning -Message ($LocalizedData.ParameterNotFound -f '[Markdown generation]', $ParameterName, $Command.Name)
            }
        }
    
        # Handle CommonParameters, default for MamlCommand is SupportCommonParameters = $true
        if ($Command.CmdletBinding -eq $false)
        {
            # Remove CommonParameters by exception
            $MamlCommandObject.SupportCommonParameters = $false
        }
    
        # Handle CommonWorkflowParameters
        $MamlCommandObject.IsWorkflow = $IsWorkflow
    
        #endregion
        ##########
    
        return $MamlCommandObject
    }
    
    function validateWorkingProvider
    {
        if((Get-Location).Drive.Provider.Name -ne 'FileSystem')
        {
            Write-Verbose -Message $LocalizedData.SettingFileSystemProvider
            $AvailableFileSystemDrives = Get-PSDrive | Where-Object {$_.Provider.Name -eq "FileSystem"} | Select-Object Root
            if($AvailableFileSystemDrives.Count -gt 0)
            {
               Set-Location $AvailableFileSystemDrives[0].Root
            }
            else
            {
                 throw $LocalizedData.FailedSettingFileSystemProvider
            }
        }
    }
    #endregion
    
    #region Parameter Auto Completers
    
    
    #                                       bbbbbbbb
    # TTTTTTTTTTTTTTTTTTTTTTT               b::::::b                                     CCCCCCCCCCCCC                                                             lllllll                              tttt            iiii
    # T:::::::::::::::::::::T               b::::::b                                  CCC::::::::::::C                                                             l:::::l                           ttt:::t           i::::i
    # T:::::::::::::::::::::T               b::::::b                                CC:::::::::::::::C                                                             l:::::l                           t:::::t            iiii
    # T:::::TT:::::::TT:::::T                b:::::b                               C:::::CCCCCCCC::::C                                                             l:::::l                           t:::::t
    # TTTTTT  T:::::T  TTTTTTaaaaaaaaaaaaa   b:::::bbbbbbbbb                      C:::::C       CCCCCC   ooooooooooo      mmmmmmm    mmmmmmm   ppppp   ppppppppp    l::::l     eeeeeeeeeeee    ttttttt:::::ttttttt    iiiiiii    ooooooooooo   nnnn  nnnnnnnn
    #         T:::::T        a::::::::::::a  b::::::::::::::bb                   C:::::C               oo:::::::::::oo  mm:::::::m  m:::::::mm p::::ppp:::::::::p   l::::l   ee::::::::::::ee  t:::::::::::::::::t    i:::::i  oo:::::::::::oo n:::nn::::::::nn
    #         T:::::T        aaaaaaaaa:::::a b::::::::::::::::b                  C:::::C              o:::::::::::::::om::::::::::mm::::::::::mp:::::::::::::::::p  l::::l  e::::::eeeee:::::eet:::::::::::::::::t     i::::i o:::::::::::::::on::::::::::::::nn
    #         T:::::T                 a::::a b:::::bbbbb:::::::b --------------- C:::::C              o:::::ooooo:::::om::::::::::::::::::::::mpp::::::ppppp::::::p l::::l e::::::e     e:::::etttttt:::::::tttttt     i::::i o:::::ooooo:::::onn:::::::::::::::n
    #         T:::::T          aaaaaaa:::::a b:::::b    b::::::b -:::::::::::::- C:::::C              o::::o     o::::om:::::mmm::::::mmm:::::m p:::::p     p:::::p l::::l e:::::::eeeee::::::e      t:::::t           i::::i o::::o     o::::o  n:::::nnnn:::::n
    #         T:::::T        aa::::::::::::a b:::::b     b:::::b --------------- C:::::C              o::::o     o::::om::::m   m::::m   m::::m p:::::p     p:::::p l::::l e:::::::::::::::::e       t:::::t           i::::i o::::o     o::::o  n::::n    n::::n
    #         T:::::T       a::::aaaa::::::a b:::::b     b:::::b                 C:::::C              o::::o     o::::om::::m   m::::m   m::::m p:::::p     p:::::p l::::l e::::::eeeeeeeeeee        t:::::t           i::::i o::::o     o::::o  n::::n    n::::n
    #         T:::::T      a::::a    a:::::a b:::::b     b:::::b                  C:::::C       CCCCCCo::::o     o::::om::::m   m::::m   m::::m p:::::p    p::::::p l::::l e:::::::e                 t:::::t    tttttt i::::i o::::o     o::::o  n::::n    n::::n
    #       TT:::::::TT    a::::a    a:::::a b:::::bbbbbb::::::b                   C:::::CCCCCCCC::::Co:::::ooooo:::::om::::m   m::::m   m::::m p:::::ppppp:::::::pl::::::le::::::::e                t::::::tttt:::::ti::::::io:::::ooooo:::::o  n::::n    n::::n
    #       T:::::::::T    a:::::aaaa::::::a b::::::::::::::::b                     CC:::::::::::::::Co:::::::::::::::om::::m   m::::m   m::::m p::::::::::::::::p l::::::l e::::::::eeeeeeee        tt::::::::::::::ti::::::io:::::::::::::::o  n::::n    n::::n
    #       T:::::::::T     a::::::::::aa:::ab:::::::::::::::b                        CCC::::::::::::C oo:::::::::::oo m::::m   m::::m   m::::m p::::::::::::::pp  l::::::l  ee:::::::::::::e          tt:::::::::::tti::::::i oo:::::::::::oo   n::::n    n::::n
    #       TTTTTTTTTTT      aaaaaaaaaa  aaaabbbbbbbbbbbbbbbb                            CCCCCCCCCCCCC   ooooooooooo   mmmmmm   mmmmmm   mmmmmm p::::::pppppppp    llllllll    eeeeeeeeeeeeee            ttttttttttt  iiiiiiii   ooooooooooo     nnnnnn    nnnnnn
    #                                                                                                                                           p:::::p
    #                                                                                                                                           p:::::p
    #                                                                                                                                          p:::::::p
    #                                                                                                                                          p:::::::p
    #                                                                                                                                          p:::::::p
    #                                                                                                                                          ppppppppp
    
    
    # Register-ArgumentCompleter can be provided thru TabExpansionPlusPlus or with V5 inbox module.
    # We don't care much which one it is, but the inbox one doesn't have -Description parameter
    if (Get-Command -Name Register-ArgumentCompleter -Module TabExpansionPlusPlus -ErrorAction Ignore) {
        Function ModuleNameCompleter {
            Param (
                $commandName,
                $parameterName,
                $wordToComplete,
                $commandAst,
                $fakeBoundParameter
            )
    
            Get-Module -Name "$wordToComplete*" |
                ForEach-Object {
                    New-CompletionResult -CompletionText $_.Name -ToolTip $_.Description
                }
        }
    
        Register-ArgumentCompleter -CommandName New-MarkdownHelp -ParameterName Module -ScriptBlock $Function:ModuleNameCompleter -Description 'This argument completer handles the -Module parameter of the New-MarkdownHelp Command.'
    }
    elseif (Get-Command -Name Register-ArgumentCompleter -ErrorAction Ignore) {
        Function ModuleNameCompleter {
            Param (
                $commandName,
                $parameterName,
                $wordToComplete,
                $commandAst,
                $fakeBoundParameter
            )
    
            Get-Module -Name "$wordToComplete*" |
                ForEach-Object {
                    $_.Name
                }
        }
    
        Register-ArgumentCompleter -CommandName New-MarkdownHelp -ParameterName Module -ScriptBlock $Function:ModuleNameCompleter
    }
    
    #endregion Parameter Auto Completers
    
  • tools\PlatyPS\platyPS.Resources.psd1 Show
    # Localized data for en-US
    
    ConvertFrom-StringData -StringData @'
    ModuleNameFromPath = Determined module name for '{0}' as '{1}'.
    UpdateDocsForModule = Updating documents for module '{0}' in {1}
    CreatingNewMarkdownForCommand = Creating new markdown for command '{0}'
    NoMetadataAndMetadata = -NoMetadata and -Metadata parameters cannot be specified at the same time.
    CommandNotFound = Command '{0}' not found in the session.
    ModuleNotFound = Module '{0}' is not imported in the session. Use "Import-Module -Name {0}" to import module in the current session.
    FileNotFound = File '{0}' not found.
    ModuleNameNotFoundFromPath = Cannot determine module name for {0}. Use "New-MarkdownHelp -WithModulePage" to create module help.
    ModuleOrCommandNotFound = Module '{0}' is not imported in the session or doesn't have any exported commands.
    OutputFolderNotFound = The output folder does not exist.
    PathIsNotFolder = Path '{0}' is not a folder.
    PathIsNotFile = Path '{0}' is not a file.
    FileNotFoundSkipping = Path '{0}' not found, skipping.
    FilesNotFoundInFolder = Path '{0}' does not contain any files.
    NoValidHelpFiles = No valid help files.
    FileNotValidHelpFileType = File '{0}' is not a valid help file type. Excluding from Cab file.
    AboutFileNotFound = {0} about file not found.
    PathNotFound = Path '{0}' not found.
    ForAnotherMarkdownAndApplicableTag = [ASSERT] Incorrect usage: cannot pass both -ForAnotherMarkdown and -ApplicableTag
    PlatyPS100SchemaDeprecated = PlatyPS schema version 1.0.0 is deprecated and not supported anymore. Please install platyPS 0.7.6 and migrate to the supported version.
    CannotWriteFileDirectoryExists = Cannot write file to '{0}', directory with the same name exists.
    CannotWriteFileWithoutForce = Cannot write to '{0}', file exists. Use -Force to overwrite.
    RangeIsLessThanZero = {0} '{1}' is unsupported: value less than 0
    MetadataDoesNotMatchLength = Metadata for cmdlet '{0}' doesn't match length.\nThis should never happen! Please report the issue on https://github.com/PowerShell/platyPS/issues
    FailedSettingFileSystemProvider = PlatyPS Cmdlets only work in the FileSystem Provider. Failed setting provider back to FileSystem.
    MoreThanOneGuid = This module has more than one guid. This could impact external help creation.
    NoMarkdownFiles = Path '{0}' does not contain any markdown files.
    FileContainsMoreThanOneCommand = File '{0}' contains more then one command, skipping upgrade.
    OneCommandPerFile = Use 'Update-Markdown -OutputFolder' to convert help to one command per file format first.
    CommandNotFoundFileRemoved = Command '{0}' not found in the session, file '{1}' removed.
    CommandNotFoundSkippingFile = Command '{0}' not found in the session, skipping upgrade for '{1}'.
    CannotFindInMetadataFile = Cannot find '{0}' in metadata for file {1}
    PathWillBeUsed = Path '{0}' will be used.
    VersionNotFoundForLocale = No version found for Locale '{0}'
    ModuleNotFoundFromCommand = {0} Cannot find module for command '{1}'
    MultipleModulesFoundFromCommand = {0} Found {1} modules for command '{1}'
    ParameterNotFound = {0} Could not find parameter object for '{1}' in command '{2}'
    InputMarkdownFile = {0} Input markdown file {1}
    SkippingMarkdownFile = {0} Skipping markdown file {1}
    WritingYamlToPath = Writing Yaml help to path '{0}'
    OutputPathAsFile = {0} Use '{1}' as path to a file.
    OutputPathAsDirectory = {0} Use '{1}' as path to a directory.
    FilteringForApplicableTag = {0} Filtering for ApplicableTag {1}
    WritingExternalHelpToPath = Writing external help to path '{0}'
    TestCommandExists = Testing that '{0}' is present on this machine.
    FolderNotFoundCreating = Path '{0}' does not exist, creating directory.
    CabFileInfo = Creating cab for '{0}', with Guid '{1}', in Locale '{2}'
    CreatingCabFileDirectives = Creating Cab file directives.
    CreatingCabFile = Creating Cab File.
    MovingCabFile = Moving the Cab to the path '{0}'
    RemovingExtraCabFileContents = Removing unnecessary Cab file contents.
    WritingWithEncoding = Writing to '{0}' with encoding: {1}
    ReadingWithEncoding = Reading from '{0}' with encoding = {1}
    SettingFileSystemProvider = PlatyPS Cmdlets only work in the FileSystem Provider. PlatyPS is changing the provider of this session back to FileSystem.
    ParsingMarkdown = Parsing markdown
    Progress = Progress:
    Processing = Processing: {0}
    HelpVersion = {{ Please enter version of help manually (X.X.X.X) format }}
    FwLink = {{ Update Download Link }}
    ExampleTitle = Example 1
    ExampleCode = PS C:\\> {{ Add example code here }}
    ExampleRemark = {{ Add example description here }}
    Description = {{ Fill in the Description }}
    ParameterDescription = {{{{ Fill {0} Description }}}}
    Synopsis = {{ Fill in the Synopsis }}
    Locale = {{ Update Locale }}
    Version = {{ Update Help Version }}
    ModuleGuid = {{ Update Module Guid }}
    Confirm = Prompts you for confirmation before running the cmdlet.
    WhatIf = Shows what would happen if the cmdlet runs. The cmdlet is not run.
    Skip = Ignores the specified number of objects and then gets the remaining objects. Enter the number of objects to skip.
    First = Gets only the specified number of objects. Enter the number of objects to get.
    IncludeTotalCount = Reports the total number of objects in the data set (an integer) followed by the selected objects. If the cmdlet cannot determine the total count, it displays "Unknown total count." The integer has an Accuracy property that indicates the reliability of the total count value. The value of Accuracy ranges from 0.0 to 1.0 where 0.0 means that the cmdlet could not count the objects, 1.0 means that the count is exact, and a value between 0.0 and 1.0 indicates an increasingly reliable estimate.
    ModuleImporteAutomaticaly = The module {0} was imported automatically. It may cause that parameters will be sorted alphabetically even without usage of the parameter AlphabeticParamsOrder. Please be sure that the loaded module instance contains previously generated help to avoid that.
    '@
  • tools\PlatyPS\platyPS.schema.md Show
    # Schema
    
    PlatyPS requires you to keep the content in a specific structure and Markdown notation. Any authoring must not break this formatting or the MAML will not be generated correctly.
    It closely resembles output of `Get-Help`.
    
    ## Legend
    
    *   `{string}` - single-line string value
    *   `{{text}}` - multi-line text
    *   `//` - line comment in schema
    *   tabs show the scopes of `// for` statements; they should not be included in the Markdown output.
    
    ### Version 2.0.0
        
        // Every cmdlet help placed in it's own `Command-Name.md` file in one folder.
        // We sometimes reference to this folder as "HelpModule".
    
        // Top-level metadata. You can put your own "key: value" statements there
        // unknown values would be ignored by platyPS
        // You can query this data from markdown file with `Get-MarkdownMetadata`
        //
        // Keys that have meaning for platyPS have separate entries
        ---
        schema: 2.0.0
        external help file: {file name for `New-ExternalHelp`}.xml
        online version: {url for `Get-Help -Online`}
        applicable: {comma-separated list of tags where this cmdlet exists} // if omitted then applicable for any tag
        {{ User-specific key-value pairs }}
        ---
    
        # {Command name}
    
        // following level-2 headers sections can go in any order
        // here is the recommended order
        
        ## SYNOPSIS
        {{Synopsis text}}
    
        ## SYNTAX
        // for each parameter set
            ### {Parameter Set Name, if default parameter set, followed by "(Default)"}
            // i.e.: FromPath (Default)
            // This syntax would be ignored during maml generation.
            // syntax would be generated from parameters metadata
            ```
            {{Output of Get-Command -Syntax}}
            ```
    
        ## DESCRIPTION
        {{Description text}}
    
        ## EXAMPLES
        // for every example
            ### {Example Name}
    
            {{Example introduction text}}
            
            // one or more times, codesnippet
            // it's useful to put the ```powershell code
            // before the plain text command exectution output
                ```{Syntax language, i.e. PowerShell or nothing for plain text}
                {{Example body}}
                ```
            
            {{Example remarks}} // not a mandatory, i.e. TechNet articles don't use remarks
    
        ## PARAMETERS
    
        // for every parameter
            // default value is non-mandatory
            ### -{Parameter name}
            {{Parameter description text. It can also include codesnippets, but they could not be ```yaml}}
    
            // parameter metadata
            // for every unique parameter metadata set 
            // Note: two Parameter Sets can have the same parameter as mandatory and non-mandatory
            // then we put them in two yaml snippets.
            // If they have the same metadata, we put them in one yaml snippet.
                ```yaml // this gives us key/value highlighting
                Type: {Parameter type}  // can be ommitted, then default assumed
                Parameter sets: {comma-separated list of names, i.e. "SetName1, SetName2" or "(All)" for all parameter sets}
                Aliases: {comma-separated list of aliases, i.e. EA, ERR} // if ommitted => default
                Accepted values: {ValidateSet, comma-separated list of valid values, i.e. Foo, Bar} // if ommitted => everything is accepted
                Applicable: {comma-separated list of tags where this cmdlet exists} // if omitted then applicable for any tag
                // break line to improve readability and separate metadata block
                                        
                Required: {true | false}
                Position: {1..n} | named
                Default value: {None | False (for switch parameters) | the actual default value}
                Accept pipeline input: {false | true (ByValue, ByPropertyName)}
                Accept wildcard characters: {true | false}
                ```
            // if supports workflow parameters
            ### <WorkflowCommonParameters>
            {{ Workflow common parameters text, would be ingored during maml generation }}
    
            // if supports common parameters
            ### <CommonParameters>
            {{ Common parameters text, would be ingored during maml generation }}
    
        ## INPUTS
        // for every input type
            ### {Input type}
            {{Description text}}
    
        ## OUTPUTS
        // for every output type
            ### {Output type}
            {{Description text}}
    
        ## RELATED LINKS
    
        // for every link
            [{link name}]({link url})
    
    ### Version 1.0.0 (Deprecated)
    v0.7.6 is the last platyPS version that supports it.
    
        // for every command:
            # {Command name}
        
            // following level-2 headers sections can go in any order
            // here is the recommended order
        
            ## SYNOPSIS
            {{Synopsis text}}
    
            ## DESCRIPTION
            {{Description text}}
    
            ## PARAMETERS
    
            // for every parameter
                // type and default value are non-mandatory
                ### {Parameter name} [{Parameter type}] = {Parameter default value}
    
                // parameter metadata
                ```powershell
                {{Parameter attributes as specified in param() block in PowerShell functions
                i.e. [Parameter(ParameterSetName = 'ByName')]
                }}
                ```
    
                {{Parameter description text}}
    
            ## INPUTS
            // for every input type
                ### {Input type}
                {{Description text}}
    
            ## OUTPUTS
            // for every output type
                ### {Output type}
                {{Description text}}
    
            ## EXAMPLES
            // for every example
                ### {Example Name}
    
                ```powershell
                {{Example body}}
                ```
                {{Example text explanation}}
    
            ## RELATED LINKS
    
            // for every link
                [{link name}]({link url})
    
  • tools\PlatyPS\PSGetModuleInfo.xml Show
    <Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
      <Obj RefId="0">
        <TN RefId="0">
          <T>Microsoft.PowerShell.Commands.PSRepositoryItemInfo</T>
          <T>System.Management.Automation.PSCustomObject</T>
          <T>System.Object</T>
        </TN>
        <MS>
          <S N="Name">platyPS</S>
          <S N="Version">0.14.0</S>
          <S N="Type">Module</S>
          <S N="Description">Generate PowerShell External Help files from Markdown</S>
          <S N="Author">PowerShell team</S>
          <Obj N="CompanyName" RefId="1">
            <TN RefId="1">
              <T>System.Object[]</T>
              <T>System.Array</T>
              <T>System.Object</T>
            </TN>
            <LST>
              <S>PowerShellTeam</S>
              <S>vors</S>
              <S>adityapatwardhan</S>
            </LST>
          </Obj>
          <S N="Copyright">(c) 2016 PowerShell team. All rights reserved.</S>
          <DT N="PublishedDate">2019-04-03T00:46:30+00:00</DT>
          <Nil N="InstalledDate" />
          <Nil N="UpdatedDate" />
          <URI N="LicenseUri">https://github.com/PowerShell/platyPS/blob/master/LICENSE</URI>
          <URI N="ProjectUri">https://github.com/PowerShell/platyPS</URI>
          <Nil N="IconUri" />
          <Obj N="Tags" RefId="2">
            <TNRef RefId="1" />
            <LST>
              <S>help</S>
              <S>markdown</S>
              <S>MAML</S>
              <S>PSEdition_Core</S>
              <S>PSEdition_Desktop</S>
              <S>PSModule</S>
            </LST>
          </Obj>
          <Obj N="Includes" RefId="3">
            <TN RefId="2">
              <T>System.Collections.Hashtable</T>
              <T>System.Object</T>
            </TN>
            <DCT>
              <En>
                <S N="Key">Function</S>
                <Obj N="Value" RefId="4">
                  <TNRef RefId="1" />
                  <LST>
                    <S>New-MarkdownHelp</S>
                    <S>Get-MarkdownMetadata</S>
                    <S>New-ExternalHelp</S>
                    <S>New-YamlHelp</S>
                    <S>Get-HelpPreview</S>
                    <S>New-ExternalHelpCab</S>
                    <S>Update-MarkdownHelp</S>
                    <S>Update-MarkdownHelpModule</S>
                    <S>New-MarkdownAboutHelp</S>
                    <S>Merge-MarkdownHelp</S>
                  </LST>
                </Obj>
              </En>
              <En>
                <S N="Key">RoleCapability</S>
                <Obj N="Value" RefId="5">
                  <TNRef RefId="1" />
                  <LST />
                </Obj>
              </En>
              <En>
                <S N="Key">Command</S>
                <Obj N="Value" RefId="6">
                  <TNRef RefId="1" />
                  <LST>
                    <S>New-MarkdownHelp</S>
                    <S>Get-MarkdownMetadata</S>
                    <S>New-ExternalHelp</S>
                    <S>New-YamlHelp</S>
                    <S>Get-HelpPreview</S>
                    <S>New-ExternalHelpCab</S>
                    <S>Update-MarkdownHelp</S>
                    <S>Update-MarkdownHelpModule</S>
                    <S>New-MarkdownAboutHelp</S>
                    <S>Merge-MarkdownHelp</S>
                  </LST>
                </Obj>
              </En>
              <En>
                <S N="Key">DscResource</S>
                <Obj N="Value" RefId="7">
                  <TNRef RefId="1" />
                  <LST />
                </Obj>
              </En>
              <En>
                <S N="Key">Workflow</S>
                <Obj N="Value" RefId="8">
                  <TNRef RefId="1" />
                  <LST />
                </Obj>
              </En>
              <En>
                <S N="Key">Cmdlet</S>
                <Obj N="Value" RefId="9">
                  <TNRef RefId="1" />
                  <LST />
                </Obj>
              </En>
            </DCT>
          </Obj>
          <Nil N="PowerShellGetFormatVersion" />
          <Nil N="ReleaseNotes" />
          <Obj N="Dependencies" RefId="10">
            <TNRef RefId="1" />
            <LST />
          </Obj>
          <S N="RepositorySourceLocation">https://www.powershellgallery.com/api/v2/</S>
          <S N="Repository">PSGallery</S>
          <S N="PackageManagementProvider">NuGet</S>
          <Obj N="AdditionalMetadata" RefId="11">
            <TN RefId="3">
              <T>System.Management.Automation.PSCustomObject</T>
              <T>System.Object</T>
            </TN>
            <MS>
              <S N="copyright">(c) 2016 PowerShell team. All rights reserved.</S>
              <S N="description">Generate PowerShell External Help files from Markdown</S>
              <S N="requireLicenseAcceptance">False</S>
              <S N="isLatestVersion">True</S>
              <S N="isAbsoluteLatestVersion">True</S>
              <S N="versionDownloadCount">61</S>
              <S N="downloadCount">84890</S>
              <S N="packageSize">181308</S>
              <S N="published">4/3/2019 12:46:30 AM +00:00</S>
              <S N="created">4/3/2019 12:46:30 AM +00:00</S>
              <S N="lastUpdated">4/3/2019 6:07:06 AM +00:00</S>
              <S N="tags">help markdown MAML PSEdition_Core PSEdition_Desktop PSModule PSFunction_New-MarkdownHelp PSCommand_New-MarkdownHelp PSFunction_Get-MarkdownMetadata PSCommand_Get-MarkdownMetadata PSFunction_New-ExternalHelp PSCommand_New-ExternalHelp PSFunction_New-YamlHelp PSCommand_New-YamlHelp PSFunction_Get-HelpPreview PSCommand_Get-HelpPreview PSFunction_New-ExternalHelpCab PSCommand_New-ExternalHelpCab PSFunction_Update-MarkdownHelp PSCommand_Update-MarkdownHelp PSFunction_Update-MarkdownHelpModule PSCommand_Update-MarkdownHelpModule PSFunction_New-MarkdownAboutHelp PSCommand_New-MarkdownAboutHelp PSFunction_Merge-MarkdownHelp PSCommand_Merge-MarkdownHelp PSIncludes_Function</S>
              <S N="developmentDependency">False</S>
              <S N="updated">2019-04-03T06:07:06Z</S>
              <S N="NormalizedVersion">0.14.0</S>
              <S N="Authors">PowerShell team</S>
              <S N="IsPrerelease">false</S>
              <S N="ItemType">Module</S>
              <S N="FileList">platyPS.nuspec|Markdown.MAML.dll|platyPS.psd1|platyPS.psm1|platyPS.Resources.psd1|platyPS.schema.md|YamlDotNet.dll|docs\about_platyPS.md|docs\Get-HelpPreview.md|docs\Get-MarkdownMetadata.md|docs\Merge-MarkdownHelp.md|docs\New-ExternalHelp.md|docs\New-ExternalHelpCab.md|docs\New-MarkdownAboutHelp.md|docs\New-MarkdownHelp.md|docs\New-YamlHelp.md|docs\Update-MarkdownHelp.md|docs\Update-MarkdownHelpModule.md|en-US\about_platyPS.help.txt|en-US\platyPS-help.xml|templates\aboutTemplate.md</S>
              <S N="GUID">0bdcabef-a4b7-4a6d-bf7e-d879817ebbff</S>
              <S N="CompanyName">Microsoft</S>
            </MS>
          </Obj>
          <S N="InstalledLocation">C:\Users\appveyor\AppData\Local\Temp\1\def3a249-2e16-48cd-88ee-6fd982e0717a\platyPS\0.14.0</S>
        </MS>
      </Obj>
    </Objs>
    
  • tools\PlatyPS\templates\aboutTemplate.md Show
    # {{TOPIC NAME}}
    ## {{FileNameForHelpSystem}}
    
    ```
    ABOUT TOPIC NOTE:
    The first header of the about topic should be the topic name.
    The second header contains the lookup name used by the help system.
    
    IE:
    # Some Help Topic Name
    ## SomeHelpTopicFileName
    
    This will be transformed into the text file
    as `about_SomeHelpTopicFileName`.
    Do not include file extensions.
    The second header should have no spaces.
    ```
    
    # SHORT DESCRIPTION
    {{ Short Description Placeholder }}
    
    ```
    ABOUT TOPIC NOTE:
    About topics can be no longer than 80 characters wide when rendered to text.
    Any topics greater than 80 characters will be automatically wrapped.
    The generated about topic will be encoded UTF-8.
    ```
    
    # LONG DESCRIPTION
    {{ Long Description Placeholder }}
    
    ## Optional Subtopics
    {{ Optional Subtopic Placeholder }}
    
    # EXAMPLES
    {{ Code or descriptive examples of how to leverage the functions described. }}
    
    # NOTE
    {{ Note Placeholder - Additional information that a user needs to know.}}
    
    # TROUBLESHOOTING NOTE
    {{ Troubleshooting Placeholder - Warns users of bugs}}
    
    {{ Explains behavior that is likely to change with fixes }}
    
    # SEE ALSO
    {{ See also placeholder }}
    
    {{ You can also list related articles, blogs, and video URLs. }}
    
    # KEYWORDS
    {{List alternate names or titles for this topic that readers might use.}}
    
    - {{ Keyword Placeholder }}
    - {{ Keyword Placeholder }}
    - {{ Keyword Placeholder }}
    - {{ Keyword Placeholder }}
  • tools\PlatyPS\YamlDotNet.dll Show
    md5: E7DAEF5F6B6A24951CFF560293D2364B | sha1: D39593ADCF02CCDAF3C452ED1BE7C01D070AD4A2 | sha256: 70E6CC1AD50870D43C24BD697C1BFEE97EE19EE22ABB517AF1EA2A7724205F0D | sha512: D2A60B789C4638A857FA0099EFD481DC164C19D330A6925D52036F44F8D2AA0D4336E15619C8B7DD39C44DD826392DE527413151D073C61DDA301CF037D84437
  • tools\VERIFICATION.txt Show
    VERIFICATION
    Verification is intended to assist the Chocolatey moderators and community in verifying that this package's contents are trustworthy.
    
    To verify the files using the project source:
    
    1. Please go to the project source location (https://github.com/PowerShell/Platyps) and download the source files;
    2. Build the source to create the binary files to verify;
    3. Use Get-FileHash -Path <FILE TO VERIFY> to get the file hash value from both the built file (from step 1 above) and the file from the package and compare them;
    
    Alternatively you can download the module from the PowerShell Gallery ...
    
        Save-Module -Name Platyps -Path <PATH TO DOWNLOAD TO>
    
    ... and compare the files from the package against those in the installed module. Again use Get-FileHash -Path <FILE TO VERIFY> to retrieve those hash values.

Virus Scan Results

In cases where actual malware is found, the packages are subject to removal. Software sometimes has false positives. Moderators do not necessarily validate the safety of the underlying software, only that a package retrieves software from the official distribution point and/or validate embedded software against official distribution point (where distribution rights allow redistribution).

Chocolatey Pro provides runtime protection from possible malware.

Dependencies

This package has no dependencies.

Package Maintainer(s)

Software Author(s)

  • Microsoft Corporation

Copyright

2015 Microsoft Corporation

Tags

Release Notes

https://github.com/PowerShell/platyPS/blob/master/CHANGELOG.md

Version History

Version Downloads Last updated Status
PlatyPS (PowerShell Module) 0.13.0 35 Friday, March 8, 2019 approved
PlatyPS (PowerShell Module) 0.12.0 144 Saturday, October 20, 2018 approved
PlatyPS (PowerShell Module) 0.11.1 63 Friday, September 14, 2018 approved
PlatyPS (PowerShell Module) 0.11.0 72 Monday, August 6, 2018 approved
PlatyPS (PowerShell Module) 0.10.2 76 Tuesday, June 19, 2018 approved
PlatyPS (PowerShell Module) 0.10.1 77 Sunday, June 17, 2018 approved
PlatyPS (PowerShell Module) 0.10.0 71 Sunday, June 10, 2018 approved
PlatyPS (PowerShell Module) 0.9.0 110 Saturday, May 12, 2018 approved

Discussion for the PlatyPS (PowerShell Module) Package

Ground rules:

  • This discussion is only about PlatyPS (PowerShell Module) and the PlatyPS (PowerShell Module) package. If you have feedback for Chocolatey, please contact the google group.
  • This discussion will carry over multiple versions. If you have a comment about a particular version, please note that in your comments.
  • The maintainers of this Chocolatey Package will be notified about new comments that are posted to this Disqus thread, however, it is NOT a guarantee that you will get a response. If you do not hear back from the maintainers after posting a message below, please follow up by using the link on the left side of this page or follow this link to contact maintainers. If you still hear nothing back, please follow the package triage process.
  • Tell us what you love about the package or PlatyPS (PowerShell Module), or tell us what needs improvement.
  • Share your experiences with the package, or extra configuration or gotchas that you've found.
  • If you use a url, the comment will be flagged for moderation until you've been whitelisted. Disqus moderated comments are approved on a weekly schedule if not sooner. It could take between 1-5 days for your comment to show up.

comments powered by Disqus
Chocolatey.org uses cookies to enhance the user experience of the site.
Ok