powershell - Filter a few computers before exporting from pipeline -


i need filter out 4 machines prior exporting csv file. have no clue how filter them out. tried if clause produced nothing. please help.

$old = (get-date).adddays(-90) # modify -90 match threshold  $oldcomputers = get-adcomputer -searchbase "ou=workstations,dc=corporate,dc=local" -searchscope 2 -filter { passwordlastset -le $old } -properties * $oldcomputers  if ($_.name -notlike "1919dd" -or $_.name -notlike "1919smaheshware" -or $_.name -notlike "1919ietest" -or $_.name -notlike "1920bpasceritb") {     export-csv c:\temp\over90daysmachines.csv -notypeinformation -force -append } 

for 1 thing, able use current object variable ($_) need pipeline context. putting if statement after echoing variable doesn't automagically feed echoed value(s) if statement. need change this:

$oldcomputers  if ($_.name -notlike "1919dd" -or ...) {     export-csv c:\temp\over90daysmachines.csv -notypeinformation -force -append } 

into this:

$oldcomputers | where-object {     $_.name -notlike "1919dd" -or ... } | export-csv c:\temp\over90daysmachines.csv -notype -force 

however, change filter won't work correctly, because connected -notlike clauses via -or when should have used -and. meant process objects if name doesn't match of given values. logical expression evaluate $false name have match all of reference value at same time. isn't possible, expression evaluates $true.

example:

assume have variable $v should not equal either a, b, or c. applying logic, expression in powershell:

($v -notlike 'a') -or ($v -notlike 'b') -or ($v -notlike 'c') 

if $v takes instance value a expression becomes

  ('a' -notlike 'a') -or ('a' -notlike 'b') -or ('a' -notlike 'c') ↔ ($false) -or ($true) -or ($true) ↔ $true

to check if give value equals neither of reference values need connect clauses via -and:

  ('a' -notlike 'a') -and ('a' -notlike 'b') -and ('a' -notlike 'c') ↔ ($false) -and ($true) -and ($true) ↔ $false
$oldcomputers | where-object {     $_.name -notlike "1919dd" -and     $_.name -notlike "1919smaheshware" -and     $_.name -notlike "1919ietest" -and     $_.name -notlike "1920bpasceritb" } | export-csv c:\temp\over90daysmachines.csv -notype -force 

note btw, -notlike operator behaves -ne operator when reference string doesn't contain wildcard characters. if you're not doing fuzzy matches anyway simplify expression checking if given name (not) found in array of names instead of doing multiple checks (in)equality:

$excludes = '1919dd', '1919smaheshware', '1919ietest', '1920bpasceritb' $oldcomputers | where-object {     $excludes -notcontains $_.name } | export-csv c:\temp\over90daysmachines.csv -notype -force 

another option regular expression (non-)match:

$oldcomputers | where-object {     $_.name -notmatch '^1919dd|1919smaheshware|1919ietest|1920bpasceritb$' } | export-csv c:\temp\over90daysmachines.csv -notype -force 

Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

css - Make div keyboard-scrollable in jQuery Mobile? -

ruby on rails - Seeing duplicate requests handled with Unicorn -