Update-Icicle.ps1

function Update-Icicle
{
    <#
    .Synopsis
         
    .Description
 
    #>

    param(
    [Parameter(Mandatory=$true,Position=0,ParameterSetName='UpdateIcicleNow')]
    [string]
    $Name,

    # The script block used to update the icicle
    [Parameter(Mandatory=$true,Position=1,ParameterSetName='UpdateIcicleWithScript')]
    [ScriptBlock]
    $ScriptBlock,

    [Parameter(ValueFromPipeline=$true,ParameterSetName='UpdateIcicleWithScript')]
    [PSObject]
    $Data
    )


    


    if ($PSCmdlet.ParameterSetName -eq 'UpdateIcicleNow') {
        $sub = Get-EventSubscriber -SourceIdentifier "${name}FirstUpdate" -ErrorAction SilentlyContinue
        if ($sub) {
            $sub.SourceObject.Stop()
            $sub.SourceObject.Start()
        }
    } elseif ($PSCmdlet.ParameterSetName -eq 'UpdateIcicleWithScript') {
        Get-Icicle -IcicleName $Name | 
            ForEach-Object {
                $_.Control.InvokeScript($ScriptBlock,$Data)
            }
    }
}