A function in PowerShell is a block of code that can be defined and then called by name. Functions can take input parameters and return output, just like a cmdlet. You can use functions to encapsulate a specific task or set of tasks, and then reuse that code multiple times in your script or on the command line. Here’s an example of a simple function in PowerShell:

function Get-Greeting {

    param($Name)

    "Hello, $Name!"

  }

The function keyword is used to define the start of the function, and the param keyword is used to define a parameter that the function expects as input. The body of the function is the code that will be executed when the function is called, in this case, a string with the greeting is returned.

To call this function, you would use the following syntax:


Get-Greeting -Name "John"

This would output the string “Hello, John!” to the console.

You can also define multiple parameters for a function, like this:

function Get-Greeting {

    param($FirstName, $LastName)

    "Hello, $FirstName $LastName!"

  }

To call this function with multiple parameters, you would use the following syntax:

Get-Greeting -FirstName "John" -LastName "Doe"

This would output the string “Hello, John Doe!” to the console.

You can make a parameter mandatory in a PowerShell function by using the [Parameter(Mandatory=$true)] attribute. For example, to make the $FirstName parameter mandatory in the Get-Greeting function, you would define the function like this:

function Get-Greeting {

    [Parameter(Mandatory=$true)]

    param($FirstName, $LastName)

    "Hello, $FirstName $LastName!"

  }

Now, if you try to call the Get-Greeting function without specifying a value for the $FirstName parameter, you will get an error message telling you that the parameter is mandatory and you must provide a value.

Get-Greeting -LastName "Doe"

This would produce an error message like “A parameter cannot be found that matches parameter name ‘FirstName’.”

You can use the ValidateSet attribute to specify a set of allowed values for a parameter in a PowerShell function. For example, to limit the $LastName parameter in the Get-Greeting function to a set of allowed values, you could define the function like this:

function Get-Greeting {

    param($FirstName)

    [ValidateSet("Doe", "Smith", "Jones")]

    param($LastName)

    "Hello, $FirstName $LastName!"

  }

Now, if you try to call the Get-Greeting function with a value for the $LastName parameter that is not in the set of allowed values, you will get an error message telling you that the value is not valid.

Get-Greeting -FirstName "John" -LastName "Brown"

This would produce an error message like “The value of the parameter ‘LastName’ is invalid: Brown. Valid values are: Doe, Smith, Jones.”

You can also use the ValidateSet attribute to specify a set of allowed values that is stored in a variable or array. For example:

$AllowedLastNames = "Doe", "Smith", "Jones"

function Get-Greeting {

  param($FirstName)

  [ValidateSet($AllowedLastNames)]

  param($LastName)

  "Hello, $FirstName $LastName!"

}

This would have the same effect as the previous example, but the set of allowed values is stored in the $AllowedLastNames variable rather than being hard-coded in the function definition.

In the previous example for piping, we are able to pipe multiple functions, first, Get-Process, then Where-Object, and into Sort-Object, finally calling Format-Table.