public/Set-YmInput.ps1

<#
.Synopsis
    The function changes input
 
.DESCRIPTION
    The function changes input
 
.EXAMPLE
    Set-YmInput -DeviceAddress 10.10.0.30 -Input spotify
 
.EXAMPLE
    Set-YmInput -DeviceAddress 10.10.0.30 -Input tuner -PassThru
 
    response_code responde_message
    ------------- ----------------
                0 Successful request
 
.EXAMPLE
    input-ym -DeviceAddress 10.10.0.30 -Input cd
 
.LINK
    Author: autor
    Link: akademiapowershell.pl
 
    Date: 26-08-2019
    Version: version
    Keywords: keywords
    Notes:
    Changelog:
#>

function Set-YmInput
{

    [cmdletbinding(SupportsShouldProcess)]
    [Alias('input-ym')]
    param (
        [Parameter(Mandatory, ValueFromPipeline, Position = 0)]
        [string]$DeviceAddress,
        [switch]$PassThru
    )
    DynamicParam
    {
        # Set the dynamic parameters' name
        $ParameterName = 'Input'

        # Create the dictionary
        $RuntimeParameterDictionary = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary

        # Create the collection of attributes
        $AttributeCollection = New-Object System.Collections.ObjectModel.Collection[System.Attribute]

        # Create and set the parameters' attributes
        $ParameterAttribute = New-Object System.Management.Automation.ParameterAttribute
        $ParameterAttribute.Mandatory = $true
        $ParameterAttribute.Position = 1

        # Add the attributes to the attributes collection
        $AttributeCollection.Add($ParameterAttribute)

        # Generate and set the ValidateSet
        $arrSet = (Get-YmInputList -DeviceAddress $DeviceAddress | Select-Object -ExpandProperty Id)
        $ValidateSetAttribute = New-Object System.Management.Automation.ValidateSetAttribute($arrSet)

        # Add the ValidateSet to the attributes collection
        $AttributeCollection.Add($ValidateSetAttribute)

        # Create and return the dynamic parameter
        $RuntimeParameter = New-Object System.Management.Automation.RuntimeDefinedParameter($ParameterName, [string], $AttributeCollection)
        $RuntimeParameterDictionary.Add($ParameterName, $RuntimeParameter)
        return $RuntimeParameterDictionary
    }

    begin
    {

    }
    process
    {
        $Input = $PSBoundParameters[$ParameterName]
        if ($PSCmdlet.ShouldProcess($Input))
        {
            foreach ($Address in $DeviceAddress)
            {
                try
                {
                    $Response = Invoke-WebRequest -Uri "http://$Address/YamahaExtendedControl/v1/main/setInput?input=$Input"
                    if ($PassThru)
                    {
                        $Response.Content | ConvertFrom-Json | Add-YmResponseCode
                    }
                }
                catch
                {
                    Write-Warning $PSItem
                }
            }
        }
    }
    end
    {

    }
}