6 часов спустя, и я все ближе. Начал изучать код Visual Studio против ISE, чтобы я мог легко использовать PowerShell 7. Узнал о -Parallel, а затем о том, как нельзя вызывать переменные в блоке сценариев без использования $ using :. (Это заняло целую вечность!) Попробовал -Ajob часть, но это не подходит для этого. Я в основном беру текстовый файл с 20 строками и ищу совпадения в 300 000 строк CSV.
Мне кажется, я добрался до части, которую просто не могу понять. Я думаю, что мне нужно знать, как использовать «потокобезопасные» объекты на основе ошибки.
$textfile = "C:\test_delete\key_words.txt"
$loglocation = "C:\test_delete\datablob.csv"
$outputfile = "C:\test_delete\test5.csv"
New-Item -Path $outputfile
Get-Content $textfile | ForEach-Object -Parallel {
Select-String -Raw -Path $using:loglocation -Pattern $_ |
Out-File -append $using:outputfile
}
Ошибка Out-File: Line | 3 | Out-File -append $ используя: outputfile | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Процесс не может получить доступ к файлу 'C: \ test_delete \ test5.csv', поскольку он используется другим процессом.
В справке ForEach-Object, пример 11, он говорит о безопасном использовании потока и В этом примере объявляется переменная = синтаксис, безопасный для потока. Это имеет смысл (вроде). За исключением этого случая, я хочу в конечном итоге объявить параметр для $ outfile, который нужно будет вызывать безопасным способом. Я забегаю вперед, но просто не могу понять, как сделать этот поток безопасным, вызывая $ outfile.
Извините за подробности, это мой первый пост, и просто хочу передать, что я потратил некоторое время, пытаясь получить это. Заранее спасибо!