Es simple. Me gustaría detectar con código si mi proceso se ejecuta dentro de un contenedor de Windows . Hay ejemplos, pero todos son para contenedores basados en Linux.
Estoy buscando algo único y explícito para la ventana acoplable que pueda usarse para llegar a una conclusión segura sobre si un proceso se está ejecutando dentro de un sistema operativo Windows alojado en un contenedor y no de otra manera.
Mi idioma preferido es PowerShell, pero si alguien me indica cómo detectarlo, lo transfiero a PowerShell.
Los nuevos lectores pueden saltar a la parte marcada con "Actualizar" que contiene la solución aceptada.
Una verificación rápida con whoami en el símbolo del sistema mostró que la combinación de dominio y nombre de usuario que se usa dentro de un contenedor parece ser bastante inusual. Así que usé este código para resolver el problema:
function Test-IsInsideContainer { if( ($env:UserName -eq "ContainerAdministrator") -and ($env:UserDomain -eq "User Manager") ) { $true } else { $false } }Actualización: Otra opción es comprobar si existe el servicio cexecsvc . Una búsqueda en Internet no arrojó mucha información sobre este servicio, pero su nombre (Container Execution Agent) sugiere que solo existe dentro de los contenedores (que verifiqué con una prueba rápida en Win10 y un Docker-host Server2016). Entonces, tal vez este código cumpla con sus requisitos (soy un novato en Powershell):
function Test-IsInsideContainer { $foundService = Get-Service -Name cexecsvc -ErrorAction SilentlyContinue if( $foundService -eq $null ) { $false } else { $true } }Hay un valor de registro "ContainerType" en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control.
Asi que:
function Test-IsInsideContainer { $containerType = (Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control").ContainerType $containerType -ne $null }¿Funcionará a continuación? PS C:\> (Get-NetAdapter).Name -match "container" True