Windows : découvrons qui est connecté où

Windows : découvrons qui est connecté où
— Oh, rien ne fonctionne pour moi, aidez-moi !
— Ne vous inquiétez pas, nous allons régler ça. Quel est le nom de votre ordinateur…
(classique des appels au support technique)

C'est bien si vous avez un outil tel que BgInfo ou si vos utilisateurs connaissent le raccourci Windows+Pause/Break et savent l'utiliser. On rencontre même de rares exemples qui ont appris le nom de leur machine. Mais souvent, l'appelant a en plus une seconde problématique : connaître le nom/l'adresse IP de l'ordinateur. Et il arrive fréquemment que résoudre ce second problème prenne bien plus de temps que le premier (alors qu'il suffisait d'un simple changement de fond d'écran ou de remettre un raccourci disparu :).
Il est bien plus agréable d'entendre quelque chose comme :
— Tatiana Sergueïevna, ne vous inquiétez pas, je me connecte…


Et pour cela, il n'y a pas besoin de grand-chose.
Pour le spécialiste du support technique, il suffit d'apprendre par cœur les noms des machines et de se souvenir qui utilise quoi.
Avant de décrire la solution que nous utilisons actuellement, je vais brièvement examiner d'autres options, afin de les critiquer à fond d'expliquer mon choix.

  1. BgInfo, Desktop Info et des outils similaires. Il existe même des versions payantes si le budget le permet. L'idée est que des informations techniques sont affichées sur le bureau : nom de la machine, adresse IP, identifiant, etc. Avec Desktop Info, il est même possible d'afficher des graphiques de performance sur une moitié de l'écran.
    Le problème avec BgInfo, par exemple, est que l'utilisateur doit minimiser les fenêtres pour voir les informations nécessaires. Nous avons également observé plusieurs fois avec mes collègues un artefact caractéristique, lorsque le nouveau texte s'affiche par dessus l'ancien.
    Certains utilisateurs sont dérangés par le fait que les admins affichent un 192.168.0.123 effrayant sur la tête d'un chat étiré sur le bureau, ce qui gâche l'esthétique de l'image de fond, et bien sûr, cela démotive énormément et tue complètement l'ambiance de travail.
  2. Un raccourci nommé « Qui suis-je » (ne tentez pas d'y ajouter un point d'interrogation à la fin :). Un raccourci classique sur le bureau, derrière lequel se cache un script soigné ou pas, affichant les informations nécessaires dans une boîte de dialogue. Parfois, au lieu d'un raccourci sur le bureau, on met le script lui-même, ce qui, à mon avis, est de mauvais goût.
    Le problème est que, tout comme dans le premier cas, il faut réduire toutes les fenêtres ouvertes pour lancer le raccourci (nous ne prenons pas en compte les chanceux qui ont une seule fenêtre de solitaire ouverte sur leur poste de travail). Au fait, vos utilisateurs savent-ils où cliquer pour réduire toutes les fenêtres ? Juste, un doigt dans l'œil de l'administrateur.

Le cap'tain rappelle également que les deux méthodes décrites ci-dessus ont un inconvénient majeur : l'utilisateur, qui participe à l'obtention des informations, peut être un peu myope, stupide ou carrément mentir.
Je ne vais pas considérer l'option de l'augmentation de la culture informatique, où tout le monde sait où dans Windows regarder le nom de son ordinateur : c'est une noble cause, mais très difficile. Et si dans l'entreprise il y a une forte rotation du personnel, c'est carrément mortel. Que dire, la plupart du temps, ils ne se souviennent même pas de leur identifiant.

J'ai exprimé mon âme, maintenant passons aux choses sérieuses.
L'idée de base vient d'un membre de Habr. mittel de de cet article.
L'idée est que lors de la connexion de l'utilisateur sous Windows, un script de connexion inscrit les informations nécessaires (heure et nom de la machine) dans un attribut spécifique du compte utilisateur. Et à la déconnexion, un script de déconnexion similaire s'exécute.

J'ai aimé l'idée, mais certaines choses dans la réalisation m'ont dérangé.

  1. La stratégie de groupe dans laquelle sont définis les scripts de connexion et de déconnexion pour les utilisateurs s'applique à tout le domaine, donc les scripts s'exécuteront sur n'importe quelle machine où les utilisateurs se connectent. Si vous utilisez des solutions terminales (par exemple, Microsoft RDS ou des produits Citrix) en plus des stations de travail, cette approche peut être gênante.
  2. Les données sont enregistrées dans l'attribut Department du compte utilisateur, auquel l'utilisateur ordinaire n'a qu'un accès en lecture. En plus de l'attribut du compte utilisateur, le script modifie également l'attribut Department du compte ordinateur, qui par défaut, les utilisateurs ne peuvent pas modifier non plus. Donc, pour que la solution fonctionne, l'auteur propose de changer les paramètres de sécurité par défaut pour les objets AD.
  3. Le format de date dépend des paramètres de localisation sur la machine finale, donc d'une machine, nous pouvons obtenir 10 novembre 2018 14:53, et d'une autre 11/10/18 2:53 p.m.

Pour remédier à ces inconvénients, les actions suivantes ont été prises.

  1. Le GPO est lié non pas au domaine, mais à l'OU avec les machines (je sépare les utilisateurs et les machines par différents OU et je le conseille aux autres). Dans ce cadre, pour le mode de traitement de politique de boucle de rétroaction le mode est configuré sur fusionner.
  2. Le script ne saisira des données que dans le compte d'utilisateur dans l'attribut Info, que l'utilisateur peut changer par lui-même pour son compte.
  3. Un morceau de code a été modifié, générant la valeur de l'attribut

Désormais, les scripts se présentent comme suit :
SaveLogonInfoToAdUserAttrib.vbs

On Error Resume Next
Set wshShell = CreateObject("WScript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
Set adsinfo = CreateObject("ADSystemInfo")
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
strMonth = Month(Now())
If Len(strMonth) < 2 Then
  strMonth = "0" & strMonth
End If
strDay = Day(Now())
If Len(strDay) < 2 Then
  strDay = "0" & strDay
End If
strTime = FormatDateTime(Now(), vbLongTime)
If Len(strTime) < 8 Then
  strTime = "0" & strTime
End If
strTimeStamp = Year(Now()) & "/" & strMonth & "/" & strDay & " " & strTime
oUser.put "info", strTimeStamp & " " & " @ " & strComputerName
oUser.Setinfo

SaveLogoffInfoToAdUserAttrib.vbs

On Error Resume Next
Set wshShell = CreateObject("WScript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
Set adsinfo = CreateObject("ADSystemInfo")
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
strMonth = Month(Now())
If Len(strMonth) < 2 Then
  strMonth = "0" & strMonth
End If
strDay = Day(Now())
If Len(strDay) < 2 Then
  strDay = "0" & strDay
End If
strTime = FormatDateTime(Now(), vbLongTime)
If Len(strTime) < 8 Then
  strTime = "0" & strTime
End If
strTimeStamp = Year(Now()) & "/" & strMonth & "/" & strDay & " " & strTime
oUser.put "info", strTimeStamp & " " & " @ " & strComputerName
oUser.Setinfo

Celui qui trouvera en premier toutes les différences entre le script de connexion et le script de déconnexion aura un bon karma. 🙂
Pour obtenir des informations visuelles, un petit script PS a été créé :
Get-UsersByPCsInfo.ps1

$OU = "OU=MyUsers,DC=mydomain,DC=com"
Get-ADUser -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Informations sur les connexions" -Wait

En résumé, tout se configure rapidement :

  1. nous créons un GPO avec les paramètres nécessaires et le lions à l'unité avec les stations de travail des utilisateurs :
    Windows : découvrons qui est connecté où
  2. nous allons prendre un thé (si AD contient un grand nombre d'utilisateurs, il faudra beaucoup de thé 🙂
  3. nous lançons le script PS et obtenons le résultat :
    Windows : découvrons qui est connecté où
    Dans la partie supérieure de la fenêtre, il y a un filtre pratique où l'on peut filtrer les données par les valeurs d'un ou plusieurs champs. Un clic sur les colonnes du tableau trie les enregistrements selon les valeurs des champs correspondants.

Nous pouvons joliment "emballer" notre solution.
Windows : découvrons qui est connecté où
Pour cela, nous ajouterons un raccourci pour lancer le script aux spécialistes du support technique, où le champ "objet" sera quelque chose comme :
powershell.exe -NoLogo -ExecutionPolicy Bypass -File "servershareScriptsGet-UsersByPCsInfo.ps1"

Si vous avez beaucoup d'employés dans le support technique, vous pouvez distribuer un raccourci avec GPP.

Quelques remarques pour finir.

  • Sur la machine à partir de laquelle le script PS est lancé, le module Active Directory pour PowerShell doit être installé (il suffit d'ajouter les outils d'administration AD dans les fonctionnalités Windows).
  • La plupart des attributs de son compte, l'utilisateur ne peut pas les modifier par défaut. Tenez-en compte si vous décidez d'utiliser un attribut différent de Info.
  • Informez tous les collègues concernés de l'attribut que vous allez utiliser. Par exemple, le même Info est utilisé pour ajouter des notes interactives à la boîte de l'utilisateur dans le panneau d'administration Exchange Server et quelqu'un pourrait facilement l'effacer, ou être peiné lorsque les informations qu'ils ont ajoutées sont effacées par votre script.
  • Si vous avez plusieurs sites Active Directory, tenez compte des délais de réplication. Par exemple, si vous souhaitez obtenir des informations à jour sur les utilisateurs du site AD A, mais que vous exécutez le script à partir d'une machine du site AD B, vous pouvez procéder ainsi :
    Get-ADUser -Server DCfromSiteA -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Informations sur les identifiants" -Wait

    DCfromSiteA — le nom du contrôleur de domaine du site A (par défaut, la commande Get-AdUser se connecte au contrôleur de domaine le plus proche)

Windows : découvrons qui est connecté où

Source des images

Je vous serais reconnaissant de bien vouloir répondre à ce court sondage ci-dessous.

Seuls les utilisateurs enregistrés peuvent participer au sondage. Connectez-vous, s'il vous plaît.

Quels outils utilisez-vous ?

  • bginfo, Desktop info, etc. (logiciels gratuits)

  • analogues payants de bginfo

  • je vais faire comme dans l'article

  • non pertinent, car j'utilise VDI/RDS, etc.

  • pour l'instant, je n'utilise rien, mais j'y pense

  • je n'ai pas besoin de collecter de telles données

  • autre (partagez dans les commentaires)

112 utilisateurs ont voté. 39 utilisateurs se sont abstenus.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster