Skip to content

Set-HyperVHostInfo

Hyper-V: Updates Hyper-V host configuration and resource policies

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

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

    [PSCredential]$Credential,

    [string]$VirtualHardDiskPath,

    [string]$VirtualMachinePath,

    [Nullable[bool]]$NumaSpanningEnabled,

    [int]$MaximumStorageMigrations,

    [Nullable[bool]]$EnhancedSessionModeEnabled
)

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

        $setParams = @{ 'ErrorAction' = 'Stop' }
        if ($Credential) { $setParams.Add('Credential', $Credential) }
        else { $setParams.Add('ComputerName', $ComputerName) }

        if ($VirtualHardDiskPath) { $setParams.Add('VirtualHardDiskPath', $VirtualHardDiskPath) }
        if ($VirtualMachinePath) { $setParams.Add('VirtualMachinePath', $VirtualMachinePath) }
        if ($NumaSpanningEnabled -ne $null) { $setParams.Add('NumaSpanningEnabled', [bool]$NumaSpanningEnabled) }
        if ($MaximumStorageMigrations) { $setParams.Add('MaximumStorageMigrations', $MaximumStorageMigrations) }
        if ($EnhancedSessionModeEnabled -ne $null) { $setParams.Add('EnhancedSessionModeEnabled', [bool]$EnhancedSessionModeEnabled) }

        if ($setParams.Count -gt 2) {
            Set-VMHost @setParams
        }

        $updatedHost = Get-VMHost -ComputerName $ComputerName
        
        $result = [PSCustomObject]@{
            ComputerName              = $updatedHost.ComputerName
            VirtualHardDiskPath       = $updatedHost.VirtualHardDiskPath
            VirtualMachinePath        = $updatedHost.VirtualMachinePath
            NumaSpanningEnabled       = $updatedHost.NumaSpanningEnabled
            MaximumStorageMigrations  = $updatedHost.MaximumStorageMigrations
            EnhancedSessionModeEnabled = $updatedHost.EnhancedSessionModeEnabled
            Action                    = "HostPropertiesUpdated"
            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.

Optional. Specifies the default folder for virtual hard disk files.

Optional. Specifies the default folder for virtual machine configuration files.

Optional. Enables or disables NUMA spanning.

Optional. Specifies the maximum number of simultaneous storage migrations.

Optional. Enables or disables enhanced session mode.

An interactive directory of PowerShell scripts.