Eu tentei a sua função e também obtive um resultado vazio.
O problema é o que você faz com seu parâmetro de software: você não precisa convertê-lo para a variável $soft
, você pode usar diretamente o $software
-Variable com o asterisco na cláusula Where-Object. Apenas use:
Get-ItemProperty | Where-Object {$_.DisplayName -like "*$software*"} | Select-Object DisplayName,UninstallString
Isso funciona no meu sistema, o curinga está funcionando bem também.
EDITAR:
Aqui está a função completa que funciona na minha máquina - a linha onde você converteu a variável $software
em $soft
está desativada porque você não precisa dela:
Function Get-Uninstallers {
param(
[parameter(mandatory=$true)][string]$compName,
[parameter(mandatory=$true)][string]$software
#$soft = ('"' + ("*" + $software + "*") + '"')
)
Invoke-Command -ComputerName $compname {
Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | '
Get-ItemProperty | Where-Object {$_.DisplayName -like "*$using:software*"} | Select-Object DisplayName,UninstallString
}
}
Quando eu uso a função, por exemplo,
Get-Uninstallers -compname my-pc -software VMWare
Eu recebo uma lista com todos os softwares onde o DisplayName contém " VMware ", e nada mais.