Где «И» не работает, как ожидалось - PullRequest
0 голосов
/ 30 апреля 2019

Я вытягиваю журналы событий Windows, используя Get-EventLog, и удаляю события журнала, которые я не хочу видеть, используя в качестве критериев источник и четность. Когда я анализирую с помощью где, значения соблюдаются. Например, если я делаю

$Events = Get-EventLog -ComputerName $computer -LogName Application 
$events | ft source, eventid

Я вижу следующее:

Source                            EventID
------                            -------
AutoEnrollment                         34

Если я это сделаю:

$events |
    ?{($_.Source -ne "AutoEnrollment" -and $_.EventID -ne 14)} |
    ft source, eventid

Результаты пустые, что меня озадачивает, потому что явно не совпадает четность. Я ожидаю, что если бы я оценивал против $_.eventid -ne 34, то результаты не показали бы это событие. Это сработало, когда я написал код для PowerShell 2 в 2012 году. Теперь в v5.1 он не может быть правильно оценен.

Что-то изменилось, о чем я должен знать, или я изначально облажался? Если я делаю это неправильно, любые предложения о том, как сказать «где событие не соответствует заданным критериям в качестве набора», так что source = autoenrollment и eventid = 34 будут отображаться, а события с source = autoenrollment и eventid = 14 - нет.

1 Ответ

0 голосов
/ 30 апреля 2019

Эти два сообщения от mjsqu ответили на вопрос:

es и предложение @ MathiasR.Jessen верно.NOT (A и B) - это не то же самое, что NOT (A) и NOT (B), это эквивалентно NOT (A) ИЛИ NOT (B).Почему это работало на PS2 странно.- mjsqu 21 час назад

Я бы переписал как

... |? {-not ($_.Source -eq "AutoEnrollment" -and $_.EventID -eq 14)}

... что, возможно, более читабельно для человека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...