PowerShell -列出一个目录中的所有备用数据流信息

kwvwclae  于 2023-08-05  发布在  Shell
关注(0)|答案(3)|浏览(110)

我在这里的最终目标是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文件中?
任何帮助都非常感谢。

dfty9e19

dfty9e191#

假设你在流内容之后:

## 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文件的缩短输出
(date格式取决于区域设置/用户设置):

> 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”**。

6g8kf2rb

6g8kf2rb2#

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

$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)"}}

4uqofj5v

4uqofj5v3#

由于ADS可能包含二进制数据,我不会将其转储到文本文件中,尤其是不转储到CSV等格式化文本文件中。要查看ADS的内容,您可以显示其内容的十六进制转储,例如:g.:

Get-ChildItem -Recurse | Get-Item -Stream * | ? {$_.Stream -ne ':$DATA'} | % {
  Write-Host "`n`n$($_.FileName):$($_.Stream)" -NoNewline
  Get-Content -LiteralPath $_.FileName -Stream $_.Stream -Raw | Format-Hex
}

字符串
此解决方案也适用于UNC路径,如网络共享的路径。

相关问题