Проект сопоставления данных от внутренней системы к системе нового поставщика. Первый шаг - найти все вхождения текущих имен полей базы данных (или, если быть точным, имен столбцов) в исходных файлах C# .cs. Пытаюсь использовать Powershell. Недавно были созданы поисковые запросы PS с Get-ChildItem и Select-String, которые работают хорошо, но массив строк поиска был небольшим и легко закодировался встроенным. Но переносимое приложение имеет пару сотен имен столбцов и значительный объем кода. Таким образом, вооруженный текстовым файлом всех имен столбцов, Pipleline может показаться божественным инструментом для создания базовой c перекрестной ссылки для дальнейшего анализа. Однако мне не удалось заставить конвейер работать с внешней переменной где-либо, кроме первого шага. Пробуем использовать -PipelineVariable, $ _. и глобальная переменная. Не нашел ничего особенного c после долгих поисков. PS Это мой первый вопрос к StackoOverflow, будьте любезны, пожалуйста.
Вот то, что я надеялся, сработает, но пока играю в кости.
$inputFile = "C:\DataColumnsNames.txt"
$outputFile = "C:\DataColumnsUsages.txt"
$arr = [string[]](Get-Content $inputfile)
foreach ($s in $arr) {
Get-ChildItem -Path "C:ProjectFolder\*" -Filter *.cs -Recurse -ErrorAction SilentlyContinue -Force |
Select-String $s | Select-Object Path, LineNumber, line | Export-csv $outputfile
}
Я обнаружил, что это напечатает список один раз, но не дважды. На самом деле кажется, что использование переменной таким образом приводит к тому, что обработка просто пропускает любые дальнейшие шаги конвейера.
foreach ($s in $arr) {Write-Host $s | Write $s}
Если это невозможно сделать в Powershell легко, мой запасной вариант - это C# хотя я бы предпочел поднять уровень с помощью PowerShell, если кто-нибудь может указать мне на правильное понимание того, как делать что-то в Pipepline, или, альтернативно, создать эквивалентную функцию. Кажется, такая естественная посадка для Powershell.
Спасибо.