使用PowerShell取消阻止文件?

Dan*_*ott 32 powershell powershell-2.0

我想让PowerShell在Win2K8 R2中取消阻止文件.

有没有人有关于语法的指针?

Joe*_*oey 47

如果您使用的是PowerShell v3,则可以使用Unblock-Filecmdlet.


"阻塞"部分只是文件的备用数据流,名为"Zone.Identifier".您可以使用输入重定向在CMD中显示它(但不能以其他方式访问CMD中的流):

H:\Downloads> more < test.exe:Zone.Identifier
[ZoneTransfer]
ZoneId=3
Run Code Online (Sandbox Code Playgroud)

您可以dir /r在Windows Vista及更高版本上使用它们:

2009-10-24  12:18        54.538.056 test.exe
                                 24 test.exe:Zone.Identifier:$DATA
Run Code Online (Sandbox Code Playgroud)

同样在CMD中,您可以通过覆盖它轻松摆脱它(使用输出重定向,这次):

echo.>myDownloadedFile.exe:Zone.Identifier
Run Code Online (Sandbox Code Playgroud)

这是不是一样完全去除ADS,但在资源管理器中的作品已经不抱怨.

似乎没有成为在PowerShell中从ADS处理原生支持(在PowerShell的Guy的博客提到这里.这篇文章也有一些信息是如何获得在PowerShell中该功能).但是,你可以简单地调用cmd:

cmd /c "echo.>test.exe:Zone.Identifier"
Run Code Online (Sandbox Code Playgroud)

这也适用于PowerShell.

另一种选择是Mark Russinovich的streams实用程序,它允许您检查文件的ADS并删除它们.所以

streams -d myDownloadedFile.exe
Run Code Online (Sandbox Code Playgroud)

确实有效.

  • 我感到@ Geert的痛苦,这篇文章并没有明确说明它就像`\\ live.sysinternals.com\tools\streams -d myDownloadedFile.exe`一样简单(灵感来自[http://www.hanselman.com/blog] /RemovingSecurityFromDownloadedPowerShellScriptsWithAlternativeDataStreams.aspx](Hanselmans summary) (3认同)
  • 仅供参考 - Powershell 3最终通过Unblock-File cmdlet添加了这个 - http://technet.microsoft.com/en-us/library/hh849924.aspx (3认同)

Jay*_*kul 9

PoshCode模块包括Set-DownloadFlag和Remove-DownloadFlag功能,这些功能与宣传的一样.:)我刚刚把这篇文章放到它自己的脚本贡献http://poshcode.org/1430 ...如果你使用New-Type函数代替Add-Type,它也适用于PowerShell 1 http://poshcode.org/720)


Mik*_*liy 5

Oneliner为所有儿童删除区域信息(灵感来自已接受的答案)(正确引用).

get-childitem -rec | % { cmd /c "echo.>""$($_.FullName)"":Zone.Identifier" }
Run Code Online (Sandbox Code Playgroud)

没有严格回答这个问题,只是想确定当我接下来提出这个问题时已经有解决方案:).

PS.适用于PS 2.0