4

我的最终目标是 cd 到 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 文件中?

任何帮助是极大的赞赏。

4

2 回答 2

3

假设您在 Stream 内容之后:

## 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 的最终目的地支持多行字段,则可以在内容上执行-join "`n"

于 2018-11-19T23:19:04.330 回答
0

我认为这可能接近你想要的:

$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)"}}
于 2018-11-19T18:38:55.280 回答