Вы не указываете оператор между двумя вашими условиями, вместо этого у вас есть запятая.
Измените свой код на это:
Get-XASession | Select ServerName, State, Accountname, Browsername | where {$_.State -eq "Disconnected" -and $_.Duration -eq "4 hr"}
Вы можете увидеть это в игре с этим кодом:
1..10 | Where-Object {$_ -eq 2, $_ -eq 3}
против
1..10 | Where-Object {$_ -eq 2 -or $_ -eq 3}
Я ответил на ваш вопрос прямо выше. Вот кое-что, что вы, возможно, захотите попробовать, однако, должно (надеюсь) вернуть все сеансы старше 4 часов (у меня нет доступа к этим командлетам, так что это лучшее предположение)
$lowerThreshold = [datetime]::Now.AddHours(-4)
$session = Get-XASession | Select ServerName, State, Accountname, Browsername | where {$_.State -eq "Disconnected" -and $_.LogOnTime -le $lowerThreshold}`