👻

Windowsでファイル実行時に警告が表示されたときの対応まとめ

2024/11/20に公開

発生事象

Windows Server 2019 にて管理者ユーザでファイル実行時に以下のような SmartScreen の警告画面が表示されることがありました。
バッチ処理等で自動化している場合はこの警告が影響して正常に実行されません。
実行対象のファイルを右クリック > 管理者として実行をすると正常に実行されます。
image

原因

直接原因

ファイルにゾーン識別子(Zone.Identifier)というメタデータが付与されていたためです。
https://learn.microsoft.com/ja-jp/openspecs/windows_protocols/ms-fscc/6e3f7352-d11c-4d76-8c39-2516a9df36e8

根本原因

ファイルを外部ネットワーク経由でダウンロードしたためです。
ここでいう外部ネットワークとは、例えば以下のような状況で付与されます。

  • インターネット経由でファイルをダウンロードしたとき
  • プライベート接続含むネットワークドライブ経由でファイルをダウンロードしたとき
  • WSL 環境にファイルを配置したとき

対応

暫定対応

  • 付与されているゾーン識別子を削除する
    以下手順の参考となります。
  1. ゾーン識別子の有無を確認する

    • ファイルが1つの場合
      コマンドプロンプトで以下を実行し、「Zone.Identifier:$DATA」があればゾーン識別子あり
    コマンドプロンプト
    dir <ファイルが存在するディレクトリのパス> /r
    
    2024/11/20  16:45                 4 test.txt
                                     63 test.txt:Zone.Identifier:$DATA
    
    • ファイルが複数ある場合
      PowerShellで削除したいファイルがあるディレクトリに移動し、以下のコマンドで「Zone.Identifier」があることを確認する
    PowerShell
    cd <ファイルが存在するディレクトリのパス>
    Get-ChildItem -Recurse -File | Get-Item -Stream Zone.Identifier -ErrorAction SilentlyContinue
    
  2. ゾーン識別子を削除する

    • ファイルが1つの場合
      対象のファイルを右クリック > プロパティ からセキュリティのチェックを入れる
      image

    • ファイルが複数ある場合
      PowerShellで削除したいファイルがあるディレクトリに移動し、以下のコマンドを実行する

    PowerShell
    Get-ChildItem -Recurse -File | Unblock-File
    

恒久対応

  • インターネットオプションで取得元を信頼済みサイトとして設定する

インターネットオプションの [セキュリティ] タブ内にある [ローカルイントラネット] あるいは [信頼済みサイト] にて、取得元の FQDN または IP アドレスを設定する
image

まとめ

このような対応をすることで事象は回避することができました。
Microsoft 社公式の手順ではないのであくまで参考程度にしていただければと思います。
こちらの情報がどなたかのお役に立てることを願っております。

Discussion