tech.guitarrapc.cóm

Technical updates

PowerShell で ブロックされたファイルの Zone を解除する

Zone..... 忌まわしくも助かる機能です。 Winodws 8以降だったと思いますが、インターネット上など信頼しないネットワークから落としたファイルは、Secutiry Zone情報に block されるようになりました。 このBlockにより、Windows上でファイルが正常に操作できなかったり、動作が妨げられるようになります。 勿論セキュリティ上は素敵なのですが、外すためにプロパティ開くとか面倒なのでPowerShell スクリプトをContext menuに組み込んでしまいましょう。 例のごとく、セキュリティやレジストリを触るため、ご利用はご自身の責任でお願いします。

そもそもBlockってどういうこと

プロパティを見るとこういった状態です。 [office src="https://skydrive.live.com/embed?cid=D0D99BE0D6F89C8B&resid=D0D99BE0D6F89C8B%211690&authkey=AAMxgP2L36MXJ9I" width="269" height="319"] これを解除するには、Unblockをクリックする必要があります。

PowerShellならCmdletがある

まぁ、さすがといったところです。 標準でコマンドレットが用意されています。
Unblock-File -Path C:\hoge.pptx
たったこれだけで解除できます。 簡単ですね!素晴らしい。 [office src="https://skydrive.live.com/embed?cid=D0D99BE0D6F89C8B&resid=D0D99BE0D6F89C8B%211692&authkey=AEQeZOo4mSdB0ks" width="271" height="320"]

右クリックのコンテキストメニューに追加したい

はい、ではやりましょう。 以下のレジストリキーを操作します。
HKEY_CLASSES_ROOT\*\shell\
HKEY_CLASSES_ROOT\*\shell\PowerShell
ここにPowerShellとキーを作り、Unblock Filesなどと データを作ります。 では、PowerShellでサクッと。
# Function to add Unblock context
function Set-UnblockFileContext{
	$key = "Registry::HKEY_CLASSES_ROOT\*\shell"
	$Command = "C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe Unblock-File  -LiteralPath '%L'"

	if (-not(Test-Path -LiteralPath "$key\powershell" ))
	{
		cd -LiteralPath $key
		New-Item -Name "PowerShell" `
			| Set-ItemProperty -Name "(default)" -Value "Unblock Files" -PassThru

		cd PowerShell
		New-Item -Name "Command" `
			| Set-ItemProperty -Name "(default)" -Value $Command
	}
}
実行はこれで
Set-UnblockFileContext
* があるので、必ず LiteralPathで指定など New-Itemで *を含まないようにする必要があります 要注意ですね。

実行後

右クリックに Unblock File というメニューが増えているので実行すれば完了です。 [office src="https://skydrive.live.com/embed?cid=D0D99BE0D6F89C8B&resid=D0D99BE0D6F89C8B%211693&authkey=AGfdhMMwUWUy4xs" width="319" height="179"] これで、Blockがどうこうで悩む人が減れば幸いですが、Unblockするファイルが安全であることを確認してからご利用されることを推奨します。

ソース

どうぞ。 https://github.com/guitarrapc/PowerShellUtil/tree/master/Set-UnblockFileContext