この記事では、Windowsのダウンロードフォルダーにある全てのファイルのセキュリティーロックを解除するためのPowerShellスクリプトを紹介します。このスクリプトは、ファイルがダウンロードされた後にセキュリティー保護されている場合に役立ちます。
この記事の対象
どんな時に起こるのか? ⇒ 信頼できないとき
Windows 10 では、ファイルをインターネットからダウンロードする場合、一部のファイルはブロックされることがあります。このブロックは、ダウンロードされたファイルが信頼できるソースからではない場合に発生します。これは、Windows 10 によるセキュリティ強化の一環であり、悪意のあるファイルがコンピュータに侵入するのを防ぐためです。
しかし、ダウンロードしたファイルが信頼できる場合、ブロックを解除してファイルを使用する必要があります。手動でブロックを解除することもできますが、手作業で多数のファイルを処理する場合は非常に時間がかかります。こうした場合、バッチファイルを作成することができます。
プログラム
PowerShellを用いる方法
以下のコマンドは、PowerShell を使用して、Downloads フォルダ内のすべてのファイルのロックを解除するバッチファイルです。
powershell -ExecutionPolicy RemoteSigned -Command "dir (New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path -Recurse| Unblock-File"
このバッチファイルの実行には、管理者権限が必要な場合もあります。その場合はファイルを右クリックし、[管理者として実行] を選択してください。
以下、解説になります。
powershell
PowerShell を実行するためのコマンドです。
-ExecutionPolicy RemoteSigned
PowerShell スクリプトの実行ポリシーを設定するオプションです。RemoteSigned
は、ローカルのスクリプトは実行されるが、リモートからのスクリプトは信頼された発行元から署名されたもののみ実行されることを示します。
-Command
PowerShell スクリプトを実行するためのコマンドです。
dir
指定したディレクトリ内のファイルの一覧を表示するコマンドです。
(New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path
(New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path
により、Windows の特殊フォルダであるダウンロードフォルダのパスが取得されます。次に、 -Recurse
パラメータを使用して、フォルダ内のサブフォルダを含めてすべてのファイルを取得しています。最後に、 Unblock-File
を使用して、すべてのファイルのブロックを解除しています。
コマンドプロンプトを用いる場合
for /r "C:\Users\username\Downloads" %f in (*) do powershell -Command "Unblock-File '%f'"
コマンドプロンプトの場合、ダブルクォーテーションで囲まれた部分をシングルクォーテーションで囲む必要があります。また、%f
の部分を%%f
とする必要がある場合があります。
「C:\Users\username\Downloads」は自分の環境に合わせて下さい。
Pythonを用いる場合
import os
#1---フォルダのパスを指定
folder_path = 'C:/Users/username/Downloads'
#2---osを用いてサブディレクトリ取得
for dirpath, _, filenames in os.walk(folder_path):
for filename in filenames:
file_path = os.path.join(dirpath, filename)
#3---systemでpowershellを実行
os.system('powershell -Command "Unblock-File \'{}\'"'.format(file_path))
上記のコードでは、os.walk()メソッドを使用して、指定されたルートディレクトリ以下の全てのファイルを再帰的に検索しています。
以下は解説になります。
#1---フォルダのパスを指定
folder_path = 'C:/Users/username/Downloads'
1の部分ではパスを指定しています。パスは自分の環境に合わせて下さい。
#2---osを用いてサブディレクトリ取得
for dirpath, _, filenames in os.walk(folder_path):
for filename in filenames:
file_path = os.path.join(dirpath, filename)
2の部分では、サブディレクトリを取得してfor構文で回しています。再帰的に取得しています。
#3---systemでpowershellを実行
os.system('powershell -Command "Unblock-File \'{}\'"'.format(file_path))
3の部分では「os.system」でコマンドを実行しています。
「format」については以下をご参照下さい。
おすすめの書籍
この一冊でコマンドプロンプトの使い方が分かる優れものです。何か効率化したいけどどこからしたら良いか分からない時にはこの本を覗いてみて下さい。こんな事もできそうとヒントが貰えると思います。