by lunarg on December 3rd 2020, at 21:21

When downloading files from the internet or copying them from a (foreign) server, these files will be marked as blocked by default.

Each file can be unblocked by right-clicking the file and manually selecting unblock, but what if you have a whole bunch of files to unblock? In that case you can use Powershell:

Get-Item -Path "$env:windir\Fonts\*" -Stream "Zone.Identifier" -ErrorAction SilentlyContinue | % { Unblock-File -Path $_.FileName }

The oneliner above consists of two parts:

  1. The flag that says whether or not a file is blocked is stored in a hidden NTFS-stream called Zone.Identifier, which is stored for each individual file. By looking for those hidden streams, we can limit our search executed by Get-Item for files that are actually blocked, and ignoring all the rest.
  2. The files that have been identified as being blocked are then unblocked using the Unblock-File cmdlet.

In the example above, we are running this on the Fonts folder to unblock all font files that have been installed from a foreign server (in fact, by another script). It goes without saying that when operating on restricted folders (such as C:\Windows\Fonts), you will need to run this as admin.