2015-08-11 4 views
0

Следующий код должен пройти через хэш-таблицу и использовать ключи/значения для фильтрации один большой файл журнала на отдельные файлы для каждого ключа, используя значения для сравнения регулярных выражений:Недействительные данные при чтении хэш-таблицы

# get today's date, or override with user-entered date 
param($workingdate=(get-date).ToString("yyMMdd")) 

# set hash table for each profile 
$filters = @{ 
"desa" = "filtering string for desa"; 
"unpd" = "filtering string for unpd"; 
"dpad" = "filtering string for dpad"; 
"dsd" = "filtering string for dsd" 
} 
Foreach ($profilename in ("desa", "unpd", "dpad", "dsd") 
) 
{ 
#filter the main log and copy the filtered sub-set into individual profile logs 
Write-Host "Matching regex for $profilename is $filters[profilelname]" 
Get-Content "access-$workingdate.log" | Select-string -pattern $filters[$profilename] | Set-Content "$profilefilename-$workingdate.log" 
} 

результат дает мне выход на экран

Matching regex for desa is System.Collections.Hashtable[desa] 
Matching regex for unpd is System.Collections.Hashtable[unpd] 
Matching regex for dpad is System.Collections.Hashtable[dpad] 
Matching regex for dsd is System.Collections.Hashtable[dsd] 

и не отфильтрованные целевые файлы.

Что я делаю неправильно ... ??

ответ

0

После некоторых экспериментов я узнал, почему я не смог вывести содержимое этой хеш-таблицы. Проблема была в том, что я вызывал объекты из этой хеш-таблицы. Следующий сбой:

Write-Host "Matching regex for $profilename is $filters[profilelname]" 

Когда я изменил его:

Write-Host "Matching regex for $profilename is" $filters.profilelname 

Он работал. Поскольку это было в кавычках, оно фактически не разрешало хэш-таблицу должным образом.

Смежные вопросы