Skip to content

Set-HyperVVMAutomaticStart

Hyper-V: Configures VM automatic start action

#Requires -Version 5.1
#Requires -Modules Hyper-V

[CmdletBinding()]
Param (
    [string]$ComputerName = "localhost",

    [PSCredential]$Credential,

    [Parameter(Mandatory = $true)]
    [string]$Name,

    [Parameter(Mandatory = $true)]
    [ValidateSet('Nothing', 'StartIfRunning', 'Start')]
    [string]$Action,

    [int]$DelaySeconds = 0
)

Process {
    try {
        $params = @{
            'ComputerName' = $ComputerName
            'ErrorAction'  = 'Stop'
        }
        if ($Credential) { $params.Add('Credential', $Credential) }

        $vm = Get-VM @params | Where-Object { $_.Name -eq $Name -or $_.Id -eq $Name }

        if (-not $vm) {
            throw "Virtual machine '$Name' not found on '$ComputerName'."
        }

        Set-VM -VM $vm -AutomaticStartAction $Action -AutomaticStartDelay $DelaySeconds -ErrorAction Stop

        $result = [PSCustomObject]@{
            Name                 = $vm.Name
            AutomaticStartAction = $Action
            AutomaticStartDelay  = $DelaySeconds
            Action               = "AutomaticStartUpdated"
            Status               = "Success"
            Timestamp            = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
        }

        Write-Output $result
    }
    catch {
        throw
    }
}

Specifies the name of the Hyper-V host. Defaults to the local machine.

Specifies the credentials to use for the remote connection.

Specifies the name or ID of the virtual machine.

Specifies the action to take (Nothing, StartIfRunning, or Start).

Optional. Specifies the delay in seconds before the virtual machine starts.

An interactive directory of PowerShell scripts.