Getting Software Title and Product ID from remote PC using WMI w/ variable in PS

This topic contains 1 reply, has 2 voices, and was last updated by Profile photo of Richard Siddaway Richard Siddaway 1 year, 4 months ago.

  • Author
    Posts
  • #31890
    Profile photo of Andrew Powell
    Andrew Powell
    Participant

    How do you wrap a variable into a search query and have the variable be a wildcard?
    $PCName = Read-Host -Prompt "Enter PC Name: "
    $searchterm = Read-Host -prompt "Enter search term: "
    Invoke-Command -Computername $PCName {Get-WmiObject -Class Win32_Product | Where-Object "name -like '%$searchterm%'" | FT IdentifyingNumber, Name, LocalPackage}

    I've tried a number of things, but nothing is working.

  • #31891
    Profile photo of Richard Siddaway
    Richard Siddaway
    Moderator

    Couple of issues here.

    Number 1 don't use read-host for input. Create a function and make the computer and filter parameters

    More importantly you're mixing wildcards
    % is the wildcard when you're using WQL or a WMI filter
    * is the wildcard when you're using strings in where-object

    Your filter shouldn't be in quotes so looks like this

    Where-Object name -like "*$searchterm*"

    With WMI you can filter at the same time as getting the data – much faster so your code should look like this

    $computername = $env:COMPUTERNAME
    $filter = 'Live'
    $scriptblock = {
    param($filter)
    Get-WmiObject -Class Win32_product -Filter "Name LIKE '%$filter%'" |
    Select IdentifyingNumber, Name, LocalPackage }
    Invoke-Command -ComputerName $computername -ScriptBlock $scriptblock -ArgumentList $filter

    Use the -Argumentlist parameter on Invoke-command to pass the filter to Get-WmiObject.

    You use the computrename parameter on Get-WmiObject or better still Get-CimInstance which would simplify the code

    Get-WmiObject -Class Win32_Product -ComputerName $computername -Filter "Name LIKE '%$filter%'" | Select IdentifyingNumber, Name, LocalPackage

    Get-CimInstance -ClassName Win32_Product -ComputerName $computername -Filter "Name LIKE '%$filter%'" | Select IdentifyingNumber, Name, LocalPackage

You must be logged in to reply to this topic.