web-dev-qa-db-ja.com

PowerShellでファイルのブロックを解除しますか?

PowerShellでWin2K8 R2のファイルのブロックを解除しようとしています。

誰かが構文についてのポインタを持っていますか?

31
Daniel Elliott

PowerShell v3を使用している場合は、 Unblock-File コマンドレットを使用できます。


「ブロッキング」の部分は、単に「Zone.Identifier」という名前のファイルの代替データストリームです。入力リダイレクトを使用して、CMDで表示できます(ただし、CMDでストリームにアクセスする他の方法はありません)。

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

Windows Vista以降ではdir /rを使用して検索できます。

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

また、CMDでは、(今回は出力リダイレクトを使用して)上書きすることで簡単に取り除くことができます。

echo.>myDownloadedFile.exe:Zone.Identifier

これはquiteADSを完全に削除するのと同じではありませんが、Explorerで問題が発生しなくなりました。

PowerShell内からADSを処理するためのネイティブサポートはないようです(PowerShell Guyのブログ here で言及されています。この記事には、PowerShellでその機能を取得する方法も記載されています)。ただし、cmdを呼び出すだけです。

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

PowerShellでも同様に機能します。

別のオプションは、Mark Russinovichの streams ユーティリティで、ファイルのADSを検査して削除することもできます。そう

streams -d myDownloadedFile.exe

同様に動作します。

47
Joey

PoshCodeモジュールには、宣伝どおりに機能するSet-DownloadFlag関数とRemove-DownloadFlag関数が含まれています。 :)独自のスクリプトコントリビューションにその一部を取り出したところです http://poshcode.org/14 ... New-Type関数を使用すると、PowerShell 1でも機能しますAdd-Typeの代わり( http://poshcode.org/72

9
Jaykul

すべての子供(正しい引用付き)のゾーン情報(受け入れられた回答に触発された)を削除するOneliner。

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

質問に厳密に答えるのではなく、私がこの問題を次に見つけたときにすでに解決策があることを確認したいだけです:)。

PS。 PS 2.0で動作

5
Mike Chaliy

このようなフォーラムに投稿するのは初めてで、これは古いトピックかもしれませんが、ここにあなたが探しているものがあります。

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

これにより、ブロックされているファイルのみがリストされます。

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

これにより、それらのブロックが解除されます。

3
Parrish

Streams.exeを使用して代替ファイルストリームを削除しますこの投稿を参照してください: http:/ /www.paraesthesia.com/archive/2010/05/19/unblocking-multiple-files-at-once.aspx

1
Geert

フォルダーとそのサブフォルダーの再帰をブロック解除するには(> = PowerShell v3) Get-ChildItem(gci)コマンド を使用できます。

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

どこ C:\Tempは開始フォルダです。

1
Bruno Bieri

Win32 APIを使用してZone.Identifier NTFS代替データストリームを削除する小さな関数を作成しました。これは、Windowsがファイルをブロックするかどうかを決定するために使用するものです。

.NETは代替データストリームにアクセスできないため、関数はプラットフォーム呼び出しと呼ばれる手法を使用してネイティブWin32 APIを呼び出します。 PowerShellの他のいくつかのソリューションに対するこれの利点は、PowerShellパイプラインをサポートするため、ファイルパスまたはSystem.IO.FileInfoオブジェクトのリストを関数にパイプ処理できることです。また、関数には外部依存関係がなく、コンテンツを削除するのではなく、実際に代替データストリームを削除します。

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

1
Andy Arismendi

PowerShell 3.0以降のバージョンを使用している場合、Unblock-filePowerShellコマンドレットは、ファイルのブロックを解除することでこの問題を解決しますファイルプロパティウィンドウのブロック解除ボタン。

Unblock-Fileコマンドレットを使用すると、インターネットからダウンロードされたファイルを開くことができます。 Windows PowerShell実行ポリシーがRemoteSignedの場合でも、インターネットからダウンロードされたWindows PowerShellスクリプトファイルのブロックを解除して、実行できるようにします。既定では、これらのファイルは、信頼できないファイルからコンピューターを保護するためにブロックされています。

PowerShellウィンドウを開き、以下の構文に従ってください。構文の詳細については、 ここ にアクセスしてください。

例:

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

PowerShellスクリーンショットでファイルのブロックを解除

警告:安全でないファイルのブロックを解除しないでください。

0
Dinch

サーバーにPowershell> v3($ PSVersionTable.PSVersion.Major -ge 3)がない場合。次に、古き良き信頼できるDOSを使用します。

for /f "tokens=*" %f in ('dir /b *.*') do echo.>"%f":Zone.Identifier 
0
OzBob

これを行うために適切なpowershellコマンドレットを使用しているように見える回答はまだありません。

ここで、zone.identifierを含むDLLを現在のフォルダーで見つけることができます。

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

ここでは、他のストリームに損傷を与える可能性がある上記の回答とは異なり、不要なストリームのみをザップします。

Remove-Item  -Path .\*.dll -stream Zone.Identifier
0
Warren P

私はマイクの答えを修正する必要があります:$ _。FullNameにスペースがある場合(たとえば、「C:\ Program Files」のように)、これは機能しないので、次のようにする必要があります。

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