Actualmente soy demasiado estúpido para resolver un problema.

Quiero que una consulta IF busque en toda la matriz y luego decida si se ha cumplido la condición.
En el ejemplo, $ array [0] ya cumple la condición ... que es demasiado pronto porque $ arry [1 ...] podría cumplir la condición. Actualmente estoy usando una consulta foreach que establece la variable $ match en 1 si se encuentra 13.2. * En la matriz.
Pero de alguna manera esto me parece estúpido y debe funcionar más fácil, ¿verdad?

El valor de $ patrón es solo un ejemplo.
write-host es, por supuesto, solo presentarlo de manera simple.

Esto no funcionará:

$Regpath="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
$Pattern="*SQL*Server*"  
$array=Get-ChildItem -Path $Regpath | Get-ItemProperty | Where-Object { $_.Displayname -like $Pattern }

PS C:\> $array.displayversion  

13.0.3225.4 
13.2.5026.0

PS C:\> if ($array.displayversion -notlike "*13.2*") {write-host "Install msi File with Version 13.2.5026.0"}  
Install msi File with Version 13.2.5026.0

El bucle Foreach en funcionamiento con la consulta If:

$match=0  
foreach ($Search in $array.displayversion) 
{   if ($Search -like "*13.2.*") { $match=1}} 
if ($match -ne "1") 
{ write-host "Install msi File with Version 13.2.5026.0" }
0
Daniel4711 13 mar. 2021 a las 17:23

2 respuestas

La mejor respuesta

Creo que este es el comportamiento que quieres:

if ( -not ($array.displayversion -like "*13.2*") ) {
  write-host "Install msi File with Version 13.2.5026.0"}  
1
js2010 13 mar. 2021 a las 21:22

Puede extender el Where-Object en la tubería para tratar de encontrar la versión que busca. Si la variable $array no es un objeto [System.Management.Automation.PSCustomObject] al final de la consulta, no encontró nada.

$array = Get-ChildItem -Path $Regpath | Get-ItemProperty | Where-Object { (($_.Displayname -like $Pattern)-and ($_.DisplayVersion -eq "13.2.5026.0")) }

if ($array -isnot [System.Management.Automation.PSCustomObject]) { # If it was not able to meet the Where-Object criteria it will not create the corresponding object.
    #do something
}
1
alexzelaya 13 mar. 2021 a las 18:52