Pues otra vez me veo en garras de proveedores sin capacidad, de comerciales sin voluntad, y de lusers que no saben hablar y caminar a la vez.
Vuelve el BOFH.
La nVidia no es sana
Resulta que tengo una instalación que voy a decomisar, pero tengo unos usuarios que se resisten.
También resulta que tengo unos comerciales, comerciales de proveedores, que están mucho más interesados en vender que en otra cosa.
Tengo una infraestructura de VDI que está sujeta con puntales, rodeada de sacos de arena y con señales de riesgo NBQ, pero que aún da soporte con su antaño poderosa nVidia Grid K2, desde VMware a Citrix XenServer a Windows 2016 para las cosas de pintar de los pintamonas.
Estaba muy bien en su día, una infraestructura potente, un montaje bastante majo, todo integrado en VDI… VDI cítrico para lusers con mac y pretensiones.
Pues resulta que, gracias a la migración que estoy haciendo, consolidar absolutamente todos los equipos en nube, Azure, y Microsoft 365, sobre plataforma PC totalmente estandarizada, pues esta herramienta queda como elemento legacy fuera de soporte.
Y como tal, su licenciamiento suspendido.
Se masca la tragedia
La parte de VMware no me preocupa. Queda licencia.
La de Citrix, y de Microsoft, lo mismo. Licenciados.
Con los aplicativos de diseño, no me preocupo. Son hotseat por lo que no hay problema por ahí.
Pero ¿y la nVidia Grid?
Tengo a una flota de comerciales que se niegan a renovar una licencia si no cambio la tarjetería de los servidores. Cosa que no voy a hacer, puesto que voy a apagarlo en un par de meses.
Si no me dan lo que quiero por las buenas, recurriré a cosas más expeditivas, perdiendo ellos, y no perdiendo yo, por lo que hace 4 meses, y justo hasta hace unos días que di de baja esta infraestructura y migrados sus lusers (y retirados unos cuantos mac del mundo).
Y por su puesto, como siempre, disclaimer, pliego de descargo o como lo queramos llamar.
Aviso: Este procedimiento lo libero con fines pedagógicos y de prueba. No es legítimo en entornos de producción.
Aviso:
Aviso: Este procedimiento funciona con las máquinas que usan el software de nVidia Grid en Windows.
Aviso:
Aviso: Usar con precaución y bajo vuestra propia responsabilidad.
Por razones obvias, no voy a poner fotos ni cosas.
Procedimiento
Pues resulta que investigando un poquito, he encontrado esto https://github.com/KrutavShah/vGPU_LicenseBypass lo que me permite meter la nVidia Grid en modo prueba eterno, o casi.
Basta con ejecutar esto con permisos de administrador:
<#
.SYNOPSIS
Set vGPU VM instance into eternal trial.
.DESCRIPTION
Configures a Windows vGPU client for a 24-hour trial period and automatic daily driver restarts.
.EXAMPLE
Set-vGPUEternalTrial -RestartTime 2AM
.EXAMPLE
Set-vGPUEternalTrial -RestartTime 3AM -Filter '*GRID*'
.INPUTS
None.
.OUTPUTS
None
.NOTES
None
.FUNCTIONALITY
Adds two registry keys and a scheduled task.
#>
[CmdletBinding()]
[OutputType([String])]
Param (
# Restart time
[Parameter(Mandatory = $false,
HelpMessage = 'Time of day to auto-restart the driver, defaults to 3:00am local')]
[Alias('Time')]
[ValidateNotNullOrEmpty()]
[string]
$RestartTime = '3AM',
# Device friendly name filter.
[Parameter(Mandatory = $false,
HelpMessage = "Filter for FriendlyName of devices to restart, defaults to 'nVidia*'")]
[ValidateNotNullOrEmpty()]
[String]
$Filter = 'nVidia*'
)
process {
$RegistryPath = 'HKLM:\SOFTWARE\NVIDIA Corporation\Global\GridLicensing'
$RegistryProps = @(
@{
Name = 'UnlicensedUnrestrictedStateTimeout'
PropertyType = 'DWORD'
Value = 0x5a0
}
@{
Name = 'UnlicensedRestricted1StateTimeout'
PropertyType = 'DWORD'
Value = 0x5a0
}
@{
Name = 'UnlicensedRestricted2StateTimeout'
PropertyType = 'DWORD'
Value = 0x5a0
}
@{
Name = 'DisableExpirationPopups'
PropertyType = 'DWORD'
Value = 0x1
}
@{
Name = 'DisableSpecificPopups'
PropertyType = 'DWORD'
Value = 0x1
}
)
$taskName = 'Restart vGPU Driver'
$taskDescr = 'Restart nVidia vGPU device drivers daily at {0}' -f $RestartTime
$taskScript = ( '& { Get-PnpDevice -PresentOnly -Class Display -FriendlyName ' + ('"{0}"' -f $Filter) + ' | Foreach-Object -Process { Disable-PnpDevice -InstanceId $_.InstanceId -Confirm:$false; Start-Sleep -Seconds 7; Enable-PnpDevice -InstanceId $_.InstanceId -Confirm:$false} }')
try {
Write-Output -InputObject ('Setting unlicensed state timeout registry properties to 24 hours')
# Make sure the registry key exists
(New-Item -ItemType Directory -Path $RegistryPath -Force -ErrorAction SilentlyContinue | Out-Null)
# Add/overwrite the properties
foreach ($RegistryProp in $RegistryProps) { New-ItemProperty -Path $RegistryPath @RegistryProp -Force -InformationAction SilentlyContinue }
# check for existing task and remove if present
Write-Output -InputObject ('Checking for existing scheduled task and removing if present')
if (Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue) {
Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
Write-Output -InputObject ('Found and unregistered existing scheduled task')
}
# Create daily restart scheduled task
Write-Output -InputObject ('Adding new scheduled task "{0}", daily at {1}' -f $taskName, $RestartTime)
$taskPrincipal = New-ScheduledTaskPrincipal -UserId 'SYSTEM' -LogonType 'ServiceAccount' -RunLevel 'Highest' -ProcessTokenSidType 'Default'
$taskSettings = New-ScheduledTaskSettingsSet # don't need any specifics here
$taskTrigger = New-ScheduledTaskTrigger -Daily -At $RestartTime
$taskAction = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument ('-WindowStyle Hidden -NonInteractive -NoProfile -Command "{0}" ' -f $taskScript)
$task = Register-ScheduledTask -TaskName $taskName -Action $taskAction -Trigger $taskTrigger -Description $taskDescr -Principal $taskPrincipal -Settings $taskSettings
Write-Output -InputObject ('Registered scheduled task "{0}"' -f $task.TaskName)
} catch {
throw $PSItem
} finally {
Write-Output -InputObject ('Done.')
}
}
Y funcionando. No pienso actualizar.
YoVirtualizador en formato podcast. Ahora también en Sospechosos Habituales: https://feedpress.me/sospechososhabituales
Y sin más, os dejo los enlaces:
Web: https://www.yovirtualizador.com
Grupo de telegram: https://t.me/grupovirtualizador
Podcast: https://www.ivoox.com/podcast-yovirtualizador_fg_f1563806_filtro_1.xml y YouTube https://www.youtube.com/playlist?list=PLrnymu_aoVL6nk1-FcZ220P65tyHV6djV Canal de YouTube: https://www.youtube.com/channel/UC0R70cABSsmC6TFyXth0qPg
Enlaces afiliados:
Amazon: https://amzn.to/3gX3HmK
Asociación Podcast: https://www.asociacionpodcast.es/registrarse/socio/?coupon=SB6A70
iVoox Plus: https://www.ivoox.vip/plus?affiliate-code=323d07d8569f044513746a1be4724b40
iVoox Premium: https://www.ivoox.vip/premium?affiliate-code=03d0efe2be3b55e4cd6df6dc3f6a6dbc
iVoox Premium anual: https://www.ivoox.vip/premium?affiliate-code=9feb8e44ecb4c97148e227100af9223b