Powershell: Function with Comment-Based Help

In this scenario I want to prepare generic functionality for preparing query parameters string for uri that can be used later for webrequests etc.

It is a good idea to create description that will allow other users to use Get-Help command with your function or just to read it directly in source file.

You can find much more about creating functions here:

https://docs.microsoft.com/en-us/powershell/scripting/learn/ps101/09-functions

So… Lets create a function with description section

function Get-UriQueryParams{
    <# 
           This is description section.
    #>
 }

Important thing is that Get-Help command can return description in three ways: basic (default), detailed and full. For now I want to prepare basic version and for that I need to prepare SYNOPSIS and DESCRIPTION sections.

function Get-UriQueryParams{
    <#

    .SYNOPSIS
    Returns prepared query parameters strings for Uri.

    .DESCRIPTION
    The `Get-UriQueryParams` function returns prepared query parameters strings.

    #>
 }

Get-Help Get-UriQueryParams

As you can see some sections are generated automatically and there is no need to write everything manually.

Now I will define parameters that can be passed to function.

function Get-UriQueryParams{
    <#

    .SYNOPSIS
    Returns prepared query parameters strings for Uri.

    .DESCRIPTION
    The `Get-UriQueryParams` function returns prepared query parameters strings.

    #>
    param(
        [int]$Param1
        ,[int[]]$Param2
        ,[string]$Param3
        ,[string[]]$Param4
        ,[ValidateSet('true','false')][string]$Param5
    )
 }

Get-Help Get-UriQueryParams

Now SYNTAX section will be modified with defined parameters.

I usually create EXAMPLE sections when function have final state and executes every scenario properly.

function Get-UriQueryParams{
    <#

    .SYNOPSIS
    Returns prepared query parameters strings for Uri.

    .DESCRIPTION
    The `Get-UriQueryParams` function returns prepared query parameters strings.

    #>
    param(
        [int]$Param1
        ,[int[]]$Param2
        ,[string]$Param3
        ,[string[]]$Param4
        ,[ValidateSet('true','false')][string]$Param5
    )
    # Set Scheme for QueryParams for later use in Uri
    $QueryParams="?"
    
    # check if $Param1 is passed and it is not $null
    if($Param1){
        # add parameter to variable
        $QueryParams+="param1=$Param1&"
    }

    if($Param2){
        # $Param2 is definied as array of integers and 
        # it requires to join every item into string
        # comma separated
        $QueryParams+="param2=$($Param2 -join ",")&"
    }

    if($Param3){
        $QueryParams+="param3=$Param3&"
    }

    if($Param4){
        # $Param4 is defined as array of strings and
        # it requires to join every item into string
        # comma separated
        $QueryParams+="param4=$($Param4 -join ",")&"
    }

    if($Param5){
        $QueryParams+="param5=$Param5&"
    }

    # if none parameter was passed set $QueryParameter to null
    # else remove last character from it for remove '&' character
    # from last passed parameter
    if($QueryParams -eq '?'){
        $QueryParams=$null
    }else{
        $QueryParams=$QueryParams.Substring(0, $QueryParams.Length - 1 )
    }

    # return prepared string
    return $QueryParams
}
Get-Help Get-UriQueryParams

At this moment I’m ready to add EXAMPLE sections at function description. That sections are not part of basic view of Get-Help command and you need to use -detailed or -full switch parameter at end of the command.

Important things are that first line at EXAMPLE section is always call of the function and each example is auto-numbered.

function Get-UriQueryParams{
    <#

    .SYNOPSIS
    Returns prepared query parameters strings for Uri.

    .DESCRIPTION
    The `Get-UriQueryParams` function returns prepared query parameters strings.

    .EXAMPLE
    Get-UriQueryParams -Param1 1

    Get data with Param1 specified.

    .EXAMPLE
    Get-UriQueryParams -Param2 21,22,23 

    Get data with Param2 specified.
        
    .EXAMPLE
    Get-UriQueryParams -Param3 "test_string_param3"

    Get data with Param3 specified.

    .EXAMPLE
    Get-UriQueryParams -Param4 "test_string_param4.1", "test_string_param4.2"

    Get data with Param4 specified.

    .EXAMPLE
    Get-UriQueryParams -Param5 false

    Get data with Param5 specified.

    .EXAMPLE
    Get-UriQueryParams -Param1 1111 -Param5 true

    Get data with Param1 and Param5 specified.

    #>
    param(
        [int]$Param1
        ,[int[]]$Param2
        ,[string]$Param3
        ,[string[]]$Param4
        ,[ValidateSet('true','false')][string]$Param5
    )

    # Set Scheme for QueryParams for later use in Uri
    $QueryParams="?"
    
    # check if $Param1 is passed and it is not $null
    if($Param1){
        # add parameter to variable
        $QueryParams+="param1=$Param1&"
    }

    if($Param2){
        # $Param2 is definied as array of integers and 
        # it requires to join every item into string
        # comma separated
        $QueryParams+="param2=$($Param2 -join ",")&"
    }

    if($Param3){
        $QueryParams+="param3=$Param3&"
    }

    if($Param4){
        # $Param4 is defined as array of strings and
        # it requires to join every item into string
        # comma separated
        $QueryParams+="param4=$($Param4 -join ",")&"
    }

    if($Param5){
        $QueryParams+="param5=$Param5&"
    }

    # if none parameter was passed set $QueryParameter to null
    # else remove last character from it for remove '&' character
    # from last passed parameter
    if($QueryParams -eq '?'){
        $QueryParams=$null
    }else{
        $QueryParams=$QueryParams.Substring(0, $QueryParams.Length - 1 )
    }

    # return prepared string
    return $QueryParams
}

Get-Help Get-UriQueryParams -Detailed
Advertisement
Tagged with: , , , , , ,
Posted in Powershell

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: