PowerShell: funciona con varios puntos decimales (es decir, versiones de controlador)

-1

Estoy tratando de hacer un script para actualizar las máquinas que usan controladores antiguos.

Puedo obtener los dispositivos que quiero apuntar de esta manera:Get-WmiObject win32_pnpsigneddriver |where {$_.DeviceID -match "VEN_8086&DEV_0083"}

Ahora la versión actual del controlador para esto es 17.0.2 pero la máquina en la que estoy probando tiene instalada la versión 14.1.1.3.

Quiero que mi línea de código use algo como esto:

Get-WmiObject win32_pnpsigneddriver |
where {$_.DeviceID -match "VEN_8086&DEV_0083" -AND $_.DriverVersion -le 17.0.2.0}

eso falla, por supuesto, ya que no puede tener dos puntos decimales en un número. Si cambio mi código para que sea: Get-WmiObject win32_pnpsigneddriver |where {$_.DeviceID -match "VEN_8086&DEV_0083" -AND $_.DriverVersion -le 17.0}entonces obtengo la respuesta que quiero pero, por supuesto, cuando la versión 17.0.9.9 está fuera y mi máquina de destino está ejecutando 17.0.2.0, el controlador no se actualizará.

¿Alguna idea sobre cómo puedo comparar números como este?

Kieran Walsh
fuente
Que has intentado Buscar en Google compare version numbers powershellme dio cupfighter.net/2009/06/powershell-comparing-version-numbers como el mayor éxito que sugiere usar el tipo incorporado de Powershell [version]. ¿Eso no te funciona?
un CVn
1
Probé justo lo que publiqué anteriormente, y también busqué en Google comparing numbers with multiple decimal places, pero eso no dio resultados positivos. Gracias por el enlace: no he oído hablar de esa opción de comparación antes.
Kieran Walsh

Respuestas:

3

También puede escribir fuertemente a [versión]. (Publicación de Shay Levy)

Get-WmiObject win32_pnpsigneddriver | where {$_.DeviceID -match "VEN_8086&DEV_0083" -and [version]$_.DriverVersion -lt [version]'1.7.0.2'}
Laerte Junior
fuente