Список файлов со строками, а затем ВСЕ файлы проверяются с помощью PowerShell - PullRequest
2 голосов
/ 22 февраля 2020

Я хочу найти все файлы, .exe.config для определенных строк. Я хочу перечислить файлы с этими строками, а затем перечислить все файлы, которые были проверены. Я могу получить его, чтобы найти файлы со строками:

Get-ChildItem -Path c:\ -I *.exe.config -R| Select-String 'string1','string2'

Моя проблема, я не могу понять, как заставить его отображать все проверенные файлы .exe.config (без поиска компьютер снова). Я думал, что смогу сохранить результаты начального поиска в переменную. Затем выполните это с помощью for для l oop, но я даже не могу получить нужную информацию в переменную. Я попробовал несколько вариантов ниже, но $ files всегда пуст. Кроме того, я не продан на этом подходе, поэтому, если у кого-то есть совершенно другой метод, это было бы хорошо

$files = (Get-ChildItem -Path c:\ -I *.exe.config -R).Path
$files = (Get-ChildItem -Path c:\ -I *.exe.config -R | select fullname)

1 Ответ

2 голосов
/ 22 февраля 2020

Используйте общий -OutVariable параметр , чтобы зафиксировать вывод Get-ChildItem в переменной по вашему выбору, отдельно от общих выходных данных конвейера:

Get-ChildItem c:\ -Include *.exe.config -Recurse -OutVariable files |
  Select-String 'string1','string2'

Переменная $file теперь содержит все System.IO.FileInfo экземпляров, выведенных Get-ChildItem; обратите внимание, как вы должны передать имя переменной без символ $ -OutVariable.

Небольшое предостережение: -OutVariable, начиная с PowerShell [Core] 7.0:

  • собирает выходные данные нескольких объектов в экземпляре System.Collections.ArrayList, а не в обычном массиве PowerShell типа [object[]] (массив фиксированного размера System.Object экземпляров).

  • даже собирает выходные данные single -объекта таким образом (заключенные в коллекцию) - тогда как прямой конвейерный вывод просто испускает объект сама .

См. этот ответ для получения справочной информации и обходного пути.

...