代码之家  ›  专栏  ›  技术社区  ›  Daniel Elliott

用powershell解除阻止文件?

  •  31
  • Daniel Elliott  · 技术社区  · 15 年前

    我正在尝试让powershell取消阻止win2k8 r2中的文件。

    有人有语法的指针吗?

    12 回复  |  直到 6 年前
        1
  •  47
  •   Cristian Ciupitu    6 年前

    如果您使用的是PuthBeice V3,则可以使用 Unblock-File CMDLET。


    “阻塞”部分只是文件的一个备用数据流,名为“zone.identifier”。您可以使用输入重定向在CMD中显示它(尽管没有其他方法到达CMD中的流):

    H:\Downloads> more < test.exe:Zone.Identifier
    [ZoneTransfer]
    ZoneId=3
    

    你可以找到他们使用 dir /r 在Windows Vista及更高版本上:

    2009-10-24  12:18        54.538.056 test.exe
                                     24 test.exe:Zone.Identifier:$DATA
    

    同样,在CMD中,通过重写(使用输出重定向,这一次),可以很容易地消除这个问题:

    echo.>myDownloadedFile.exe:Zone.Identifier
    

    这不是 相当地 与完全删除广告一样,但在浏览器中工作不再抱怨。

    在powershell内部处理广告似乎没有本地支持(正如powershell的博客中提到的 here . 这篇文章还提供了一些如何在powershell中获得该功能的信息)。但是,您可以简单地调用cmd:

    cmd /c "echo.>test.exe:Zone.Identifier"
    

    这也适用于powershell。

    另一个选择是马克·鲁辛诺维奇 streams 允许您检查文件广告并删除它们的实用程序。所以

    streams -d myDownloadedFile.exe
    

    也行。

        2
  •  9
  •   Jaykul    15 年前

    poshcode模块包括set downloadflag和remove downloadflag函数,它们的工作方式与广告相同。:)我刚刚把那篇稿子编成了自己的剧本 http://poshcode.org/1430 …如果使用新类型函数代替add type,它也将在powershell 1上工作( http://poshcode.org/720 )

        3
  •  5
  •   Community CDub    8 年前

    一行删除所有儿童的区域信息(以接受的答案为灵感)(正确引用)。

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

    不是严格地回答问题,只是想确定下一次我提出这个问题时已经有了解决方案:)。

    PS.在PS 2.0中工作

        4
  •  3
  •   Parrish    9 年前

    刚在这样的论坛上发表文章,这可能是一个老话题,但这里是你要找的。

    get-item -Path "path to file(s)" -Stream "Zone.Identifier" -ErrorAction "SilentlyContinue"
    

    这应该只列出被阻止的文件。

    Unblock-File -Path "Path to blocked file(s)"
    

    这将解除它们的锁定。

        5
  •  1
  •   Geert    14 年前
        6
  •  1
  •   Andy Arismendi    13 年前

    我编写了一个使用win32 api删除 Zone.Identifier NTFS备用数据流,这是Windows用来确定是否要阻止文件的数据流。

    .NET没有访问备用数据流的权限,因此该函数使用称为平台调用的技术来调用本机win32 api。这样做的好处是,它可以支持管道的文件路径列表。 System.IO.FileInfo 函数的对象。该函数也没有任何外部依赖项,而是实际删除备用数据流,而不仅仅是删除其内容。

    http://andyarismendi.blogspot.com/2012/02/unblocking-files-with-powershell.html

        7
  •  1
  •   Bruno Bieri    6 年前

    要打开文件夹和它的子文件夹递归(& gt;= PosikSev3),可以使用 Get-ChildItem (gci) command :

    Get-ChildItem "C:\Temp\" -recurse | Unblock-File
    

    哪里 C:\Temp 是起始文件夹。

        8
  •  0
  •   Adam    8 年前

    我得修改迈克的回答:如果$全名中有空格(例如“C:\程序文件”),这就不起作用,所以必须是:

    get-childitem -rec | % { cmd /c "echo.>""$($_.FullName)"":Zone.Identifier" }
    
        9
  •  0
  •   Warren P    8 年前

    我还没有看到任何似乎使用正确的powershell cmdlet来完成此任务的答案。

    在这里,我们可以找到包含ZONE标识符的当前文件夹中的DLL:

    Get-Item -Path .\*.dll -stream * | where {$_.Stream -eq "Zone.Identifier" }
    

    在这里,我们只处理不需要的流,不像上面的一些答案可能会损坏其他流:

    Remove-Item  -Path .\*.dll -stream Zone.Identifier
    
        10
  •  0
  •   OzBob    7 年前

    如果您的服务器没有powershell>v3($psversiontable.psversion.major-ge 3)。然后使用可靠的旧DOS:

    for /f "tokens=*" %f in ('dir /b *.*') do echo.>"%f":Zone.Identifier 
    
        11
  •  0
  •   Dinch    6 年前

    如果您使用的是Powershell 3.0或更高版本的Vesion, 解除阻塞文件 powershell cmdlet应该可以解决取消阻止文件的此问题,即使您在“文件属性”窗口中没有“取消阻止”按钮。

    unblock-file cmdlet允许您打开从Internet下载的文件。它会解除阻止从Internet下载的Windows PowerShell脚本文件,以便您可以运行它们,即使Windows PowerShell执行策略是远程签名的。默认情况下,这些文件被阻止以保护计算机不受不受信任的文件的影响。

    打开powershell窗口 并遵循以下语法。要查找有关语法的更多信息,请转到 here

    例子:

    unblock-file -path C:\Downloads\MyFileName.chm
    

    Unblock file with PowerShell screen shot

    警告:不要解除阻止不安全的文件。

        12
  •  -2
  •   Tim Cooper    13 年前

    你是说:

    set-executionpolicy remotesigned
    

    这将允许您在未签名的情况下执行本地脚本,如果已签名,则允许执行远程脚本。更多可用信息 here .