Powershell - список всей информации о альтернативном потоке данных из одного каталога - PullRequest
0 голосов
/ 19 ноября 2018

Моя конечная цель заключается в том, чтобы перейти к каталогу в powershell, а затем перечислить все файлы альтернативного потока данных, а затем вывести все их содержимое в CSV.

В настоящее время у меня есть первые две сценарии:

cd c:\users\profilename\downloads\
gci -recurse | % { gi $_.FullName -stream * } | where stream -ne ':$Data'

Чтобы открыть пример файла потока данных, откройте cmd, cd в каталоге, затем запустите:

dir /r

После этого возьмите определенное в зоне имя одного из файлов ивыполните эту команду без: $ data.

Пример перед удалением: $ Data

notepad test.docx:Zone.Identifier:$Data

После удаления (выполните эту команду):

notepad test.docx:Zone.Identifier

Как бы явзять выходные данные второй команды и использовать поле PSPath, чтобы открыть каждый из этих файлов, а затем вывести все содержимое в один файл CSV?

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Предполагается, что вы находитесь за содержимым потока:

## Q:\Test\2018\11\19\SO_53380498.ps1
Pushd $ENV:USERPROFILE\Downloads
Get-ChildItem -Recurse | ForEach-Object {
  Get-Item $_.FullName -Stream *
} | Where-Object Stream -ne ':$Data' | 
      Select-Object FileName,Stream,
        @{n='CreationTime';e={(Get-Item $_.FileName).CreationTime}},
        @{n='LastWriteTime';e={(Get-Item $_.FileName).LastWriteTime}},
        @{n='Content';e={gc "$($_.FileName):$($_.Stream)"}} |
          Export-Csv Streams.csv -NoTypeInformation

Короткий вывод сгенерированного файла Streams.csv
(формат даты зависит от региональных настроек / пользовательских настроек):

> gc .\Streams.csv
"FileName","Stream","CreationTime","LastWriteTime","Content"
"C:\Users\LotPings\Downloads\2018-06-27-raspbian-stretch.zip","Zone.Identifier","2018-07-29 22:13:03","2018-07-29 22:16:41","[ZoneTransfer] ZoneId=3"

Если ваш конечный пункт назначения для csv поддерживает многострочные поля, вы можете выполнить -jin "` n " для содержимого.

0 голосов
/ 19 ноября 2018

Я думаю, это может быть близко к тому, что вы хотите:

$files = gci -recurse | % { gi $_.FullName -stream * } | where stream -ne ':$Data' | select filename,stream,@{'name'='identifier';"e"={"$($_.filename)$($_.stream)"}}

Разбит на несколько строк для разборчивости:

$files = Get-ChildItem -Recurse | 
    Where-Object { Get-Item $_.FullName -Stream * } | 
    Where-Object {$_.Stream -ne ':$Data'} | 
    Select-Object -Properties filename, stream, @{'name'='identifier';"e"={"$($_.filename)$($_.stream)"}}
...