Вопрос:
Я пытаюсь написать сценарий powershell, который возвращает только строки, которые имеют определенную запись в одном из столбцов, но немного борется. CSV имеет 2 соответствующих столбца, идентификатор и ошибку. На данный момент у меня есть это:
$ImportFile = Import-csv X:errorlist.csv $Error = $userobject.Error $ID = $userobject.ID $ErrorMessage1 = «Error1» foreach($test in $ImportFile) { $field1 = $test.Error $field2 = $test.ID Echo «$field1, $field2» } Where-Object {$_.Error -like $ErrorMessage1}
Однако эхо все еще возвращает все в csv даже с помощью Where-Object. Я пытаюсь запустить ForEach, потому что в конечном итоге, когда у меня есть эхо, я собираюсь вставить SQL-скрипт, который использует идентификационную информацию в csv для исправления определенных ошибок. Поэтому я думаю, что мне нужно, чтобы foreach обрабатывал каждый sql-скрипт по очереди, если у кого-то нет лучшей идеи?
Лучший ответ:
Отфильтруйте строки из CSV перед запуском SQL:
Import-Csv X:errorlist.csv | Where-Object { $_.Error -like $ErrorMessage } | ForEach-Object { # Don’t use aliases in scripts, use the real cmdlet names. Makes maintenance easier. Write-Host (‘{0}, {1}’ -f $_.Error,$_.ID) # Run your SQL cmd here. } Ответ №1
Попробуйте это, это проверит для $ ErrorMessage1 в столбцах ID или Error:
Import-csv X:errorlist.csv | Where-Object {$_.Error -like «*$ErrorMessage1*» -or $_.ID -like «*$ErrorMessage1*»} Ответ №2
Цикл foreach работает независимо от Where-object, поэтому все, что вы делаете, – это сброс содержимого файла CSV на консоль.
Вы можете сократить это, просто перекачивая данные по трубопроводу. Это позволит фильтровать ваши записи CSV до тех, которые соответствуют вашим критериям.
$ErrorMessage1 = «Error1» $allerrors = Import-csv X:errorlist.csv|where-object {$_.error -eq $ErrorMessage1} $allerrors;