public/Stop-UnraidVm.ps1
|
function Stop-UnraidVm { <# .SYNOPSIS Stops a VM. .PARAMETER InputObject VM to stop (accepts pipeline). .PARAMETER Name VM name. .PARAMETER Force Immediate power-off instead of graceful shutdown. .PARAMETER Session Unraid session (defaults to current session). .EXAMPLE Stop-UnraidVm -Name "Windows10" .EXAMPLE Stop-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, [Parameter()] [switch]$Force, [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) { $action = if ($Force) { 'forceStop' } else { 'stop' } $actionDesc = if ($Force) { "Force Stop Virtual Machine" } else { "Stop Virtual Machine" } Invoke-UnraidStateChange -Id $vm.Id -Name $vm.Name -Action $action -Type 'vm' -ShouldProcessAction $actionDesc -Session $Session -Cmdlet $PSCmdlet } } } |