Powershell Only Add to Array if it doesn't exist Powershell Only Add to Array if it doesn't exist arrays arrays

Powershell Only Add to Array if it doesn't exist


To fix your code, try -notcontains or at least WRAP your contains-test in parantheses. Atm. your test reads:

If "NOT array"(if array doens't exist) contains word.

This makes no sense. What you want is:

If array does not contain word..

That's written like this:

If (-not ($IncorrectArray -contains $Word))

-notcontains is even better, as @dugas suggested.


The first time around, you evaluate -not against an empty array, which returns true, which evaluates to: ($true -contains 'AnyNonEmptyString') which is true, so it adds to the array. The second time around, you evaluate -not against a non-empty array, which returns false, which evaluates to: ($false -contains 'AnyNonEmptyString') which is false, so it doesn't add to the array.

Try breaking your conditions down to see the problem:

$IncorrectArray = @()$x = (-not $IncorrectArray) # Returns trueWrite-Host "X is $x"$x -contains 'hello' # Returns true

then add an element to the array:

$IncorrectArray += 'hello'$x = (-not $IncorrectArray) # Returns false    Write-Host "X is $x"$x -contains 'hello' # Returns false

See the problem? Your current syntax does not express the logic you desire.

You can use the notcontains operator:

Clear-Host$Words = @('Hello', 'World', 'Hello')# This will work$IncorrectArray = @()ForEach ($Word in $Words){  If ($IncorrectArray -notcontains $Word)  {    $IncorrectArray += $Word  }}