modules/VMKernelDebugging.psm1
Set-StrictMode -Version "Latest" class VMKernelDebuggingInfo { hidden [HyperV.Tools.VM] $VM_ hidden [bool] $debug_port_enabled_ hidden [uint16] $debug_port_ hidden VMKernelDebuggingInfo([HyperV.Tools.VM] $VM_, [bool] $debug_port_enabled_, [uint16] $debug_port_) { $this.VM_ = $VM_ $this.debug_port_enabled_ = $debug_port_enabled_ $this.debug_port_ = $debug_port_ } } function Enable-VMKernelDebugging { [OutputType([VMKernelDebuggingInfo])] [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [HyperV.Tools.VM] [Alias("VM")] $InputObject, [ValidateRange(49152, 65535)] [int] $DebugPort ) process { $VM = $InputObject $VM_settings = Get-VMSettings -VM $VM # if DebugPort is present set it if ((is_null_or_zero($DebugPort)) -eq $false) { $VM_settings.DebugPort = $DebugPort } else { # if DebugPort is missing, that's an error only if there's no value already set if (is_null_or_zero($VM_settings.DebugPort)) { throw "DebugPort must be specified if it is not already set on the VM ($VM)." } } # if we didn't throw by now, enable kernel debug port $VM_settings.DebugPortEnabled = 1 Set-VMSettings -VMSettings $VM_settings return (Get-VMKernelDebugging -VM $VM) } } Function Disable-VMKernelDebugging { [OutputType([VMKernelDebuggingInfo])] [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [HyperV.Tools.VM] [Alias("VM")] $InputObject ) process { $VM = $InputObject $VM_settings = Get-VMSettings -VM $VM $VM_settings.DebugPortEnabled = 0 Set-VMSettings -VMSettings $VM_settings return (Get-VMKernelDebugging -VM $VM) } } function Get-VMKernelDebugging { [OutputType([VMKernelDebuggingInfo])] [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [HyperV.Tools.VM] [Alias("VM")] $InputObject ) process { $VM = $InputObject $VM_settings = Get-VMSettings -VM $VM $result = [VMKernelDebuggingInfo]::new($VM, $VM_settings.DebugPortEnabled, $VM_settings.DebugPort) return $result } } function is_null_or_zero($p) { if (($null -eq $p) -or (0 -eq $p)) { return $true } else { return $false } } |