As part of the VMware open source program, we have to update this repository with the correct license and copyright information. We add the BSD-2 Clause License for this repository. We mark all source code provided by VMware with the Copyright notice under BSD-2 Clause license. * Update repository license to BSD 2-Clause License * Update Copyright
197 lines
5.7 KiB
PowerShell
197 lines
5.7 KiB
PowerShell
<#
|
|
Copyright 2021 VMware, Inc.
|
|
SPDX-License-Identifier: BSD-2-Clause
|
|
#>
|
|
function Get-VMEvcMode {
|
|
<#
|
|
.SYNOPSIS
|
|
Gathers information on the EVC status of a VM
|
|
.DESCRIPTION
|
|
Will provide the EVC status for the specified VM
|
|
.NOTES
|
|
Author: Kyle Ruddy, @kmruddy, thatcouldbeaproblem.com
|
|
.PARAMETER Name
|
|
VM name which the function should be ran against
|
|
.EXAMPLE
|
|
Get-VMEvcMode -Name vmName
|
|
Retreives the EVC status of the provided VM
|
|
#>
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory=$true,Position=0,ValueFromPipelineByPropertyName=$true)]
|
|
$Name
|
|
)
|
|
|
|
Process {
|
|
$evVM = @()
|
|
|
|
if ($name -is [string]) {$evVM += Get-VM -Name $Name -ErrorAction SilentlyContinue}
|
|
elseif ($name -is [array]) {
|
|
|
|
if ($name[0] -is [string]) {
|
|
$name | foreach {
|
|
$evVM += Get-VM -Name $_ -ErrorAction SilentlyContinue
|
|
}
|
|
}
|
|
elseif ($name[0] -is [VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl]) {$evVM = $name}
|
|
|
|
}
|
|
elseif ($name -is [VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl]) {$evVM += $name}
|
|
|
|
if ($evVM -eq $null) {Write-Warning "No VMs found."}
|
|
else {
|
|
$output = @()
|
|
foreach ($v in $evVM) {
|
|
|
|
$report = "" | select Name,EVCMode
|
|
$report.Name = $v.Name
|
|
$report.EVCMode = $v.ExtensionData.Runtime.MinRequiredEVCModeKey
|
|
$output += $report
|
|
|
|
}
|
|
|
|
return $output
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function Remove-VMEvcMode {
|
|
<#
|
|
.SYNOPSIS
|
|
Removes the EVC status of a VM
|
|
.DESCRIPTION
|
|
Will remove the EVC status for the specified VM
|
|
.NOTES
|
|
Author: Kyle Ruddy, @kmruddy, thatcouldbeaproblem.com
|
|
.PARAMETER Name
|
|
VM name which the function should be ran against
|
|
.EXAMPLE
|
|
Remove-VMEvcMode -Name vmName
|
|
Removes the EVC status of the provided VM
|
|
#>
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory=$true,Position=0,ValueFromPipelineByPropertyName=$true)]
|
|
$Name
|
|
)
|
|
|
|
Process {
|
|
$evVM = @()
|
|
$updateVM = @()
|
|
|
|
if ($name -is [string]) {$evVM += Get-VM -Name $Name -ErrorAction SilentlyContinue}
|
|
elseif ($name -is [array]) {
|
|
|
|
if ($name[0] -is [string]) {
|
|
$name | foreach {
|
|
$evVM += Get-VM -Name $_ -ErrorAction SilentlyContinue
|
|
}
|
|
}
|
|
elseif ($name[0] -is [VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl]) {$evVM = $name}
|
|
|
|
}
|
|
elseif ($name -is [VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl]) {$evVM += $name}
|
|
|
|
if ($evVM -eq $null) {Write-Warning "No VMs found."}
|
|
else {
|
|
foreach ($v in $evVM) {
|
|
|
|
if (($v.HardwareVersion -ge 'vmx-14' -and $v.PowerState -eq 'PoweredOff') -or ($v.Version -ge 'v14' -and $v.PowerState -eq 'PoweredOff')) {
|
|
|
|
$v.ExtensionData.ApplyEvcModeVM_Task($null, $true) | Out-Null
|
|
$updateVM += $v.Name
|
|
|
|
}
|
|
else {Write-Warning $v.Name + " does not have the minimum requirements of being Hardware Version 14 and powered off."}
|
|
|
|
}
|
|
|
|
if ($updateVM) {
|
|
|
|
Start-Sleep -Seconds 2
|
|
Get-VMEvcMode -Name $updateVM
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function Set-VMEvcMode {
|
|
<#
|
|
.SYNOPSIS
|
|
Configures the EVC status of a VM
|
|
.DESCRIPTION
|
|
Will configure the EVC status for the specified VM
|
|
.NOTES
|
|
Author: Kyle Ruddy, @kmruddy, thatcouldbeaproblem.com
|
|
.PARAMETER Name
|
|
VM name which the function should be ran against
|
|
.PARAMETER EvcMode
|
|
The EVC Mode key which should be set
|
|
.EXAMPLE
|
|
Set-VMEvcMode -Name vmName -EvcMode intel-sandybridge
|
|
Configures the EVC status of the provided VM to be 'intel-sandybridge'
|
|
#>
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory=$true,Position=0,ValueFromPipelineByPropertyName=$true)]
|
|
$Name,
|
|
[Parameter(Mandatory=$true,Position=1)]
|
|
[ValidateSet("intel-merom","intel-penryn","intel-nehalem","intel-westmere","intel-sandybridge","intel-ivybridge","intel-haswell","intel-broadwell","intel-skylake","amd-rev-e","amd-rev-f","amd-greyhound-no3dnow","amd-greyhound","amd-bulldozer","amd-piledriver","amd-steamroller","amd-zen")]
|
|
$EvcMode
|
|
)
|
|
|
|
Process {
|
|
$evVM = @()
|
|
$updateVM = @()
|
|
|
|
if ($name -is [string]) {$evVM += Get-VM -Name $Name -ErrorAction SilentlyContinue}
|
|
elseif ($name -is [array]) {
|
|
|
|
if ($name[0] -is [string]) {
|
|
$name | foreach {
|
|
$evVM += Get-VM -Name $_ -ErrorAction SilentlyContinue
|
|
}
|
|
}
|
|
elseif ($name[0] -is [VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl]) {$evVM = $name}
|
|
|
|
}
|
|
elseif ($name -is [VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl]) {$evVM += $name}
|
|
|
|
if ($evVM -eq $null) {Write-Warning "No VMs found."}
|
|
else {
|
|
|
|
$si = Get-View ServiceInstance
|
|
$evcMask = $si.Capability.SupportedEvcMode | where-object {$_.key -eq $EvcMode} | select -ExpandProperty FeatureMask
|
|
|
|
foreach ($v in $evVM) {
|
|
|
|
if (($v.HardwareVersion -ge 'vmx-14' -and $v.PowerState -eq 'PoweredOff') -or ($v.Version -ge 'v14' -and $v.PowerState -eq 'PoweredOff')) {
|
|
|
|
$v.ExtensionData.ApplyEvcModeVM_Task($evcMask, $true) | Out-Null
|
|
$updateVM += $v.Name
|
|
|
|
}
|
|
else {Write-Warning $v.Name + " does not have the minimum requirements of being Hardware Version 14 and powered off."}
|
|
|
|
}
|
|
|
|
if ($updateVM) {
|
|
|
|
Start-Sleep -Seconds 2
|
|
Get-VMEvcMode -Name $updateVM
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|