たまに、管理ユーザーとしてcmdを実行します。便宜上ショートカットを設定しました...
C:\Windows\System32\runas.exe /u:admin.user@domain cmd
ある時点で、通常のユーザーが使用できるマップされたドライブを指すスクリプトを実行したいと思っていました。
C:\Windows\system32>Net Use
Status Local Remote Network
-------------------------------------------------------------------------------
Unavailable L: \\fileserver\shared\path
Microsoft Windows Network
Unavailable X: \\fileserver\shared\temp Microsoft Windows Network
The command completed successfully.
L:ドライブを地図に表示することに特に興味があります。このようなものがうまくいくと思います...
C:\Windows\system32>Net Use l:
Local name l:
Remote name \\fileserver\shared\path
Resource type Disk
The command completed successfully.
C:\Windows\system32>l:
The system cannot find the drive specified.
ドライブを再マップすると、すべてが満足ですが、面倒です(実際には「パス」の方がずっと長くなります)。
C:\Windows\system32>Net Use l: \\fileserver\shared\path
The command completed successfully.
C:\Windows\system32>l:
L:\>
これを試してください:
for /f "TOKENS=3,4" %a in ('Net Use') do Net Use %a %b
C:\> n:
指定されたドライブが見つかりません
C:\> for/f "TOKENS = 3,4"%a in( 'Net Use')do Net Use%a%b
... [出力を無視] ...
C:\> n:
N:\>
このTechnet記事 で説明されているように、これはUACの副作用です。レジストリキーHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
に名前EnableLinkedConnections
、タイプDWORD
、値1
のエントリを追加することで回避できます。これにより、通常のユーザー資格情報の下で作成されたネットワーク接続が、RunAsを介して昇格された特権で実行されるプロセスでも使用できるようになります。
この問題は、VistaおよびWindows 7での管理者アカウントの動作方法が原因で発生します。管理者アカウントでログオンすると、アカウントには2つのトークン(標準ユーザートークンと管理者トークン)が割り当てられます。最初にドライブをマップしたときは、標準のユーザートークンが使用されていました。管理者特権のコマンドプロンプトでは、管理者トークンが使用されます。マップされたドライブは、管理者トークンのコンテキストの外にあります。私はそれが理にかなっていると思います。最善の回避策は、UNCドライブパスを使用するか、管理者特権のコマンドプロンプトでドライブを再マップすることです。これは別の回避策です。推奨されないことに注意してください。 Windows 7ではテストしていません。この記事はVistaに関するものです。
問題: Windowsの起動後は、eにアクセスできません。 g。ドライブn:
この問題を解決するために、接続をアクティブにするだけのバッチファイルを作成しました。
解決:
C:\> n:
指定されたドライブが見つかりません
C:\> ActivateMappedNetworkDrive.bat n:
C:\> n:
N:\>
ActivateMappedNetworkDrive.bat
@echo off
REM Problem: Mapped network drives are not "connected" after restart of windows
REM If you open the windows Explorer and click on such a network drive it works.
REM But if you first try to access it by any script/program it won't work.
REM Solution: Open the desired network drive in a minimized Explorer instance and close it shortly afterwards
REM Michael Hutter / August 2019
if "%1"=="" (
echo Syntax: %0 DriveToConnect:
echo Example: %0 n:
goto End
)
set PROCESSNAME=Explorer.exe
set PREFIX=start /min
set SUFFIX=%1
::First save current pids with the wanted process name
setlocal EnableExtensions EnableDelayedExpansion
set "RETPIDS="
set "OLDPIDS=p"
for /f "TOKENS=1" %%a in ('wmic PROCESS where "Name='%PROCESSNAME%'" get ProcessID ^| findstr [0-9]') do (set "OLDPIDS=!OLDPIDS!%%ap")
::Spawn new process(es)
%PREFIX% %PROCESSNAME% %SUFFIX%
::Wait for a second (may be optional)
choice /c x /d x /t 1 > nul
::Check and find processes missing in the old pid list
for /f "TOKENS=1" %%a in ('wmic PROCESS where "Name='%PROCESSNAME%'" get ProcessID ^| findstr [0-9]') do (
if "!OLDPIDS:p%%ap=zz!"=="%OLDPIDS%" (set "RETPIDS=/PID %%a !RETPIDS!")
)
::Kill the new threads (but no other)
taskkill %RETPIDS% /T > NUL 2>&1
endlocal
:End
一般的な解決法は、ネットワークのウィンドウを待つだけです-しばらくの間、起動が遅くなりますが、ネットワークドライブが切断されないようにします(99%の場合)。
このポリシー設定(GPO)は、コンピューターの構成\管理用テンプレート\システム\ログオン\にあります。コンピューターの起動時およびログオン時に常にネットワークを待機する
よろしくお願いします。すでにバッチファイルを実行している場合、エクスプローラを開くと、ドライブを切断して接続するだけでオーバーヘッドが増えます。
現在、何年もの間、Net Use L:はパスが適用されるのを待っているので、今後も壊れます。切断を実行するか、すでに提案したようにドライブの再マッピングのみを試みることができます。