|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Поиск через PS по значениям из EXCEL |
|
|
PowerShell - Поиск через PS по значениям из EXCEL
|
Новый участник Сообщения: 5 |
Всем привет. Не специалист в PS, но очень требуется автоматизация и запилил, что смог.
Задача: Необходимо из EXCEL значения ячейки брать параметры для поиска файлов на диске (значения там периодически разные типа : "ivanov.txt","petrov.txt", "sidorov.txt" и т.д список может быть очень большой), после чего производится поиск определенного текста в найденных файлах. Параметр для -Include берем Из ячейки excel $Excel = New-Object -ComObject Excel.Application $WorkBook = $Excel.Workbooks.Open("C:\Users\admin\Documents\test.xlsx") $WorkSheet = $WorkBook.Sheets.Item("sheet") $users = $Worksheet.Range("a1").Value2 Get-Content -Path "C:\Users\admin\search\*" -Include "$users" | Select-String -SimpleMatch "{какой-то текст}" Проблема в чем, если значение в ячейке ivanov.txt тогда поиск по одному файлу нормально работает, если значение ivanov.txt","petrov.txt", "sidorov.txt то ошибка: Объект для указанного пути C:\Users\admin\search\* не существует или отфильтрован с помощью параметра -Include или -Exclude." Если делать поиск вручную, все работает: Get-Content -Path "C:\Users\admin\search\*" -Include " ivanov.txt","petrov.txt", "sidorov.txt " | Select-String -SimpleMatch "{какой-то текст}" Прошу помочь c решением. Также можно написать функцию с перебором ячеек, т.к. пользователи идут по порядку, после чего объединяются в одну строку для поиска через функцию объединения ячеек. Только надо учитывать, что исходное значение бывает разное, то 10 то 50 пользователей и если делать перебор в скрипте PS, то в параметр будут передаваться пустые значения и опять выдавать ошибку. |
|
Отправлено: 15:21, 20-06-2023 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать |
Отправлено: 15:35, 20-06-2023 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать get-childitem не подходит, т.к конечная цель прочитать текст в искомых фалах
если брать в контексте предложенного $Excel = New-Object -ComObject Excel.Application $WorkBook = $Excel.Workbooks.Open("C:\Users\admin\Documents\test.xlsx") $WorkSheet = $WorkBook.Sheets.Item("sheet") $users = $Worksheet.Range("a1").Value2 $a = @($user) Get-Content -Path "C:\Users\admin\search\*" -Include $a | Select-String -SimpleMatch "{какой-то текст}" та же ошибка если параметров несколько. Пробовал в ячейке такие значения: "ivanov.txt","petrov.txt", "sidorov.txt " и такие значения: ivanov.txt","petrov.txt", "sidorov.txt Работает только с одним параметром, без кавычек, например ivanov.txt |
Отправлено: 16:20, 20-06-2023 | #3 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать что значит get-childitem не подходит
пути файлов узнаете оттуда и читайте на здоровье так как вы упорно пытаетесь - не выйдет |
Отправлено: 16:41, 20-06-2023 | #4 |
Deadooshka Сообщения: 2558
|
Профиль | Отправить PM | Цитировать Select-String -Path тоже можно пробовать. Get-childitem отдаёт объекты FileInfo, откуда тоже можно текст достать. $_.OpenText().ReadToEnd() в foreach-object должен содержимое дать.
|
|
Отправлено: 18:30, 20-06-2023 | #5 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать |
Отправлено: 21:27, 20-06-2023 | #6 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать спасибо, пробовал по разному. локально получилось передать из екселя используя @
$WorkBook = $Excel.Workbooks.Open("C:\Users\fedorov_oa\Documents\Заявки\УЗ\test\2.xlsx") $WorkSheet = $WorkBook.Sheets.Item("users") $a = @($users) Get-Content -Path "C:\Users\fedorov_oa\Documents\Заявки\УЗ\test\*" -Include $a | Select-String -SimpleMatch "2023" но на боевом варианте, поиск происходит на большом hnas с логами, стало сыпать ошибками доступа (хотя раннее простой прямой командой поиска не было), игнор ошибок не помог и все виснет. видимо с помощью @users берется каждая ячейка в т.ч пустые. вся проблема скрипта не в команде поиска и извлечении, это как раз работает, а в том, что значение вида "ivanov.txt","petrov.txt", "sidorov.txt" из ячейки не передается в параметр поиска. Если в ячейке только ivanov.txt, например, передает корректно. корректно отрабатывает и вручную копировать текст из екселя и вставлять в поиск Get-Content -Path "C:\Users\admin\search\*" -Include "ivanov.txt","petrov.txt", "sidorov.txt" | Select-String -SimpleMatch "{какой-то текст}" $x= get-childitem "./*" -include $a | select-object -expandproperty fullname если делать через такую команду, проблема остается, нет возможности корректно передать из экселя параметры для -Include |
Отправлено: 09:52, 21-06-2023 | #7 |
Deadooshka Сообщения: 2558
|
Профиль | Отправить PM | Цитировать |
Отправлено: 10:30, 21-06-2023 | #8 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Благодарствую. Помог split. Я изначально убрал ковычки в ячейке (они функцией как раз добавлялись).
Тип String[] System.Array Значения в ячейке: ivanov.txt,petrov.txt,sidorov.txt Итоговый код: $Excel = New-Object -ComObject Excel.Application $WorkBook = $Excel.Workbooks.Open("C:\Users\admin\Documents\test.xlsx") $WorkSheet = $WorkBook.Sheets.Item("sheet") $users = ($Worksheet.Range("a1").value2 -split '\s*,\s*') Get-Content -Path "C:\Users\admin\search\*" -Include "$users" | Select-String -SimpleMatch "{какой-то текст}" |
Отправлено: 11:53, 21-06-2023 | #9 |
Deadooshka Сообщения: 2558
|
Профиль | Отправить PM | Цитировать Цитата olmife:
|
|
Отправлено: 12:20, 21-06-2023 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - скрипт отключения пользователей из Exel в AD через PS | yuriy.nepomnyashchiy.3@fb | Скриптовые языки администрирования Windows | 31 | 12-07-2017 17:25 | |
CMD/BAT - [решено] Поиск по значениям реестра | dosperados | Скриптовые языки администрирования Windows | 7 | 19-03-2015 05:49 | |
PowerShell - [решено] Поиск по значениям реестра | dosperados | Скриптовые языки администрирования Windows | 21 | 18-03-2015 12:52 | |
2007 - Макрос Excel поиск по листам в книге с условием | muradasilov | Microsoft Office (Word, Excel, Outlook и т.д.) | 2 | 26-02-2013 17:32 |
|