goodbytes
Goto Top

Domain Computer-SIDs ausgeben

Hallo,
wie kann ich auf die Schnelle die SID`s aller in der Domain enthaltenen Maschinen ausgeben?
Am liebsten wäre mir ein vbs-Script...

Danke im Voraus, ich frag nur schnell, weil ich etwas unter Zeitdruck bin... face-sad

Torsten

Content-ID: 228054

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

Ausgedruckt am: 20.11.2024 um 18:11 Uhr

colinardo
Lösung colinardo 29.01.2014 aktualisiert um 11:13:33 Uhr
Goto Top
Hallo Thorsten,
back-to-topVBS
On Error Resume Next
Set fso = WScript.CreateObject("Scripting.Filesystemobject")  
Set objShell = CreateObject("Wscript.Shell")  

Set objRootDSE = GetObject("LDAP://RootDSE")  
strDNSDomain = objRootDSE.Get("defaultNamingContext")  
strTarget = "LDAP://" & strDNSDomain  

' Connect to Ad Provider  
Set objConnection = CreateObject("ADODB.Connection")  
objConnection.Provider = "ADsDSOObject"  
objConnection.Open "Active Directory Provider"  
Set objCmd =   CreateObject("ADODB.Command")  
Set objCmd.ActiveConnection = objConnection 

objCmd.CommandText = "SELECT Name,objectSID FROM '" & strTarget & "' WHERE objectCategory = 'computer'"  

Const ADS_SCOPE_SUBTREE = 2
objCmd.Properties("Page Size") = 100  
objCmd.Properties("Timeout") = 30  
objCmd.Properties("Searchscope") = ADS_SCOPE_SUBTREE  
objCmd.Properties("Cache Results") = False  

Set objRecordSet = objCmd.Execute
allComputerSIDs = ""  
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
   sSID = objRecordSet.Fields("objectSID")  
   sName = objRecordSet.Fields("Name")  
   strHexSID = OctetToHexStr(sSID)
   strDecSID = HexSIDToDec(strHexSID)
   allComputers = allComputers & sName & ":" & strDecSID & vbCrLf  
   objRecordSet.MoveNext
Loop
fso.OpenTextFile("computer_sids.txt",2,true).Write(allComputers)  
objShell.Run "notepad.exe computer_sids.txt"  


Function OctetToHexStr(ByVal arrbytOctet)
    ' Function to convert OctetString (Byte Array) to a hex string.  
    Dim k
    OctetToHexStr = ""  
    For k = 1 To Lenb(arrbytOctet)
        OctetToHexStr = OctetToHexStr _
            & Right("0" & Hex(Ascb(Midb(arrbytOctet, k, 1))), 2)  
    Next
End Function

Function HexSIDToDec(ByVal strSID)
    ' Function to convert most hex SID values to decimal format.  
    Dim arrbytSID, lngTemp, j
    ReDim arrbytSID(Len(strSID)/2 - 1)
    For j = 0 To UBound(arrbytSID)
        arrbytSID(j) = CInt("&H" & Mid(strSID, 2*j + 1, 2))  
    Next
    If (UBound(arrbytSID) = 11) Then
        HexSIDToDec = "S-" & arrbytSID(0) & "-" _  
            & arrbytSID(1) & "-" & arrbytSID(8)  

        Exit Function
    End If
    If (UBound(arrbytSID) = 15) Then
        HexSIDToDec = "S-" & arrbytSID(0) & "-" _  
            & arrbytSID(1) & "-" & arrbytSID(8)  

        lngTemp = arrbytSID(15)
        lngTemp = lngTemp * 256 + arrbytSID(14)
        lngTemp = lngTemp * 256 + arrbytSID(13)
        lngTemp = lngTemp * 256 + arrbytSID(12)
        HexSIDToDec = HexSIDToDec & "-" & CStr(lngTemp)  
        Exit Function
    End If
    HexSIDToDec = "S-" & arrbytSID(0) & "-" _  
        & arrbytSID(1) & "-" & arrbytSID(8)  
    lngTemp = arrbytSID(15)
    lngTemp = lngTemp * 256 + arrbytSID(14)
    lngTemp = lngTemp * 256 + arrbytSID(13)
    lngTemp = lngTemp * 256 + arrbytSID(12)
    HexSIDToDec = HexSIDToDec & "-" & CStr(lngTemp)  
    lngTemp = arrbytSID(19)
    lngTemp = lngTemp * 256 + arrbytSID(18)
    lngTemp = lngTemp * 256 + arrbytSID(17)
    lngTemp = lngTemp * 256 + arrbytSID(16)
    HexSIDToDec = HexSIDToDec & "-" & CStr(lngTemp)  
    lngTemp = arrbytSID(23)
    lngTemp = lngTemp * 256 + arrbytSID(22)
    lngTemp = lngTemp * 256 + arrbytSID(21)
    lngTemp = lngTemp * 256 + arrbytSID(20)
    HexSIDToDec = HexSIDToDec & "-" & CStr(lngTemp)  
    If (UBound(arrbytSID) > 23) Then
        lngTemp = arrbytSID(25)
        lngTemp = lngTemp * 256 + arrbytSID(24)

        HexSIDToDec = HexSIDToDec & "-" & CStr(lngTemp)  
    End If
End Function

back-to-topPowershell:
Import-Module ActiveDirectory
Get-ADComputer -Filter * | select Name,SID | out-file "c:\computer_sids.txt"  
Grüße Uwe
datoda
Lösung datoda 29.01.2014 aktualisiert um 11:13:36 Uhr
Goto Top
Ich hätte eine kurze dsquery Abfrage für dich:

dsquery computer "OU=bla,DC=test,DC=lan" | dsget computer -sid > C:\temp\sidausgabe.txt
psannz
Lösung psannz 29.01.2014 aktualisiert um 11:13:37 Uhr
Goto Top
Sers,

Powershell!

Import-Module ActiveDirectory
Get-ADComputer -Filter * | ft Name, SID

Der Modulimport ist nur für 2008r2 und ältere Systeme nötig.

Grüße,
Philip
goodbytes
goodbytes 29.01.2014 um 11:13:18 Uhr
Goto Top
Super, es funktioniert so mit der PowerShell und auch bestens mittels vbs.

Vielen Dank für eure schnelle Hilfe !!! face-smile face-smile face-smile

Torsten