Este es el script de Powershell que escribí:
$varCompList = Get-ADComputer -Filter "Name -like '*Name of Computers*'" -Properties OperatingSystemVersion | select DNSHostName, OperatingSystemVersion foreach ($System in $varCompList){ $Restult=switch ($System.OperatingSystemVersion){ "10.0 (20348)"{"Server 2022"} "10.0 (19042)"{"Server 2019 20H2"} "10.0 (18363)"{"Server 2019 1909"} "10.0 (17763)"{"Server 2019 1809"} "10.0 (14393)"{"Server 2016"} } } echo $varCompList Muestra todos los servidores como debería, pero la versión del sistema OperatingSystemVersion todavía se muestra como 10.0 (14393) .
¿Qué me estoy perdiendo?
Actualmente está asignando los nombres del sistema operativo asignados a una variable, pero nunca la usa para nada y nunca actualiza el objeto de entrada original.
En lugar de asignar el resultado a una variable, asígnelo a la propiedad OperatingSystemVersion en cada objeto:
foreach ($System in $varCompList){ $System.OperatingSystemVersion = switch ($System.OperatingSystemVersion){ "10.0 (20348)"{"Server 2022"} "10.0 (19042)"{"Server 2019 20H2"} "10.0 (18363)"{"Server 2019 1909"} "10.0 (17763)"{"Server 2019 1809"} "10.0 (14393)"{"Server 2016"} default { $_ } } } El caso default garantizará que conserve la cadena de versión original para cualquier computadora que no tenga instalada ninguna de las versiones enumeradas.