Я пытаюсь создать команду Get-Winevent, используя переменные, но у меня возникают проблемы с переменными внутри "встроенных" команд, и я наткнулся на общеизвестную кирпичную стену. В последнем фрагменте кода, если я $EventIDQueryAdd и $EntryTypeQueryAdd команда запускается без проблем. Будем очень благодарны любой помощи! Спасибо!

$ArgLastMinutes = 60
$ArgLogName = "Security"
$ArgEntryType = 0 
$ArgEventID = 4625
if ($ArgEventID) { $EventIDQueryAdd="id=$ArgEventID;" }
if ($ArgEntryType) { $EntryTypeQueryAdd="level=$ArgEntryType;" }

write-host "argeventid "$ArgEventID # returns 4625
write-host "argentrytype "$ArgEntryType # returns 1
write-host "eventidqueryadd "$EventIDQueryAdd # returns id=4625; as it should
write-host "entrytypequeryadd "$EntryTypeQueryAdd # returns level=1; as it should
$LogEntries=Get-WinEvent -FilterHashtable @{logname="$ArgLogName"; $EventIDQueryAdd $EntryTypeQueryAdd StartTime=(Get-Date).AddMinutes(-$ArgLastMinutes) }

... <цикл через LogEntries> ...

1 ответ1

0

Вы пытаетесь создать хеш-таблицу как строку, это не сработает. Когда вы говорите, returns id=4625; as it should это не так, у вас есть строка, а не хеш-таблица. Для хеш-таблицы вы должны увидеть этот вывод:

Name    Value
----    -----
Id      4625

Попробуй это:

$ArgLastMinutes = 60
$ArgLogName = 'Security'
$ArgEntryType = 0 
$ArgEventID = 4625

# Create a new hashtable with two keys
$Filter = @{
    LogName = $ArgLogName
    StartTime = (Get-Date).AddMinutes(-$ArgLastMinutes)
}

if($ArgEventID)
{
    # Add new key-value pair to the existing hashtable
    $Filter += @{Id = $ArgEventID}
}

if($ArgEntryType)
{
    # Add new key-value pair to the existing hashtable
    $Filter += @{Level = $ArgEntryType}
}

# Pass the hashtable to the -FilterHashtable parameter
$LogEntries = Get-WinEvent -FilterHashtable $Filter

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .