AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WMI + Benutzer einer lokalen Gruppe auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

WMI + Benutzer einer lokalen Gruppe auslesen

Ein Thema von Piro · begonnen am 9. Dez 2009 · letzter Beitrag vom 9. Dez 2009
Antwort Antwort
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

WMI + Benutzer einer lokalen Gruppe auslesen

  Alt 9. Dez 2009, 19:19
Guten Abend,

wie kann man mit WMI die Benutzer einer lokalen Gruppe bzw. der lokalen Administratoren auslesen? Das Programm wird auf dem jeweiligen Rechner ausgeführt.

Vielen Dank im voraus.

Sven
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#2

Re: WMI + Benutzer einer lokalen Gruppe auslesen

  Alt 9. Dez 2009, 19:28
Das entsprechende WQL-Query ist:Select * from Win32_UserAccount where LocalAccount = True
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#3

Re: WMI + Benutzer einer lokalen Gruppe auslesen

  Alt 9. Dez 2009, 21:04
Danke schön.

Aber mit der Abfrage bekomme ich alle lokalen Benutzer. Ich müsste aber die Abfrage so gestalltem, dass ich ein Gruppe angebe und dann die Mitglieder aufgelistet werden (egal, ob Lokal oder in einer Domäne).

Funktioniert das irgendwie?

Danke im voraus.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#4

Re: WMI + Benutzer einer lokalen Gruppe auslesen

  Alt 9. Dez 2009, 21:14
Die zugehörigen WMI Klassen sind
  • Win32_Account
  • Win32_UserAccount
  • Win32_Group
  • Win32_GroupUser
Entsprechend sind die Queries:
Alle Useraccounts: "select * from Win32_UserAccount where Domain='Domänenname’"
Und alle Gruppen: "select * from Win32_GroupUser where Domain='Domänenname'"

Um alle Nutzer einer Gruppe zu holen braucht man Win32_GroupUser - und da ist ein Trick dabei: Die Win32_GroupUser klasse ist einer Verknüpfung und verbindet eine Gruppe mit allen Accounts die darin sind.

Die Abfrage lautet: select * from Win32_GroupUser where GroupComponent='"'Win32_Group.Domain='DomänenName',',Name='Gruppenname""'
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#5

Re: WMI + Benutzer einer lokalen Gruppe auslesen

  Alt 9. Dez 2009, 21:42
Genial. Hat funktioniert.

Ich mache das jetzt so.
Delphi-Quellcode:
procedure Tfrm_main.Button1Click(Sender: TObject);
var
 SWbemLocator1 : ISWbemLocator;
 aSrv : ISWbemServices;
 vNVS : OleVariant;
 aObjSet : ISWbemObjectSet;
 aNVSDummy : IDispatch;
 pEnum : IEnumVARIANT;
 vOut : OleVariant;
 dwRetrieved : LongWord;
 hRes : HResult;
 Domain, Group : String;
begin
 Domain := GetEnvironmentVariable('COMPUTERNAME');
 Group := edt_localgroup.Text;
 memo_result.Clear;

 SWbemLocator1 := CoSWbemLocator.Create;
 aSrv := SWbemLocator1.ConnectServer(GetEnvironmentVariable('COMPUTERNAME'),'root\cimv2','','','','',0,vNVS);
 aObjSet := aSrv.ExecQuery('select * from Win32_GroupUser where GroupComponent="Win32_Group.Domain='+Chr(39)+Domain+Chr(39)+',Name='+Chr(39)+Group+Chr(39)+'"','WQL', 0, aNVSDummy);
 pEnum := aObjSet.Get__NewEnum as IEnumVARIANT;
 while (TRUE) do
 begin
   hRes := pEnum.Next(1, vOut, dwRetrieved);
   if hRes <> S_OK then
     Break;

// memo_result.Lines.Add(VarToStr(vOut.Name)); // funktioniert leider nicht
    memo_result.Lines.Add(VarToStr(vOut.PartComponent));
 end;
end;
Leider muss ich jetzt PartComponent nehmen, welches mir folgendes ausgibt:
Zitat:
\\<domain>\root\cimv2:Win32_UserAccount.Domain="<d omain>",Name="<benutzername>"
Gibt es noch eine einfache Methode nur den Namen auszugeben? Wenn nicht muss ich die Ausgabe zerlege, was nicht das Problem wäre aber eine einfache Methode wäre angenehm.

Danke.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

Re: WMI + Benutzer einer lokalen Gruppe auslesen

  Alt 9. Dez 2009, 22:35
Hi,

muss es WMI sein ? Schaue Dir mal die Unit MpuNTUser.pas von Luckie an.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz