PowerShellでWin2K8 R2のファイルのブロックを解除しようとしています。
誰かが構文についてのポインタを持っていますか?
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
同様に動作します。
PoshCodeモジュールには、宣伝どおりに機能するSet-DownloadFlag関数とRemove-DownloadFlag関数が含まれています。 :)独自のスクリプトコントリビューションにその一部を取り出したところです http://poshcode.org/14 ... New-Type関数を使用すると、PowerShell 1でも機能しますAdd-Typeの代わり( http://poshcode.org/72 )
すべての子供(正しい引用付き)のゾーン情報(受け入れられた回答に触発された)を削除するOneliner。
get-childitem -rec | % { cmd /c "echo.>""$($_.FullName)"":Zone.Identifier" }
質問に厳密に答えるのではなく、私がこの問題を次に見つけたときにすでに解決策があることを確認したいだけです:)。
PS。 PS 2.0で動作
このようなフォーラムに投稿するのは初めてで、これは古いトピックかもしれませんが、ここにあなたが探しているものがあります。
get-item -Path "path to file(s)" -Stream "Zone.Identifier" -ErrorAction "SilentlyContinue"
これにより、ブロックされているファイルのみがリストされます。
Unblock-File -Path "Path to blocked file(s)"
これにより、それらのブロックが解除されます。
Streams.exeを使用して代替ファイルストリームを削除しますこの投稿を参照してください: http:/ /www.paraesthesia.com/archive/2010/05/19/unblocking-multiple-files-at-once.aspx
フォルダーとそのサブフォルダーの再帰をブロック解除するには(> = PowerShell v3) Get-ChildItem(gci)コマンド を使用できます。
Get-ChildItem "C:\Temp\" -recurse | Unblock-File
どこ C:\Temp
は開始フォルダです。
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
PowerShell 3.0以降のバージョンを使用している場合、Unblock-filePowerShellコマンドレットは、ファイルのブロックを解除することでこの問題を解決しますファイルプロパティウィンドウのブロック解除ボタン。
Unblock-Fileコマンドレットを使用すると、インターネットからダウンロードされたファイルを開くことができます。 Windows PowerShell実行ポリシーがRemoteSignedの場合でも、インターネットからダウンロードされたWindows PowerShellスクリプトファイルのブロックを解除して、実行できるようにします。既定では、これらのファイルは、信頼できないファイルからコンピューターを保護するためにブロックされています。
PowerShellウィンドウを開き、以下の構文に従ってください。構文の詳細については、 ここ にアクセスしてください。
例:
unblock-file -path C:\Downloads\MyFileName.chm
PowerShellスクリーンショットでファイルのブロックを解除
警告:安全でないファイルのブロックを解除しないでください。
サーバーにPowershell> v3($ PSVersionTable.PSVersion.Major -ge 3)がない場合。次に、古き良き信頼できるDOSを使用します。
for /f "tokens=*" %f in ('dir /b *.*') do echo.>"%f":Zone.Identifier
これを行うために適切なpowershellコマンドレットを使用しているように見える回答はまだありません。
ここで、zone.identifierを含むDLLを現在のフォルダーで見つけることができます。
Get-Item -Path .\*.dll -stream * | where {$_.Stream -eq "Zone.Identifier" }
ここでは、他のストリームに損傷を与える可能性がある上記の回答とは異なり、不要なストリームのみをザップします。
Remove-Item -Path .\*.dll -stream Zone.Identifier
私はマイクの答えを修正する必要があります:$ _。FullNameにスペースがある場合(たとえば、「C:\ Program Files」のように)、これは機能しないので、次のようにする必要があります。
get-childitem -rec | % { cmd /c "echo.>""$($_.FullName)"":Zone.Identifier" }