Windows: scopriamo chi è connesso

Windows: scopriamo chi è connesso
— Oh, niente funziona, aiutatemi!
— Non preoccuparti, sistemiamo tutto. Dimmi il nome del computer…
(classico esempio delle chiamate al supporto tecnico)

Va bene, se hai uno strumento tipo BgInfo o i tuoi utenti conoscono la scorciatoia Windows+Pause/Break e sanno come usarla. Ci sono anche esemplari rari che hanno imparato il nome della loro macchina. Ma spesso, oltre al problema principale, il chiamante ha un secondo problema: scoprire il nome/l'indirizzo IP del computer. E spesso la risoluzione di questo secondo problema richiede molto più tempo rispetto al primo (mentre doveva solo cambiare lo sfondo o ripristinare l'icona scomparsa :)).
E sarebbe molto meglio sentire qualcosa del genere:
— Tatiana Sergeyevna, non si preoccupi, mi connetto subito...


E per farlo non serve molto.
Per il tecnico di supporto, è sufficiente memorizzare i nomi delle macchine e sapere chi lavora su cosa.
Prima di descrivere la soluzione che stiamo utilizzando ora, esaminerò brevemente altre opzioni, per criticarle in modo costruttivo spiegare la mia scelta.

  1. BgInfo, Desktop Info e simili. Se hai molti soldi, ci sono anche opzioni a pagamento. La sostanza è che vengono visualizzate informazioni tecniche sul desktop: nome della macchina, indirizzo IP, nome utente, ecc. In Desktop Info puoi anche inserire grafici della performance che occupano metà dello schermo.
    Non mi piace il fatto che, per lo stesso BgInfo, ad esempio, l'utente deve minimizzare le finestre per vedere i dati necessari. Inoltre, io e i miei colleghi abbiamo notato diverse volte in BgInfo un artefatto caratteristico, dove il nuovo testo viene sovrascritto a quello vecchio.
    Alcuni utenti sono infastiditi dal fatto che gli amministratori scrivano spaventosi 192.168.0.123 sulla faccia di un gatto allungato sullo sfondo, rovinando l'estetica dell'immagine di sfondo, e, naturalmente, questo demotiva tremendamente e uccide completamente l'umore lavorativo.
  2. Un collegamento tipo 'Chi sono' (non tentate di aggiungere un punto interrogativo alla fine :). Un classico collegamento sul desktop, dietro cui si nasconde uno script ordinato o meno, che visualizza informazioni necessarie in forma di finestra di dialogo. A volte, invece di un collegamento sul desktop, viene posizionato direttamente lo script, il che IMO è poco elegante.
    Il problema è che per eseguire il collegamento, come nel primo caso, è necessario minimizzare tutte le finestre aperte (non consideriamo i fortunati che hanno solo una finestra aperta che mostra un solitario). A proposito, i tuoi utenti sanno dove devono cliccare per minimizzare tutte le finestre? Corretto, al dito nell'occhio dell'amministratore.

Inoltre, il mio collega fa notare che entrambi i metodi descritti sopra hanno il principale difetto che nel recupero delle informazioni è coinvolto l'utente, che potrebbe essere un po' miope, stupido e, in generale, potrebbe mentire.
Non prenderò in considerazione l'opzione che prevede una maggiore alfabetizzazione informatica, dove tutti sanno dove guardare in Windows per scoprire il nome della loro macchina: è un'impresa nobile, ma molto difficile. E se in azienda c'è una continua rotazione del personale, diventa addirittura senza speranza. A dire il vero, nella maggior parte dei casi nemmeno ricordano il proprio nome utente.

Ho sfogato l'anima, ora passiamo al sodo.
Alla base è stata presa l'idea di un hurbano mittel di di questo articolo.
L'idea è che, al momento del login dell'utente in Windows, lo script di login memorizza le informazioni necessarie (orario e nome della macchina) in un attributo specifico dell'account utente. E al momento del logout viene eseguito un script di logout simile.

L'idea mi è piaciuta, ma nell'implementazione c'è qualcosa che non mi ha convinto.

  1. La policy di gruppo, che definisce gli script di login e logout per gli utenti, si applica all'intero dominio, quindi gli script verranno eseguiti su qualsiasi macchina su cui effettuano il login gli utenti. Se, oltre ai workstation, utilizzi soluzioni terminali (ad esempio Microsoft RDS o prodotti Citrix), questo approccio sarà scomodo.
  2. I dati vengono memorizzati nell'attributo Department dell'account utente, al quale l'utente normale ha solo accesso in lettura. Oltre all'attributo dell'account utente, lo script apporta modifiche anche all'attributo Department dell'account della macchina, il quale gli utenti non possono modificare di default. Pertanto, per far funzionare la soluzione, l'autore suggerisce di modificare le impostazioni di sicurezza standard per gli oggetti AD.
  3. Il formato della data dipende dalle impostazioni di localizzazione sulla macchina finale, quindi da una macchina possiamo ottenere 10 novembre 2018 14:53, mentre da un'altra 11/10/18 2:53 p.m.

Per eliminare questi difetti è stata fatta la seguente operazione.

  1. Il GPO è linkato non al dominio, ma all'OU con i computer (io separo utenti e computer in diverse OU e lo consiglio a tutti). In questo modo per il modo di elaborazione della policy di loopback è impostato il modo merge.
  2. Lo script memorizzerà i dati solo nell'account utente nell'attributo Info, che l'utente può modificare autonomamente per il proprio account.
  3. È stato modificato un pezzo di codice che genera il valore dell'attributo

Ora gli script appaiono così:
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

Chi sarà il primo a trovare tutte le differenze tra lo script di accesso e quello di disconnessione, meritando un bonus karma. 🙂
È stato creato anche un piccolo script PS per avere informazioni visive:
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 "Informazioni sui logon" -Wait

In definitiva, tutto si imposta in un attimo:

  1. creiamo un GPO con le impostazioni necessarie e lo colleghiamo all'unità organizzativa con le postazioni degli utenti:
    Windows: scopriamo chi è connesso
  2. andiamo a bere un tè (se AD ha un gran numero di utenti, ci vuole molto tè 🙂
  3. eseguiamo lo script PS e otteniamo il risultato:
    Windows: scopriamo chi è connesso
    Nella parte superiore della finestra c'è un comodo filtro dove è possibile selezionare i dati in base ai valori di uno o più campi. Un clic sulle colonne della tabella ordina le voci in base ai valori dei rispettivi campi.

Possiamo 'imballare' elegantemente la nostra soluzione.
Windows: scopriamo chi è connesso
Per questo aggiungiamo un collegamento per eseguire lo script ai tecnici di supporto, dove nel campo 'oggetto' ci sarà qualcosa del genere:
powershell.exe -NoLogo -ExecutionPolicy Bypass -File "servershareScriptsGet-UsersByPCsInfo.ps1"

Se ci sono molti tecnici di supporto, possiamo distribuire il collegamento tramite GPP.

Alcuni ultimi appunti.

  • Nel computer da cui viene eseguito lo script PS deve essere installato il modulo Active Directory per PowerShell (basta aggiungere gli strumenti di amministrazione AD nei componenti di Windows).
  • La maggior parte degli attributi dell'account utente non possono essere modificati per impostazione predefinita. Tieni presente questo se decidi di utilizzare un attributo diverso da Info.
  • Informate tutti i colleghi coinvolti su quale attributo intendete utilizzare. Ad esempio, lo stesso Info viene utilizzato per aggiungere note interattive alla casella utente nell'amministrazione di Exchange Server e qualcuno potrebbe facilmente sovrascriverlo, o potrà rimanere deluso se le informazioni che ha aggiunto vengono sovrascritte dal tuo script.
  • Se hai più siti Active Directory, fai attenzione ai ritardi di replicazione. Ad esempio, se desideri ottenere informazioni aggiornate sugli utenti dal sito AD A, ma esegui lo script da una macchina nel sito AD B, puoi fare così:
    Get-ADUser -Server DCfromSiteA -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Informazioni sugli account" -Wait

    DCfromSiteA — il nome del controller di dominio del sito A (per impostazione predefinita, il cmdlet Get-AdUser si connette al controller di dominio più vicino)

Windows: scopriamo chi è connesso

Fonte delle immagini

Sarei grato se potessi completare un breve sondaggio qui sotto.

Solo gli utenti registrati possono partecipare al sondaggio. Accedi, per favore.

Quale strumento usate?

  • bginfo, Desktop info etc. (software gratuito)

  • analoghi a pagamento di bginfo

  • farò come nell'articolo

  • non attuale, poiché utilizzo VDI/RDS etc.

  • non uso ancora nulla, ma ci penso

  • non ho bisogno di raccogliere tali dati

  • altro (condividi nei commenti)

112 utenti hanno votato. 39 utenti si sono astenuti.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster