public/Suspend-UnraidVm.ps1

function Suspend-UnraidVm {
    <#
    .SYNOPSIS
        Pauses a VM.

    .PARAMETER InputObject
        VM to suspend (accepts pipeline).

    .PARAMETER Name
        VM name.

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

    .EXAMPLE
        Suspend-UnraidVm -Name "Windows10"
    #>

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

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

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

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

        foreach ($vm in $vms) {
            Invoke-UnraidStateChange -Id $vm.Id -Name $vm.Name -Action 'pause' -Type 'vm' -Session $Session -Cmdlet $PSCmdlet
        }
    }
}