Public/Restart-PVEVM.ps1
|
function Restart-PVEVM { <# .SYNOPSIS Resets QEMU virtual machines (hard restart). .DESCRIPTION Like pressing a physical reset button: the guest restarts immediately without shutting down, and data not yet written can be lost. For a clean restart use Restart-PVEVMGuest. Prompts for confirmation by default (ConfirmImpact High). A VM that is not running is skipped with a warning and written unchanged. .PARAMETER Name VM name(s). Wildcards allowed. .PARAMETER VMId VM ID(s). Binds from piped PVEPS.VM objects. .PARAMETER RunAsync Return the PVE task(s) at once instead of waiting. .PARAMETER Server Connection(s) to use. Defaults to the default connection; binds from piped objects. .EXAMPLE Restart-PVEVM web01 -Confirm:$false #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSShouldProcess', '', Justification = 'ShouldProcess is called on this cmdlet through $PSCmdlet by Invoke-PVEPowerAction.')] [CmdletBinding(DefaultParameterSetName = 'Id', SupportsShouldProcess, ConfirmImpact = 'High')] [OutputType('PVEPS.VM', 'PVEPS.Task')] param( [Parameter(Mandatory, ParameterSetName = 'Name', Position = 0)] [SupportsWildcards()] [ValidateNotNullOrEmpty()] [string[]]$Name, [Parameter(Mandatory, ParameterSetName = 'Id', ValueFromPipelineByPropertyName)] [ValidateRange(100, 999999999)] [int[]]$VMId, [switch]$RunAsync, [Parameter(ValueFromPipelineByPropertyName)] [Alias('Connection')] [object[]]$Server ) begin { $targets = [System.Collections.Generic.List[psobject]]::new() } process { Add-PVEGuestTarget -Cmdlet $PSCmdlet -Target $targets -Server $Server -VMId $VMId -Name $Name } end { Invoke-PVEPowerAction -Cmdlet $PSCmdlet -Type qemu -Action reset -Description 'Reset (hard restart)' -Target $targets -RequiredStatus running -RunAsync:$RunAsync } } |