where -in wildcards

This topic contains 4 replies, has 3 voices, and was last updated by  John Curtiss 2 years ago.

  • Author
  • #43754

    John Curtiss

    what's a better way to say

    | where {$_.property -like "*this*" -or $_.property -like "*that*" -or $_.property -like "*theOther*}

    is "where property -in (....)" supposed to work with wildcards?

  • #43768

    Don Jones

    -in does not work with wildcards, no, nor does it do what I think you're thinking. -in is a logical opposite of -contains, and it checks for an object's membership in a collection. It isn't like the T-SQL "IN" clause. There is no syntax for "-in (...)" in PowerShell.

    You could do this:

    $possibles = @('this','that','theOther')
    where {$_.property -in $possibles}
  • #43770

    John Curtiss

    I think I need the wildcards. The value of property is going to be "something this etc" or "something that etc"

  • #43774

    Dave Wyatt

    Personally, I'd use the -match operator here, since regex has an "or" operator built-in:

    $something | Where { $_.property -match 'this|that|theother' }
  • #43776

    John Curtiss

    thanks Dave, match seems to be working.

    my script is looking for expiring certificates from the Local Machine's Personal store, Trusted Root CA store, and Intermediate CA store, but I really only care about certificates that were issued by certain (internal) entities– mainly because there are some really old, expired trusted root certificates that I think maybe the OS depends on, so I don't want to delete them. but the format of the certificate "subject" (aka the 'property' in my original question) is not consistent. most of the time it's "CN=Some CA,OU=Some Department,O=That Company", etc., but occasionally it's an email address someguy@theother.com.

You must be logged in to reply to this topic.