tech.guitarrapc.cóm

Technical updates

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

Zone忌まわしくも助かる機能です。 Winodws 8以降あたりで「インターネット上など信頼しないネットワークからダウンロードしたファイル」は、Secutiry Zone情報に操作がブロックされます。 ブロックされると、Windows上でファイルが正常に操作できなかったり、動作が妨げられるようになります。

セキュリティ上は素敵なのですが、ブロックを外すには「プロパティを開く」必要があり面倒です。簡単のため、コンテキストメニューにPowerShellスクリプトを組み込みましょう。 例のごとく、セキュリティやレジストリを触るため、ご利用はご自身の責任でお願いします。

そもそもブロックってどういうこと

プロパティを見るとこういった状態です。

これを解除するには、Unblockをクリックする必要があります。

PowerShellならCmdletがある

まぁ、さすがといったところです。 標準でコマンドレットが用意されています。

Unblock-File -Path C:\hoge.pptx

たったこれだけで解除できます。

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

はい、ではやりましょう。

guitarrapc/PowerShellUtil - Set-UnblockFileContext | GitHub

以下のレジストリキーを操作します。

HKEY_CLASSES_ROOT\*\shell\
HKEY_CLASSES_ROOT\*\shell\PowerShell

ここにPowerShellとキーを作り、Unblock Filesとデータを作ります。

# 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というメニューが増えているので実行すれば完了です。 これで、ブロックがどうこうで悩む人が減れば幸いですが、Unblockするファイルが安全であることを確認してからご利用されることを推奨します。