Что я хочу сделать?
Я запускаю функцию Get-WinEvent
с -FilterHashTable
, предоставляя массив интересных идентификаторов событий для аргумента ID
.
$IDS = 4720,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,4735,4737,4738,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4767,4781
Get-WinEvent -ComputerName DC -FilterHashTable @{ LogName='Security'; ID=$IDS; }
Это вернулоошибка:
# Get-WinEvent : No events were found that match the specified selection criteria.
(и я знаю, что совпадающие события действительно существуют)
Я заметил, что при меньших массивах функция возвращала положительные результаты, и поэтому с небольшими попытками я 'мы утверждали это:
- прямой вызов с подсчетом массива
-le 23
работает правильно; - прямой вызов с подсчетом массива
-gt 23
приводит к ошибке.
На первый взгляд правильное решение ...
Я предположил, что 23 - это недокументированный предел аргументов, которые могут обрабатывать базовые механизмы Get-WinEvent
, а затем решил разделить вызов на несколько вызовов с меньшим массивом.:
$MaxCount = 23
For ( $i = 0; $i -lt $IDS.count; $i += $MaxCount ) {
$IDSChunks += ,@( $IDS[ $i..($i+$MaxCount-1) ] )
}
Таким образом, мы разбили массив на два, каждый насчитывает -le 23
элементов:
$IDSChunks | %{ $_ -join "," }
4720,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,4735,4737,4738,4740,4741,4742,4743,4744,4745
4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4767,4781
Проверено вручную, и это сработало, как и ожидалось:
Get-WinEvent -ComputerName DC -FilterHashTable @{ LogName='Security'; ID=$IDSChunks[0]; }
Get-WinEvent -ComputerName DC -FilterHashTable @{ LogName='Security'; ID=$IDSChunks[1]; }
Но ...
Это, однако, не:
$IDSChunks | %{ Get-WinEvent -ComputerName DC -FilterHashTable @{ LogName='Security'; ID=$_; } }
И результаты с уже знакомой ошибкой:
# Get-WinEvent : No events were found that match the specified selection criteria.
# Get-WinEvent : No events were found that match the specified selection criteria.
Почему?
Что я делаю не так?