public/Stop-UnraidContainer.ps1

function Stop-UnraidContainer {
    <#
    .SYNOPSIS
        Stops a container.

    .PARAMETER InputObject
        Container to stop (accepts pipeline).

    .PARAMETER Name
        Container name.

    .PARAMETER Session
        Unraid session (defaults to current session).

    .EXAMPLE
        Stop-UnraidContainer -Name "plex"

    .EXAMPLE
        Get-UnraidContainer | Where-Object { $_.State -eq "running" } | Stop-UnraidContainer
    #>

    [CmdletBinding(SupportsShouldProcess, DefaultParameterSetName = "ByName")]
    [OutputType('void')]
    param(
        [Parameter(Mandatory, ParameterSetName = "ByObject", ValueFromPipeline)]
        [UnraidContainer[]]$InputObject,

        [Parameter(Mandatory, ParameterSetName = "ByName", Position = 0)]
        [string]$Name,

        [Parameter()]
        [UnraidSession]$Session = $script:DefaultUnraidSession
    )

    process {
        $containers = Resolve-UnraidContainer -InputObject $InputObject -Name $Name -ParameterSetName $PSCmdlet.ParameterSetName -Session $Session
        if (!$containers) { return }

        foreach ($container in $containers) {
            if ($container.State -ne "running") {
                Write-Verbose "Container '$($container.Name)' is not running."
                continue
            }

            Invoke-UnraidStateChange -Id $container.Id -Name $container.Name -Action 'stop' -Type 'docker' -Session $Session -Cmdlet $PSCmdlet
        }
    }
}