Identifier les connections aux lecteurs réseaux (mapped drives)

Written by Sebastien Lambot on . Posted in Windows

Il peut être utile pour tout admin système de connaître les lecteurs réseaux de ses utilisateurs et les logins utilisés pour connecter ceux-ci.

A partir de la machine client, il est très simple d’identifier les lecteurs réseaux grâce à la commande net use qui fournit un résultat du type:

C:\Users\Utilisateur\Desktop>net use
Les nouvelles connexions seront mémorisées.
État  Local Distant Réseau
-------------------------------------------------------------------------------
OK    Z:  \\192.168.1.100\mapped_drive      Microsoft Windows Network
OK        \\192.168.1.100\share1            Microsoft Windows Network
OK        \\192.168.1.100\share2            Microsoft Windows Network
La commande s'est terminée correctement.

Le premier représente un lecteur connecté (mapped drive), les autres sont des accès vers des partages non mappés.

Les différentes connections aux dossiers partagés d’un même serveur ne peuvent se faire qu’avec un seul identifiant. Il est impossible sous Windows de connecter par exemple le share1 avec le user1 et le share2 avec le user2 si share1 et share2 se trouvent sur le même serveur.

La commande net use, bien que très pratique ne nous indique pas les identifiants utilisés pour les connections. Pour celà, nous devons faire appel à un autre outil intégré à Windows: le gestionnaire d’identification:

control keymgr.dll

netuse_control2Il est également possible d’utiliser un script, à insérer dans le login script des utilisateurs ou à utiliser avec les PsTools, pour identifier les lecteurs réseaux.

@echo off

Set destinationfile="\\192.168.1.xxx\share\%username%.txt"

:dateparts (%year% and %month% and %day%)
set year=%date:~11,4%
set month=%date:~5,2%
set day=%date:~8,2%
set ttime=%time:~0,5%

SetLocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

Set "userfolder=%userprofile%"
Set "flagP=NetUse-%username%.flag"
Set "nwflag=%userfolder%\%year%%month%%day%-%flagP%"  (add_or_remove dateparts to filename, see post)

IF NOT EXIST "%nwflag%" (
  For /f "tokens=*" %%* in ('dir /B "%userfolder%\*%flagP%" 2^>nul') Do (
   Del /F "%userfolder%\%%*"
  )
  For /f "tokens=1*" %%i in ('net.exe use^|Find "\\"^|Find ":"') Do (
   If /i "!firstline!" NEQ "done" (
    > "%nwflag%" echo.%year%-%month%-%day% %ttime% %userdomain%\%username% [on %computername%]
    >>"%nwflag%" echo.----------------------------------------------------------------
   )
   Set "firstline=done"
   >>"%nwflag%" echo.%%i %%j
  )
  IF NOT EXIST "%destinationfile%" echo.>>"%destinationfile%"
  >>"%nwflag%" echo.& >>"%nwflag%" echo.
  IF EXIST "%destinationfile%" (
    Copy "%destinationfile%"/b + "%nwflag%"/b "%destinationfile%"
  )
)

del "%nwflag%"

EndLocal

Ce script permet de créer un fichier par utilisateur, contenant les lecteurs réseaux, et qui est ensuite envoyé vers un share.

Pour savoir plus précisément avec quel utilisateur ils sont connectés, ce share doit se situer sur le même serveur que les share auxquels ils ont accès. Et dans ce cas, il suffit de regarder dans les permissions du fichier, et d’identifier le propriétaire du fichier, qui est dans notre cas: « sebecam2000 » sur le serveur et « Utilisateur » sur la machine client

netuse_control3

Tags: , , , , ,

Trackback from your site.

Leave a comment

You must be logged in to post a comment.