Get-Content .\a.txt
медленный, замените его на [system.io.file]::ReadAllLines('c:\full\path\to\file\a.txt')
, что намного быстрее.
Избавьтесь от всего первого цикла и не отражайте количество заданий вообще.Если вам нужно сделать это, протолкните цикл вниз по стеку и используйте $jobCount = ($LinesLoadedOnce -match '^end$').Count
и используйте -match
для выполнения цикла / фильтрации вместо foreach
.
вместо вызова Clear-Variable
много раз в строкетекстового файла и многократного запуска командлета, вызовите его один раз и передайте для очистки массив имен, например Clear-Variable -Name "insert_job", "job_type", "command", ..
.
Вместо использования >>storage.txt
, который открывает и закрывает текстфайл один раз в строку, собрать вывод в массив и записать его один раз в файл с set-content
$results = foreach ($line in [system.io.file]::ReadAllLines('c:\full\path\to\file\a.txt'))
{
#code here
"'$insert_job','$job_type','$command', .."
}
$results | Set-Content -Path storage.txt
Остальное становится более зависимым от формата вашего файла, насколько он велик, еслиесть строки, которые вы пропускаете, но это может стать чем-то вроде:
$headers = @(
'insert_job'
'job_type'
'command'
'machine'
'owner'
'permission'
'date_conditions'
'days_of_week'
'start_times'
'description'
'std_out_file'
'std_err_file'
'alarm_if_fail'
'end'
'box_name'
'condition'
'run_window'
'n_retrys'
'term_run_time'
'box_terminator'
'job_terminator'
'min_run_alarm'
'max_run_alarm'
'profile'
)
$headerRegex = "^($($headers -join '|'))\s*:\s*(.*?)\s*$"
$data = [ordered]@{}
foreach($h in $headers) { $data[$h] = $null }
$results = foreach ($line in [system.io.file]::ReadAllLines('c:\full\path\to\file\a.txt')) {
if ($line -match $headerRegex) {
$data[$matches[1]] = $matches[2]
}
elseif ($line -eq 'end') {
[PSCustomObject]$data
$data = [ordered]@{}
foreach($h in $headers) { $data[$h] = $null }
}
}
$results | Export-Csv storage.txt -NoTypeInformation
, который продвигает больше работы в движок регулярных выражений, делает меньше обработки строк и интерполяции строк, использует меньше переменных и меньше командлетов, избегает всехкоммутатор и брейк прыгают и могут работать быстрее.
Я не проверял его, потому что не знаю содержимого вашего файла.