Come visualizzare utenti locali

martedì 11 luglio 2006 - 16.14

us01739 Profilo | Expert

Buongiorno a tutti, forse mi sto perdendo in un bicchiere d'acqua, ma ho problemino che mi assilla...
Sto cercando di fare un'applicazione in vb.net che verifica quali sono gli utenti locali del gruppo administrators.
In VBS facevo più o meno così:

strComputer = "."
Set group = GetObject("WinNT://" & StrComputer & "/administrators,group")
For Each adminName In group.Members
WScript.Echo adminname.name
Next

.. ma in vb.net sono bloccato.

Grazie fin da ora a tutti.
Robby
---------------------------------------------------
Roberto Gelmini - Microsoft Certified Professional
www.robertogelmini.com
---------------------------------------------------

revontulet Profilo | Junior Member

>Buongiorno a tutti, forse mi sto perdendo in un bicchiere d'acqua,
>ma ho problemino che mi assilla...
>Sto cercando di fare un'applicazione in vb.net che verifica quali
>sono gli utenti locali del gruppo administrators.
>In VBS facevo più o meno così:

anche io pensavo che fosse semplice prima di provarci poi quello che ho trovato /provato e' alquanto contorto rispetto al vbs
Premetto che non ho grande esperienza in .net mentre ho scritto un bel po di codice vbs per gestione utente locali e in AD.

usando obbligatoriamente il namespace System.DirectoryServices e un codice del tipo

Dim percorso As String
percorso = "WinNT://nomemacchina"
Dim wksComputer As New DirectoryEntry(percorso)
Dim wksUser As DirectoryEntry

For Each wksUser In wksComputer.Children
If wksUser.SchemaClassName = "User" Then
utente =

si ottengono tutti gli utenti locali .. per sapere se un utente e' membro di administrators
occorre impostare
Dim wksGroup As New DirectoryEntry("WinNT://nomemacchina/Administrators,group", "nomeadmin", "pwdadmin", False)
PathUtente = "WinNT://WORKGROUP/nomemacchina/" & utente
If wksGroup.Invoke("IsMember", PathUtente ) Then
TrovatoAdmin = utente

quindi invece che il comodo vbs che estrae la lista dei menbri di administrators
qui occorre verificare se ogni utente e ' membro di administrators
( notare la necessita della pwd in chiaro e quella del workgroup nella stringa del pathutente
N.B. -prova eseguita con macchina non in dominio)

esiste inoltre la possibilita di ottenere per ogni utente la lista dei gruppi locali a cui appartiene:

Dim objUser As New DirectoryEntry("WinNT://macchinalocale/utente")
Dim MembersCollection As Object
MembersCollection = objUser.Invoke("Groups")
Dim group As Object
For Each group In MembersCollection
ListBox1.Items.Add(New ListItem(group.Name))
Next

quello che proprio non ho trovato e il modo di ottenere direttamente la lista degli utenti partendo da un gruppo locale il codice che si potrebbe supporre

percorso = "WinNT://nomemacchina/administrators"
Dim wksgroup As New DirectoryEntry(percorso)
Dim wksUser As DirectoryEntry

For Each wksUser In wksgroup.Children

non funziona poiche' viene segnalato che la proprieta children vale per gli oggetti AD



us01739 Profilo | Expert

Alla fine ho risolto il problema in questo modo:

Dim MembersCollection As IADsMembers
Dim GroupToEnum As New DirectoryEntry("WinNT://" & hostname & "/administrators,group")
Dim MembersCollection As IADsMembers
Dim GroupToEnum As New DirectoryEntry("WinNT://" & hostname & "/administrators,group")
MembersCollection = GroupToEnum.Invoke("Members")
Dim filter As System.Object() = {"user"}
MembersCollection.Filter = filter
Dim user As IADsUser
Dim grp As IADsGroup
dim return_str,hostname as string


For Each user In MembersCollection
return_str = return_str & user.ADsPath.Substring(8) & ";"
Next

Dim grpfilter As System.Object() = {"group"}
MembersCollection.Filter = grpfilter

For Each grp In MembersCollection
return_str = return_str & grp.ADsPath.Substring(8) & ";"
Next


---------------------------------------------------
Roberto Gelmini - Microsoft Certified Professional
www.robertogelmini.com
---------------------------------------------------

revontulet Profilo | Junior Member

complimenti per la soluzione
Nella mia risposta mi son davvero perso in un bicchier d'' acqua non considerando ADSI

comunque sulla mia macchina ( 2k3 in workgroup) richiamando activeds nella webform funziona anche cosi :

Dim grp As IADsGroup
Dim memberList As IADsMembers
Dim member As IADs
Dim return_str As String


grp = GetObject("WinNT://WORKGROUP/hostname/administrators")

memberList = grp.Members
For Each member In memberList
return_str = return_str & member.Name & ";"
Next

( codice da MSDN
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adsi/adsi/iadsgroup_property_methods.asp )
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5