How do you chain 4 conditions together when you want either ONE set or the OTHER set of 2 condiitions to be true?
To be more precise I want to do:
If User is logged in AND Operating system version is Windows 10
OR
User is logged in AND LogonUI process is not running
Don't bother with the commands, they all work correctly when isolated, my issue is chaining them together.
For example I have :
if (
(Get-WmiObject –ComputerName $poste –Class Win32_ComputerSystem).UserName`
-and`
(Get-WmiObject -Computer $poste -Class Win32_OperatingSystem).Version -like "*10*"
)
{ echo do X }
which is working fine. I want to add within that same if
the other block of conditions. I tried this, but it's not working:
if (
(Get-WmiObject –ComputerName $poste –Class Win32_ComputerSystem).UserName`
-and`
(Get-WmiObject -Computer $poste -Class Win32_OperatingSystem).Version -like "*10*"`
-or`
(Get-WmiObject –ComputerName $poste –Class Win32_ComputerSystem).UserName`
-and -not`
(Get-Process -ErrorAction SilentlyContinue -ComputerName $poste -name logonui)
)
{ echo do X }
How do you chain multiple "blocks" like this? I know I could do two different IF, I had it working but isn't there a way to chain it all together in one IF? (the IF contains a lot of code and i don't want to duplicate it with two IF)
Put each set of conditions in parentheses:
if ( (A -and B) -or (C -and D) ) {
echo do X
}
If either the first or the second set of conditions must be true (but not both of them) use -xor
instead of -or
:
if ( (A -and B) -xor (C -and D) ) {
echo do X
}
Replace A, B, C, and D with the respective expressions.