commanderts
Goto Top

Domänen-PCs nach lokalen Admins durchsuchen

Hallo zusammen!!!

Ich habe in meiner Firma mehrere Domänen, in denen einige User auf ihren PCs lokale Administratoren sind. Diese PCs würde ich gerne in einem Duchlauf/Domäne nach den eingetragenen lokalen Admins "scannen", um eine Übersicht zu bekommen und den Usern mit falscher Berechtigung diese zu nehmen.
Kennt Ihr da eine Möglichkeit?

Gruß, Tobias!

Content-ID: 88770

Url: https://administrator.de/contentid/88770

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

gemini
gemini 30.05.2008 um 11:01:52 Uhr
Goto Top
Hallo Tobias,

ein Schnipsel aus dem Microsoft Fundus, den du ggfs. an deine Bedürfnisse anpassen kannst.

List Members of a Local Group
Set objNetwork = CreateObject("WScript.Network")  
strComputer = objNetwork.ComputerName
strGroup = "Administrators"  
WScript.Echo "Computer: " & strComputer  
Set objGroup = GetObject("WinNT://" & strComputer & "/" & strGroup & ",group")  
WScript.Echo "  Administrators group members:"  
For Each objMember In objGroup.Members
  WScript.Echo "    " & objMember.Name  
Next

Grüße,
gemini
commanderts
commanderts 30.05.2008 um 11:12:11 Uhr
Goto Top
Danke für die schnelle Antwort!
Das ist auf jeden Fall schon mal ein sehr interessanter Ansatz...
Ausgegeben wird es aber so leider nur für den PC, auf dem das Script ausgeführt wird. Aber vielleicht kann man da noch was basteln, hab nur leider nicht sooo viel Ahnung von Visual Basic. Werd mal etwas experimentieren!
Vielleicht kennt noch jemand ein tool, das diese Aufgabe direkt bewältigt?
darkuser
darkuser 30.05.2008 um 11:22:10 Uhr
Goto Top
Hi Tobias,

um das automatisiert auslesen zu können (erst einmal rein theoretisch) müsste auf jedem der Rechner das gleiche OS installiert sein, da sonst die Pfade nicht mehr unbedingt stimmen müssten.

Beispiel:
98 und Vista

Welches OS hast du denn, dann kann man auch eine Lösung erarbeiten.

Gruß darkuser

edit:
ansonsten schau mal hier, ob das so funktioniert
&query=administratoren
Dani
Dani 30.05.2008 um 11:25:44 Uhr
Goto Top
Hi Tobi,
ich würde eine versteckte Freigabe erstellen und dem User "Jeder" VOllzugriff geben. Nun zum Script:
@echo off & setlocal

if not exist "\\server\freigabe$"\%computername%" net localgroup administratoren >> "\\server\freigabe\%computername%.txt"  
Diese Zeile würde ich in ein vorhandenes Loginscript (User- / Computerskript für 1-2 Wochen einbinden und gut ist.

@Biber
Hab ich doch auch mal ein Onliner geschrieben. :-P


Gruss,
Dani
gemini
gemini 30.05.2008 um 11:26:42 Uhr
Goto Top
Ich nehme an, das Inventarisierungen oder Managementsoftware das auslesen kann.

hab nur leider nicht sooo viel Ahnung von Visual Basic
Das ist ja auch VBScript face-wink Eine gute Gelegenheit sich mal mit der Materie zu beschäftigen.

Zum Basteln hab ich leider momentan keine Zeit aber eine Skizze gebe ich dir gerne.
Das Script könnte als Logonscript ausgeführt werden. Die Ausgabe als Textdatei (benannt nach dem Computernamen) in einer Freigabe auf einem Server abgelegt werden.
Möglich wäre auch, den Client per Richtlinie einen entspr. Registrierungsschlüssel unter RunOnce mitzugeben. Damit würde es je Client nur einmal ausgeführt werden.

Grüße,
gemini
commanderts
commanderts 30.05.2008 um 11:42:32 Uhr
Goto Top
@gemini: Da hast Du recht, es wird Zeit, sich mit dem Kram mal auseinander zu setzen ;)

@darkuser: Wir haben fast ausschließlich XP im Einsatz. Ca. 30 PCs mit 2000 und ungefähr 2 mit NT. In den weltweiten Niederlassungen sind allerdings nur XP Rechner, da wär mir das erstmal am wichtigsten...

@Dani: Werde ich auch mal testen, danke!
darkuser
darkuser 30.05.2008 um 12:40:03 Uhr
Goto Top
@tobias

Ich weiß zwar nicht, ob du auch so etwas gesucht hast, aber das hat laut dem entsprechendem Thread auch in einem AD funktioniert.

Gruppenzugehörigkeit der USer auslesen

VG darkuser
Iwan
Iwan 30.05.2008 um 14:09:21 Uhr
Goto Top
@darkuser
Jose liest nur die Daten aus dem AD aus, aber nicht vom lokalen Computer

@tobias
On Error Resume Next
Set FSObj = CreateObject("Scripting.FileSystemObject")  
strPath = FSObj.GetAbsolutePathName("I:\Admins")  
strCompListe = strPath & "\Computer.txt"  
Set objCompFile = FSObj.OpenTextFile(strCompListe, 1)
Const wbemFlagReturnImmediately = &H10
Const wbemFlagForwardOnly = &H20
Do While Not objCompFile.AtEndOfStream
    arrComputers = Array(CompName)
    strComputer = objCompFile.ReadLine
    Set textfile = FSObj.CreateTextFile(strPath & "\" & strComputer & ".txt")  
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
    Set colAccounts = objWMIService.ExecQuery("Select * From Win32_Group Where Domain ='" & strComputer & "' and SID='S-1-5-32-544'")  
    For Each objItem In colAccounts
        strAdminGrp = objItem.Name
    Next
    Set objGroup = GetObject("WinNT://" & strComputer & "/" & strAdminGrp & ",group")  
        textfile.writeline "========================"  
        textfile.writeline "Request...: " & strComputer  
        textfile.writeline "Stand.....: " & Date  
        textfile.writeline "========================"  

    For Each objMember In objGroup.Members
        textfile.writeline objMember.Name
    Next
        textfile.Close
        Set strAdminGrp = Nothing
        Set strComputer = Nothing
Loop
objCompFile.Close
Wscript.Echo "Fertig!"  
das Skript funktioniert übers Netzwerk von deinem PC aus
Voraussetzung sollte sein, das du Adminrechte auf den PC hast
ändere in der 4. Zeile den Ordner ab -> I:\Admins
erstell in deinem Ordner eine 'Computer.txt', wo du die Hostnamen der Rechner untereinander einträgst, die du abfragen willst
funktioniert bei mir auf englischen und deutschen XP-Versionen, mit SP1 und SP2, sowie mit Win2K SP4 (deutsch)
das Ergebnis ist eine TXT-Datei mit dem Computernamen, darin enthalten alle Accounts, die in der lokalen Admin-Gruppe eingetragen sind
Iwan
Iwan 30.05.2008 um 14:44:21 Uhr
Goto Top
da fehlt aber leider ein .txt und ein $, Dani face-wink
if not exist "\\server\freigabe$"\%computername%.txt" net localgroup administratoren >> "\\server\freigabe$\%computername%.txt"  
Biber
Biber 30.05.2008 um 16:53:36 Uhr
Goto Top
@Dani (mit Verweis auf Iwan)
Hab ich doch auch mal ein Onliner geschrieben. :-P
Der Zweizeiler ist zwar gewissermaßen online, aber ich glaube.... *rumdrucks*
...
*räusper*
...
Okay, prima...

Phase 2: Nächste Woche üben wir funktionierende Oneliner...

Schönes Wochenende
Biber
Dani
Dani 30.05.2008 um 17:05:46 Uhr
Goto Top
@Biber
*ups* Mal wieder nicht bei der Sache gewesen.

Dir kann ich das Wassser natürlich nicht reichen, aber ich geb mir Mühe. face-smile Ich guck eben lieber dir zu....
Ich bin dabei...

Thx & dir und deinen Bekannten auch face-wink
Dani
bastla
bastla 31.05.2008 um 12:01:24 Uhr
Goto Top
@Dani's 1-Liner

Falls es auch ein paar Zeilen mehr sein dürften, ließe sich das Ganze (bei ansonsten gleicher Vorgangsweise) auch noch etwas übersichtlicher als .csv-Datei ausgeben:
@echo off & setlocal
set "Ziel=\\Server\Freigabe$"  
set "Comp=%Ziel%\ComputerErledigt.txt"  
set "Adm=%Ziel%\AdminKonten.csv"  

::Aktueller Computer bereits erfasst?
if exist "%Comp%" findstr /i "%ComputerName%" "%Comp%">nul && goto :eof  

::Zeilennummer, ab welcher die Konten ausgegeben werden (= nach Trennzeile "---------------", bei XP Pro zB Zeile 6), ermitteln 
set Nr=
for /f "delims=:" %%i in ('net localgroup administratoren^|findstr /b /n /c:"-------"') do if not defined Nr set Nr=%%i  
::Falls die Zeile nicht gefunden wurde, Batch beenden
if not defined Nr goto :eof

::Ausgabe der gesuchten Daten
for /f "delims=" %%a in ('net localgroup administratoren^|more +%Nr%^|findstr /v /c:"Der Befehl wurde "') do echo %ComputerName%;%%a >>"%Adm%"  
::Eintragen des Computers als "erledigt" 
echo %ComputerName% >>"%Comp%"  
Grüße
bastla