Merge branch 'vmware:master' into master

This commit is contained in:
desrosim232
2023-11-23 15:58:52 -05:00
committed by GitHub
4 changed files with 176 additions and 2 deletions

View File

@@ -3925,18 +3925,26 @@ function New-HVPool {
[boolean]$enableHTMLAccess = $false,
# DesktopPCoIPDisplaySettings
#desktopSpec.desktopSettings.logoffSettings.pcoipDisplaySettings.renderer3D
#desktopSpec.desktopSettings.DisplayProtocolSettings.pcoipDisplaySettings.renderer3D
[Parameter(Mandatory = $false,ParameterSetName = 'INSTANT_CLONE')]
[Parameter(Mandatory = $false,ParameterSetName = "LINKED_CLONE")]
[Parameter(Mandatory = $false,ParameterSetName = 'MANUAL')]
[ValidateSet('MANAGE_BY_VSPHERE_CLIENT', 'AUTOMATIC', 'SOFTWARE', 'HARDWARE', 'DISABLED')]
[string]$renderer3D = 'DISABLED',
#desktopSpec.desktopSettings.logoffSettings.pcoipDisplaySettings.enableGRIDvGPUs
#desktopSpec.desktopSettings.DisplayProtocolSettings.pcoipDisplaySettings.enableGRIDvGPUs
[Parameter(Mandatory = $false,ParameterSetName = "LINKED_CLONE")]
[Parameter(Mandatory = $false,ParameterSetName = 'MANUAL')]
[Parameter(Mandatory = $false,ParameterSetName = 'INSTANT_CLONE')]
[boolean]$enableGRIDvGPUs = $false,
#desktopSpec.desktopSettings.DisplayProtocolSettings.pcoipDisplaySettings.VGPUGridProfile
[Parameter(Mandatory = $false,ParameterSetName = "LINKED_CLONE")]
# [Parameter(Mandatory = $false,ParameterSetName = 'MANUAL')]
[Parameter(Mandatory = $false,ParameterSetName = 'INSTANT_CLONE')]
[ValidateSet('grid_m10-0b','grid_m10-1b','grid_m10-2b','grid_m10-0q','grid_m10-1q','grid_m10-2q','grid_m10-4q','grid_m10-8q')]
[string]$VGPUGridProfile = $null,
#desktopSpec.desktopSettings.logoffSettings.pcoipDisplaySettings.vRamSizeMB
[Parameter(Mandatory = $false,ParameterSetName = "LINKED_CLONE")]
[ValidateRange(64,512)]
@@ -4010,6 +4018,12 @@ function New-HVPool {
[string]
$SnapshotVM,
#desktopSpec.automatedDesktopSpec.virtualCenterProvisioningSettings.addVirtualTPM if INSTANT_CLONE, ???
# [Parameter(Mandatory = $true,ParameterSetName = "LINKED_CLONE")]
[Parameter(Mandatory = $false,ParameterSetName = 'INSTANT_CLONE')]
[ValidateNotNullOrEmpty()]
[boolean]$addVirtualTPM = $false,
#desktopSpec.automatedDesktopSpec.virtualCenterProvisioningSettings.virtualCenterProvisioningData.vmFolder if LINKED_CLONE, INSTANT_CLONE, FULL_CLONE
[Parameter(Mandatory = $true,ParameterSetName = "LINKED_CLONE")]
[Parameter(Mandatory = $true,ParameterSetName = 'INSTANT_CLONE')]
@@ -4515,6 +4529,9 @@ function New-HVPool {
if ($null -ne $jsonObject.AutomatedDesktopSpec.VirtualCenterProvisioningSettings.VirtualCenterProvisioningData.Snapshot) {
$snapshotVM = $jsonObject.AutomatedDesktopSpec.VirtualCenterProvisioningSettings.VirtualCenterProvisioningData.Snapshot
}
if ($null -ne $jsonObject.AutomatedDesktopSpec.VirtualCenterProvisioningSettings.addVirtualTPM) {
$addVirtualTPM = $jsonObject.AutomatedDesktopSpec.VirtualCenterProvisioningSettings.addVirtualTPM
}
$dataCenter = $jsonObject.AutomatedDesktopSpec.VirtualCenterProvisioningSettings.VirtualCenterProvisioningData.dataCenter
$vmFolder = $jsonObject.AutomatedDesktopSpec.VirtualCenterProvisioningSettings.VirtualCenterProvisioningData.VmFolder
$hostOrCluster = $jsonObject.AutomatedDesktopSpec.VirtualCenterProvisioningSettings.VirtualCenterProvisioningData.HostOrCluster
@@ -4658,6 +4675,7 @@ function New-HVPool {
if ($null -ne $jsonObject.DesktopSettings.displayProtocolSettings.pcoipDisplaySettings) {
$renderer3D = $jsonObject.DesktopSettings.displayProtocolSettings.pcoipDisplaySettings.renderer3D
$enableGRIDvGPUs = $jsonObject.DesktopSettings.displayProtocolSettings.pcoipDisplaySettings.enableGRIDvGPUs
$VGPUGridProfile = $jsonObject.DesktopSettings.DisplayProtocolSettings.PcoipDisplaySettings.VGPUGridProfile
if ($jsonObject.DesktopSettings.displayProtocolSettings.pcoipDisplaySettings.vRamSizeMB) {
$vRamSizeMB = $jsonObject.DesktopSettings.displayProtocolSettings.pcoipDisplaySettings.vRamSizeMB
}
@@ -4907,6 +4925,7 @@ function New-HVPool {
$desktopSpecObj.AutomatedDesktopSpec.VirtualCenterProvisioningSettings.VirtualCenterProvisioningData = $desktopVirtualCenterProvisioningData
$desktopSpecObj.AutomatedDesktopSpec.VirtualCenterProvisioningSettings.VirtualCenterStorageSettings = $desktopVirtualCenterStorageSettings
$desktopSpecObj.AutomatedDesktopSpec.VirtualCenterProvisioningSettings.VirtualCenterNetworkingSettings = $DesktopVirtualCenterNetworkingSettings
$desktopSpecObj.AutomatedDesktopSpec.VirtualCenterProvisioningSettings.AddVirtualTPM = $AddVirtualTPM
$desktopSpecObj.AutomatedDesktopSpec.CustomizationSettings = $desktopCustomizationSettings
$desktopSpecObj.AutomatedDesktopSpec.ProvisioningType = $provisioningType
$desktopSpecObj.AutomatedDesktopSpec.VirtualCenter = $virtualCenterID
@@ -4915,6 +4934,7 @@ function New-HVPool {
$DesktopVirtualCenterProvisioningSettings.VirtualCenterProvisioningData = $desktopVirtualCenterProvisioningData
$DesktopVirtualCenterProvisioningSettings.VirtualCenterStorageSettings = $desktopVirtualCenterStorageSettings
$DesktopVirtualCenterProvisioningSettings.VirtualCenterNetworkingSettings = $DesktopVirtualCenterNetworkingSettings
$DesktopVirtualCenterProvisioningSettings.AddVirtualTPM = $AddVirtualTPM
$DesktopAutomatedDesktopSpec = New-Object VMware.Hv.DesktopAutomatedDesktopSpec
$DesktopAutomatedDesktopSpec.ProvisioningType = $provisioningType
@@ -4981,6 +5001,16 @@ function New-HVPool {
$desktopPCoIPDisplaySettings.setRenderer3D($renderer3D)
#setEnableGRIDvGPUs is not exists, because this property cannot be updated.
$desktopPCoIPDisplaySettings.getDataObject().EnableGRIDvGPUs = $enableGRIDvGPUs
if ($enableGRIDvGPUs -eq $true -and $renderer3D -ne 'MANAGE_BY_VSPHERE_CLIENT' -and $InstantClone -eq $true) {
Write-Error "Enabling GRID support requires that 3D rendering be managed by the vSphere client"
break
}
if ($enableGRIDvGPUs -eq $true -and [string]::IsNullOrEmpty($VGPUGridProfile) -eq $true -and $InstantClone -ne $true) {
Write-Error "Enabling GRID support for Instant clones, this requires a specified VGPUGridProfile"
break
} else {
$desktopPCoIPDisplaySettings.getDataObject().VGPUGridProfile = $VGPUGridProfile
}
$desktopPCoIPDisplaySettings.setVRamSizeMB($vRamSizeMB)
$desktopPCoIPDisplaySettings.setMaxNumberOfMonitors($maxNumberOfMonitors)
$desktopPCoIPDisplaySettings.setMaxResolutionOfAnyOneMonitor($maxResolutionOfAnyOneMonitor)
@@ -6569,6 +6599,16 @@ function Start-HVFarm {
How frequently to repeat maintenance, expressed as a multiple of the maintenance period. e.g. Every 2 weeks.
This property has a default value of 1. This property has values 1-100.
.PARAMETER NumCPU
Number of CPU of the Vm Instances
.PARAMETER Ram
Ram of the Vm Instances
Units in MB for Ram parameter
.PARAMETER CoresPerSocket
CoresPerSocket of the Vm Instances
.PARAMETER HvServer
Reference to Horizon View Server to query the data from. If the value is not passed or null then first element from global:DefaultHVServers would be considered in-place of hvServer.
@@ -6673,6 +6713,21 @@ function Start-HVFarm {
[ValidateRange(1, 100)]
[int]$EveryInt = 1,
[Parameter(Mandatory = $false)]
[ValidateRange(1,[Int]::MaxValue)]
[int]
$NumCPU = 4,
[Parameter(Mandatory = $false)]
[ValidateRange(1,[Int]::MaxValue)]
[int]
$Ram = 16384,
[Parameter(Mandatory = $false)]
[ValidateRange(1,[Int]::MaxValue)]
[int]
$CoresPerSocket = 1,
[Parameter(Mandatory = $false)]
$HvServer = $null
)
@@ -6820,6 +6875,13 @@ function Start-HVFarm {
break
}
}
#set ComputeProfile in a SCHEDULEMAINTENANCE
$spec.ComputeProfile = New-Object VMware.Hv.FarmComputeProfileSpec
$spec.ComputeProfile.NumCPU = $NumCPU
$spec.ComputeProfile.Ram = $Ram
$spec.ComputeProfile.CoresPerSocket = $CoresPerSocket
# call scheduleMaintenance service on farm
if (!$confirmFlag -OR $pscmdlet.ShouldProcess($farmList.$item)) {
$farm_service_helper.Farm_ScheduleMaintenance($services, $item, $spec)

View File

@@ -0,0 +1,51 @@
param (
[Parameter(Mandatory=$true)]
[VMware.VimAutomation.ViCore.Types.V1.Inventory.Cluster[]] $cluster,
[Parameter(Mandatory=$true)]
[string] $smtp,
[Parameter(Mandatory=$true)]
[string] $email)
$vms = Get-VM -Location $cluster
$snapshots = @()
foreach ($vm in $vms) {
$snapshots += Get-Snapshot -VM $vm
}
$header = @"
<style>
table {
font-size: 12px;
border: 0px;
font-family: Arial, Helvetica, sans-serif;
}
td {
padding: 4px;
margin: 0px;
border: 0;
}
th {
background: #395870;
background: linear-gradient(#49708f, #293f50);
color: #fff;
font-size: 11px;
text-transform: uppercase;
padding: 10px 15px;
vertical-align: middle;
}
tbody tr:nth-child(even) {
background: #f0f0f2;
}
</style>
"@
$snapshots | select Name,VM,Created,@{Name="Size";Expression={[math]::Round($_.SizeMB,3)}},IsCurrent | `
ConvertTo-Html -head $header | Out-File "SnapshotReport.html"
Send-MailMessage -from "Snapshot Reports <noreply@vmware.com>" `
-to $email `
-subject "Snapshot Report" `
-body "Cluster snapshot report" `
-Attachment "SnapshotReport.html" `
-smtpServer $smtp

View File

@@ -0,0 +1,17 @@
param (
[Parameter(Mandatory=$true)]
[VMware.VimAutomation.ViCore.Types.V1.Inventory.Cluster] $cluster,
[DateTime] $date)
if ($null -eq $date) {
$date = (Get-Date).AddDays(-7)
}
$vms = Get-VM -Location $cluster
foreach ($vm in $vms) {
$snaphostsToBeRemoved = Get-Snapshot -VM $vm | where {$_.Created -lt $date}
if ($null -ne $snaphostsToBeRemoved) {
Write-Host "Removing snapshots: '$snaphostsToBeRemoved' of VM: '$vm'"
Remove-Snapshot $snaphostsToBeRemoved -Confirm:$false
}
}

44
PowerActions/Git Sync.ps1 Normal file
View File

@@ -0,0 +1,44 @@
#Intall git
tdnf install -y git
#Clone the repo
git clone -n --depth=1 --filter=tree:0 https://github.com/vmware/PowerCLI-Example-Scripts.git
cd PowerCLI-Example-Scripts
git sparse-checkout set --no-cone PowerActions
git checkout
cd PowerActions
#Select the content library in which you want to store the scirpts from the repo
$contentLibraryName = 'Power Actions'
$contentLibrary = Get-ContentLibrary $contentLibraryName
#Get all the files that we have cloned from the repo
$files = Get-ChildItem -Path . -File
foreach ($file in $files) {
$name = $file.BaseName
#Check if the item for this file already exists in the content library
$item = Get-ContentLibraryItem -Name $name -ContentLibrary $contentLibrary -ErrorAction SilentlyContinue
if ($item) {
#If the item exists, check if it is up to date
#Create a folder to store the current content library item
if (-not (Test-Path -Path ./cl_versions -PathType Container))
{
New-Item -Path ./cl_versions -ItemType Directory
}
#Download the item from the content library
$clFile = Export-ContentLibraryItem -ContentLibraryItem $item -Destination ((Get-Location).Path + "/cl_version") -Force
#Compare if it's the same as the file we have downloaded from the repo
$compResult = Compare-Object -ReferenceObject (Get-Content $file.FullName) -DifferenceObject (Get-Content ($clFile.FullName+"/"+$file.Name))
if ($compResult) {
#If the item is not up to date, update it
Write-Host "Updating $name"
Set-ContentLibraryItem -ContentLibraryItem $item -Files $file.FullName
} else {
Write-Host "$name is up to date"
}
} else {
#If the item does not exist, create it
New-ContentLibraryItem -Name $name -Files $file.FullName -ContentLibrary $contentLibrary
}
}