black-one
Goto Top

PowerShell-VBScript und AltSecurityIdentities

Hallo

Hallo,

ich habe ein kleines Problem und ja Scripting liegt mir nicht direkt. Aber ich muss mich gerade darin einfitzen für Import von Daten ins AD.
Bisher bin ich soweit das ich mittels einer csv Datei und 2 PowerShell Befehlen, Computerkonten anlegen kann und den servicePrincipalNames setzen kann aus der csv Datei ebenfalls heraus.
Die Anzahl der Computerkonten umfasst 5000, daher dieser Weg und nicht alles händisch.

Das was noch fehlt ist das setzen des altSecurityIdentities.

Gefunden habe ich momentan das hier, was als VBS Script nutzbar wäre.
Aber wie bekomme ich es hin, dass die Daten aus der csv gelesen werden und an den beiden Stellen markiert der Client-Name eingetragen wird, oder evtl. aus dem AD ausgelesen da eingetragen wird.
Original:

Const ADS_PROPERTY_APPEND = 3

Set oUser = GetObject ("LDAP:CN=Josef Novak,OU=CertTest,dc=contoso,dc=com")
oUser.PutEx ADS_PROPERTY_APPEND, "altSecurityIdentities", _
Array("X509:<I>S=Czech
Republic,L=Praque,O=Contoso,E=josefn@xxxxxxxxxxx,CN=Josef Novak<S>S=Czech
Republic,L=Praque,O=Contoso,E=josefn@xxxxxxxxxxx,CN=Josef Novak")

oUser.SetInfo

Idee:
Const ADS_PROPERTY_APPEND = 3

Set oUser = GetObject ("LDAP:
CN=HIER CLIENTNAME,CN=Computers,dc=XXXX,dc=local")
oUser.PutEx ADS_PROPERTY_APPEND, "altSecurityIdentities", _
Array("X509:<I>DC=local,O=XXXX,OU=XX,CN=XXXX,E=XXXXX<S>DC=local,O=XXXX,OU=XX,CN=HIER CLIENTNAME")

oUser.SetInfo

Im Endeffekt hätte ich erstmal 3 Befehle separat, was mir vorerst reicht. Auch wenn man vielleicht alles direkt zusammenfassen kann, aber da liegt momentan mein Problem, das ich es nicht weis..

Content-Key: 188680

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

Printed on: April 24, 2024 at 06:04 o'clock

Member: bastla
bastla Jul 26, 2012 updated at 14:03:12 (UTC)
Goto Top
Hallo black-one und willkommen im Forum!

Für eine CSV-Datei "D:\Computers.csv" mit nur einer Spalte (= in jeder Zeile ein Computername) ginge das in VBS (ungetestet) etwa so:
CSV = "D:\Computers.csv"  
Const ADS_PROPERTY_APPEND = 3

Computers = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(CSV).ReadAll, vbCrLf)  

For Each Computer In Computers
    If Trim(Computer) <> "" Then 'Leerzeilen überspringen  
        Set oUser = GetObject ("LDAP://CN=" & Computer & ",CN=Computers,dc=XXXX,dc=local")  
        oUser.PutEx ADS_PROPERTY_APPEND, "altSecurityIdentities", _  
            Array("X509:<I>DC=local,O=XXXX,OU=XX,CN=XXXX,E=XXXXX<S>DC=local,O=XXXX,OU=XX,CN=" & Computer)  
        oUser.SetInfo
    End If
Next
Grüße
bastla
Member: black-one
black-one Jul 26, 2012 at 14:56:04 (UTC)
Goto Top
Hallo,
ja endlich auch mal angemeldet hier face-smile

und wahnsinn wie schnell eine Antwort kam, DANKE schonmal dafür.

Also ich habs nun angepasst noch an uns und über cmd gestartet, lässt sich da evtl. noch nen Fenster einbauen, das man sieht wie weit er ist. Sonst sieht man nicht ob er erfolgreich war oder was fehlt, etc.. Geht das sowas?

Theoretisch wäre es auch möglich meinee vorhanden csv damit zu bedienen oder? Weil habe gerade die vorhanden csv soweit bereinigt das nur noch die Clients beinhaltet waren, und auch ohne Kopfzeile..

mittels den Befehlen hol ich mir nämlich die Konten und die SPN über die CSV rein ins AD, aber mit PowerShell:
import-csv "Datei".csv | foreach {New-ADComputer -Name $_.Name -Description $_.Description}
import-csv "Datei.csv | foreach {Set-ADComputer $_.Name -servicePrincialNames @{Add=$_.Host1,$_.Host2}}

Wo Host1 und Host2 entsprechend für die Werte in der Tabelle stehen für den SPN, und $_.Name ist der Kopf für die Clients.
Member: bastla
bastla Jul 26, 2012 updated at 15:39:25 (UTC)
Goto Top
Hallo black-one!
lässt sich da evtl. noch nen Fenster einbauen, das man sieht wie weit er ist. Sonst sieht man nicht ob er erfolgreich war oder was fehlt, etc.. Geht das sowas?
Zumindest den Fortschritt kannst Du bei einem Start über "cscript D:\DasScript.vbs"" aus dem CMD-Fenster verfolgen, wenn die Schleife etwas angepasst wird:
CSV = "D:\Computers.csv"  
Const ADS_PROPERTY_APPEND = 3

Computers = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(CSV).ReadAll, vbCrLf)  

Anzahl = UBound(Computers)
For i = 0 To Anzahl
    WScript.Echo "Verarbeite " & i & " von " & Anzahl  
    If Trim(Computers(i)) <> "" Then 'Leerzeilen überspringen  
        Set oUser = GetObject ("LDAP://CN=" & Computers(i) & ",CN=Computers,dc=XXXX,dc=local")  
        oUser.PutEx ADS_PROPERTY_APPEND, "altSecurityIdentities", _  
            Array("X509:<I>DC=local,O=XXXX,OU=XX,CN=XXXX,E=XXXXX<S>DC=local,O=XXXX,OU=XX,CN=" & Computers(i))  
        oUser.SetInfo
    End If
Next
Grüße
bastla
Member: black-one
black-one Jul 27, 2012 at 08:13:03 (UTC)
Goto Top
Hi,

habs grad mal so getestet, er verarbeitet zwar was, aber trägt nichts bei altSecurityIdentities ein.
Mi der oberen Variante gehts.
Member: bastla
bastla Jul 27, 2012 at 12:25:11 (UTC)
Goto Top
Hallo black-one!

Sorry - kann ich nicht nachvollziehen; beide Schleifen machen das Gleiche ...

... aber Du könntest auch die erste Variante noch etwas informativer machen, indem Du vor Zeile 8 einfügst
WScript.Echo Computer
- dann aber ebenfalls über "cscript" starten, da ansonsten für jeden Computer eine MsgBox wegzuklicken wäre ...

Grüße
bastla
Member: black-one
black-one Jul 27, 2012 at 13:23:46 (UTC)
Goto Top
na vielleicht find ich noch den Unterschied zwischen den beiden Versionen...

habs grad mal mit eingebunden in die erste Variante und nun seh ich das er die pc´s abarbeitet und entsprechend die einträge setzt.
mit den jeweiligen 2 Powershell Befehlen, shaut es im Moment ganz gut aus..
Muss dies aber noch auf einem anderen System zum Test nachstellen und dann hoffentlich als erledigt sehen...
Ich schreib bestimmt nochmal was hierzu....

Ich danke schonmal für die Mühe und schnelle Unterstützung.
DANNNNKKEEEEEEEE