public/Restart-UnraidVm.ps1

function Restart-UnraidVm {
    <#
    .SYNOPSIS
        Restarts a virtual machine.

    .PARAMETER InputObject
        VM to restart (accepts pipeline).

    .PARAMETER Name
        VM name.

    .PARAMETER Force
        Hard reset instead of graceful reboot.

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

    .EXAMPLE
        Restart-UnraidVm -Name "Windows10"

    .EXAMPLE
        Restart-UnraidVm -Name "Ubuntu" -Force
    #>

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

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

        [switch]$Force,

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

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

        foreach ($vm in $vms) {
            $action = if ($Force) { 'reset' } else { 'reboot' }
            $description = if ($Force) { "Hard Reset Virtual Machine" } else { "Reboot Virtual Machine" }

            Invoke-UnraidStateChange -Id $vm.Id -Name $vm.Name -Action $action -Type 'vm' -ShouldProcessAction $description -Session $Session -Cmdlet $PSCmdlet
        }
    }
}