Забавная вещь о PowerShell, но такие команды, как dir
и ls
, на самом деле являются просто псевдонимами для Get-ChildItem
, поэтому первые две команды в вашей цепочке на самом деле делают то же самое.
Давайте посмотрим на что вам нужно сделать:
- Получить список файлов
- Получить содержимое каждого из этих файлов
- Вывести каждое содержимое в Write-Output
Глядя на этот шаг за шагом, нам нужно
- dir -Recurse C: \ temp \ installer_logs
- Для каждого из вышеперечисленных
Get-Content
для чтения данных из файла - Передача этого содержимого в Write-Output
Предполагая, что это правильно, это сделает то, что вы ищете:
dir -Recurse -File C:\temp\installer_logs | % {Get-Content $_.FullName} | Write-Output
Добавлена опция -File для получения только файлов. При необходимости можно удалить% - псевдоним для командлета ForEach-Object. $ _ - текущий объект, а свойство .FullName дает полный путь
РЕДАКТИРОВАТЬ: ForEach-Object необходим только для командлетов, которые выполняют не принимать входные данные конвейера сами. Поскольку командлет Get-Content понимает объекты Get-ChildItem в конвейере, мой ответ может быть упрощен до:
dir -Recurse -File C:\temp\installer_logs | Get-Content | Write-Output
И, tbh, также не уверен, что запись-вывод также необходима. Насколько я понимаю, его отключение, похоже, делает то же самое.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: Ответ на 1-й комментарий ...
Я всегда скажите моим коллегам, что ответ "возможно ли это?" всегда "да". Иногда слишком ресурсоемкий или дорогой, но почти никогда не возможный. Попробуйте что-то вроде этого:
dir -Recurse -File C:\temp\installer_logs | % {"----- $($_.FullName) -----";Get-Content $_.FullName} | Write-Output
Даже не уверен, что «Write-Output» необходим, если вы не пытаетесь перенаправить куда-то, кроме экрана.