昇格されたコマンドプロンプトとタスクスケジューラからマップされたドライブが表示されない

管理者特権または管理者のコマンドプロンプトまたはタスクスケジューラ(最高の特権を持つ)からマップされたネットワークドライブにアクセスしようとすると、マップされたドライブは利用できません。 マップされたネットワークドライブを使用しようとすると、エラーが発生しますシステムは指定されたパスを見つけることができません(エラーコード:0x80070003)

以下は、Windows 10バージョン1903を実行しているコンピューターのスクリーンショットです。

ただし、マップされたネットワークドライブには、ファイルエクスプローラーおよび通常の(昇格されていない)コマンドプロンプトからアクセスできます。

さまざまなフォーラムでは、管理者特権のコマンドプロンプトモードで、またはタスクスケジューラでバッチファイルを実行しているときに、マップされたドライブ文字ではなくUNCパスを使用することを推奨しています。 また、マップされたネットワークドライブを使用できるように、特定のスケジュールされたタスクジョブの[ 最高の特権実行]を無効にするようユーザーにアドバイスします。

ただし、標準プロセスと昇格プロセスのマップされたドライブを使用できる永続的なレジストリベースのソリューションがあるため、これらの回避策は必要ありません。

(直接ソリューションに移動)

Microsoft Knowledgebaseの記事KB937624 UACをオンにした後、プログラムが一部のネットワークロケーションにアクセスできなくなることがあり、この問題に対処します。 ただし 、実際の修正はKB3035277 (以下でも説明)で提供されます。

KB937624は次のように述べています。

管理者がWindows Vistaにログオンすると、ローカルセキュリティ機関(LSA)が2つのアクセストークンを作成します。 ユーザーがAdministratorsグループのメンバーであることがLSAに通知されると、LSAは、管理者権限が削除(フィルター)された2番目のログオンを作成します。 このフィルターされたアクセストークンは、ユーザーのデスクトップを起動するために使用されます。 管理者ユーザーが[ユーザーアカウント制御]ダイアログボックスで[許可]をクリックすると、アプリケーションは完全な管理者アクセストークンを使用できます。

ユーザーがWindows Vistaにログオンしていて、ユーザーアカウント制御が有効になっている場合、ユーザーのフィルターされたアクセストークンを使用するプログラムと、ユーザーの完全な管理者アクセストークンを使用するプログラムを同時に実行できます。 LSAは2つの個別のログオンセッション中にアクセストークンを作成したため、アクセストークンには個別のログオンIDが含まれています。

ファイルエクスプローラーから作成されたドライブマッピングは標準ユーザートークンからのものであるため、ドライブは昇格されたトークン(たとえば、管理者コマンドプロンプト、または最高の特権で実行するように構成されたスケジュールタスク)からは表示されません。

UACが「資格情報を要求する」に設定されている場合、マップされたドライブというタイトルの別のMicrosoftの記事KB3035277は、昇格されたプロンプトから利用できません。

KB3035277の状態:

UACが有効な場合、システムはユーザーログオン時に2つのログオンセッションを作成します。 両方のログオンセッションは互いにリンクされています。 1つのセッションは、昇格されたセッション中のユーザーと、最低限のユーザー権限で実行する他のセッションを表します。

ドライブマッピングが作成されると、システムはドライブ文字をUNCパスに関連付けるシンボリックリンクオブジェクト(「DosDevices」)を作成します。 これらのオブジェクトはログオンセッションに固有のものであり、ログオンセッション間で共有されません。

注意:EnableLinkedConnectionsレジストリエントリは、UACが有効な場合、作成されるリンクされたログオンセッションの両方にシンボリックリンクを強制的に書き込みます。

$config[ads_text6] not found

そして、これがJames Finnigan [MSFT]からの役に立つメモです。

「EnableLinkedConnections」ポリシーは、ユーザーがAdministratorsグループのメンバーであり、非昇格と昇格の間の境界を越えて共有していることを前提としています(マルウェアによって意図的に誤ったドライブマッピングにつながる可能性があります)。 これは基本的に、ユーザーを標準ユーザーに移行中の顧客向けの回避策ですが、徐々に移行し、短期的にはAdministratorsグループのメンバーとして維持する必要があります。

修正:マップされたドライブが管理コマンドプロンプトとタスクスケジューラに表示されない

KB3035277に記載されているように、次のレジストリキーにEnableLinkedConnections DWORD(32ビット)値を作成し、そのデータを1設定することで問題を解決できます。

 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System 
  1. レジストリ値を作成/設定するには、レジストリエディター( regedit.exe )を起動します。
  2. 上記のブランチに移動します。
  3. [編集]メニューの[新規]、[DWORD(32ビット)値]の順にクリックします。
  4. DWORD値にEnableLinkedConnectionsという名前をEnableLinkedConnections 、そのデータを1設定します。

  5. レジストリエディターを終了し、Windowsを再起動します。

EnableLinkedConnections値により、Windowsは、フィルターされたアクセストークンとAdministratorsグループのメンバーの完全な管理者アクセストークンの間でネットワーク接続を共有できます。 前述のように、レジストリ値を作成した後、コンピュータを再起動する必要があります。

Windowsを再起動すると、ドライブは通常のプロセスと昇格されたプロセス(つまり、フィルターされたアクセストークンと完全な管理者アクセストークンで実行されているプロセス)でアクセスできます。

.REGファイルの使用

以下の内容から.regファイルを作成することにより、上記の設定を自動化できます。

 Windowsレジストリエディタバージョン5.00 [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System] "EnableLinkedConnections" = dword:00000001 

タスクスケジューラはまだマップされたドライブにアクセスできませんか?

EnableLinkedConnectionsレジストリ設定を有効にしても、スケジュールされたタスクがマップされたネットワークドライブにアクセスできない場合は、次の2つのことを確認する必要があります。

  1. ユーザーアカウント制御関連のセキュリティポリシー、および
  2. スケジュールされたタスクが別のユーザーで実行するように構成されている場合は、そのユーザーアカウントからドライブを再度マップする必要があります。 ( 重要:この記事の最後にある注意を参照)

次のUACポリシー設定が[資格情報を要求する]に構成されている場合、スケジュールされたタスク(最高の特権で実行)は、マップされたネットワークドライブへのアクセスに失敗します。

 ユーザーアカウント制御:管理者承認モードの管理者に対する昇格時のプロンプトの動作 

セキュリティポリシーエディター( secpol.msc )またはレジストリエディターを使用して、上記のポリシーを[コンテンツのプロンプト] (Windowsのデフォルト設定)に設定する必要があります。

上記のセキュリティポリシーを構成するための完全な手順 (および別のレジストリベースのソリューション)は、管理者としてログインした場合でも、UACがパスワードを要求する記事に記載されています。

上記のポリシーをリセットした後、Windowsを再起動します。 マップされたドライブは、最高の特権で実行するように構成されたスケジュールされたタスクで使用できる必要があります。

重要:ただし、 別のユーザーアカウントまたはSYSTEM (LocalSystem)コンテキストでタスクを実行している場合、 EnableLinkedConnectionsレジストリ値にEnableLinkedConnectionsなく、マップされたドライブは表示されません。 これは、ネットワークドライブのマッピングがユーザーごとであるためです。 つまり、スケジュールされたタスクを実行するように構成されている特定のユーザーアカウントでドライブを再度マップする必要があります。

この記事の情報は、Windows VistaからWindows 10に適用されます。ソリューションは、Windows 10 v1903で最後にテストされています。

関連記事