管理者特権のプログラムでマップされたネットワークドライブが見つからない問題を解決する方法

管理者として実行中のアプリでマップされたネットワークドライブを見るのは大変ですよね?ええ、WindowsのUACと権限分離の処理方法のせいで、ちょっと面倒なんです。基本的に、ユーザーセッションでネットワークドライブをマップすると、WindowsはUNCパスを指すシンボリックリンク(DosDevices)を作成しますが、それらのリンクは現在のアクセストークンに紐付けられています。アプリを「管理者として」実行すると、まるで別の世界にいるかのように、昇格された権限を持つ別のトークンで動作しているため、それらのリンクやマップされたドライブは表示されません。つまり、エクスプローラーや通常のコマンドプロンプトでは問題なく表示されるドライブが、管理者権限で実行されたアプリでは表示されないのです。これは、ネットワーク共有で管理者レベルの操作をしようとしている場合、非常にイライラさせられます。

これは、ドライブがグループポリシー経由でマッピングされている場合、または手動でマッピングされている場合に特に当てはまりますnet use。問題の根本原因は、UACが個別の権限トークンを作成し、これらのシンボリックリンクがセッション間で共有されないことです。Windowsがなぜこれほど複雑にする必要があるのか​​は分かりませんが、もちろん、必要以上に複雑にする必要がある場合もあります。

管理者権限で実行されているアプリでマップされたドライブが表示されない問題を修正する方法

方法1: レジストリハックでリンク接続を有効にする

この方法はおそらく最も簡単な修正方法で、Windows Vista、7、8、10、さらにはそれ以降のWindows Serverバージョンでも機能します。レジストリでEnableLinkedConnectionsを有効にすることで、Windowsに異なる権限レベル間でドライブマッピングを同期させるように指示します。

  • スタート メニューまたは実行ダイアログからregedit.exeを開きます。
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Systemに移動します。EnableLinkedConnections表示されない場合は、新しい DWORD(32 ビット)値を作成してください。
  • 名前をEnableLinkedConnectionsにして、値を1に設定します。
  • あるいは、管理者権限で PowerShell またはコマンド プロンプトでこのコマンドを実行することもできます。 reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLinkedConnections" /t REG_DWORD /d 1 /f

重要:編集後、PCを再起動するか、LanmanWorkstationサービス(get-service LanmanWorkstation | Restart-Service –ForcePowerShellで実行)を再起動してください。設定によっては、レジストリの変更を有効にするには再起動が最も簡単な方法です。

この設定は、Windowsにネットワークドライブのマッピングを異なるセキュリティトークン間でミラーリングするよう指示することで、アプリが管理者特権で実行されているかどうかに関係なく、ネットワークドライブを認識できるようにします。私の経験では、この方法は驚くほど効果的です。ただし、UACを完全に無効にすることは推奨されず、この設定のみを無効にすることをお勧めします。

方法 2: Windows ファイル エクスプローラーを管理者モードで実行する (必要な場合)

もう一つ、ちょっとハックっぽい回避策があります。管理者権限で ファイルエクスプローラーを起動し、ドライブにアクセスします。スマートではありませんが、すぐにアクセスしたい場合はこれで十分です。ショートカットまたはタスクを使って、以下のコマンドでexplorer.exeを管理者として実行します。runas /user:Administrator explorer.exe

注:設定によっては、これにより不具合が発生したり、認証情報の入力を求められたりする場合があります。また、ドライブを誰でもアクセスできるようにするのが目的であれば、レジストリの調整の方がよりシンプルです。

その他のコツとヒント

  • スクリプトまたは GPO によって設定されたマップされたドライブの場合は、グループ ポリシーの基本設定またはスタートアップ スクリプトを使用して、すべてのマシンにEnableLinkedConnectionsレジストリ設定を展開することを検討してください。
  • ユーザーディレクトリ内に、ネットワーク共有を指すシンボリックリンクを作成することもできますmklink /D C:\localfolder \\server\shared。ただし、これはシャドウとして機能します。つまり、ログインしているユーザーアカウントに結び付けられており、実際のネットワークドライブマッピングの完全な代替ではないことに注意してください。

総じて、ここでの最大のメリットはEnableLinkedConnections を有効にすることです。Windows はこれを自動的に行わないので少し面倒ですが、一度設定しておけば、アプリが管理者モードで実行されているか通常モードで実行されているかに関係なく、ネットワークドライブは一貫して動作するようになります。

注: EnableLinkedConnections を直接切り替える GPO 設定はないため、大規模に展開するには、好みの管理ツールを使用してレジストリの変更をプッシュする必要があります。

まとめ

  • レジストリ調整のチェックボックス—reg add.../v EnableLinkedConnections /t REG_DWORD /d 1 /f
  • 変更を有効にするには、再起動するかネットワークサービスを再起動してください。
  • その後、昇格したアプリでドライブが表示されるかどうかを確認します

まとめ

管理アプリでネットワークドライブが表示されないというイライラから解放されることを願っています。これは長年の悩みの種ですが、正直に言って、EnableLinkedConnectionsを有効にするのが一番すっきりとした解決策です。ある環境では再起動だけでうまくいきましたし、別の環境ではサービスを素早く再起動するだけでうまくいきました。いずれにせよ、このイライラを我慢するよりも、解決できるようになったのは嬉しいですね。