Avatar billede worrax Nybegynder
15. august 2004 - 14:23 Der er 9 kommentarer og
1 løsning

Oprettelses script..

Hej,

Er der nogle som ved noget om masse bruger oprettelse i windows 2000 server..

Jeg er nemlig it ansvarlig på en efterskole.. og nu skal jeg til at tilføje 100 elever.. efter hvad klasse de er i ...

Så hvis man kunne lave et script ... hvor man bare smed navn, brugernavn, og klasse ind ... og den så selv smed dem ind i en forudbestemt gruppe, homedir .. osv..

kan man det?
Avatar billede oskar Nybegynder
15. august 2004 - 15:48 #1
Det kan man godt.

'    whs-script til brugeroprettelser på win2000 server ud fra netstudieudtrækket fra gas NY
'    Søren Aagaard
'    ITC københavns amt
'    juli 2003
'    version 1.3

dim dicini, aItems, aKeys, i
set dicini = parseINI("c:\administration\brugeradm\server.ini")
aItems = dicini.items
aKeys = dicini.keys

root = replace(aItems(0) & "",chr(34),"")
rod_drev_p=replace(aItems(1) & "",chr(34),"")
bruger_rod_p=replace(aItems(2) & "",chr(34),"")
rod_drev_e=replace(aItems(3) & "",chr(34),"")
bruger_rod_e=replace(aItems(4) & "",chr(34),"")
sDomain=replace(aItems(5) & "",chr(34),"")
sServer=replace(aItems(6) & "",chr(34),"")
share_navn=replace(aItems(7) & "",chr(34),"")
pwtype=replace(aItems(8) & "",chr(34),"")
pwlength=replace(aItems(9) & "",chr(34),"")
oup=replace(aItems(10) & "",chr(34),"")
ouk=replace(aItems(11) & "",chr(34),"")
plog=replace(aItems(12) & "",chr(34),"")
slog=replace(aItems(13) & "",chr(34),"")
profiltype=replace(aItems(14) & "",chr(34),"")
profilmappe=replace(aItems(15) & "",chr(34),"")
tsprofilmappe = replace(aItems(16) & "",chr(34),"")
pershare = replace(aItems(17) & "",chr(34),"")
root = replace(root & "",chr(32),"")
rod_drev_p=replace(rod_drev_p & "",chr(32),"")
bruger_rod_p=replace(bruger_rod_p & "",chr(32),"")
rod_drev_e=replace(rod_drev_e & "",chr(32),"")
bruger_rod_e=replace(bruger_rod_e & "",chr(32),"")
sDomain=replace(sDomain & "",chr(32),"")
sServer=replace(sServer & "",chr(32),"")
share_navn=replace(share_navn & "",chr(32),"")
pwtype=replace(pwtype & "",chr(32),"")
pwlength=replace(pwlength & "",chr(32),"")
oup=replace(oup & "",chr(32),"")
ouk=replace(ouk & "",chr(32),"")
plog=replace(plog & "",chr(32),"")
slog=replace(slog & "",chr(32),"")
profiltype=replace(profiltype & "",chr(32),"")
profilmappe=replace(profilmappe & "",chr(32),"")
tsprofilmappe=replace(tsprofilmappe & "",chr(32),"")
pershare=replace(pershare & "",chr(32),"")

'    dimensionering af variable

on error resume next
Set oDomain = getObject("WinNT://" & sDomain)
oDomain.Filter = array("User")
dim filesys
Set filesys =  Wscript.CreateObject("Scripting.FileSystemObject")
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = Wscript.CreateObject("Wscript.Shell")
        dim start, slut
        dim oxl
        dim status
        dim u
        dim u1
        dim c
        dim root
        dim textxla
        dim StiTilFil
        dim crlf
        dim oargs
        dim pword, pwtype, pwlength
        dim sfolderpath
        dim ok
        dim findes, log, meddel
    dim oUser
    'dimensionering af tegnkonstanter (anførselstegn og kolon)
        anf=chr(34)
        col=chr(58)
        ok = 0
        findes = 0
        crlf = chr(13) & chr(10)

        Set shell=Wscript.CreateObject("Wscript.shell")
        StiTilFil = "c:\administration\brugeradm\samlet.txt"

        on error resume next
   
    'indlæsning og aktivering af serverdata
    '*************************************************************
    meddel = WshShell.Popup("Brugeroprettelsen er igang. En sammenfatning vil dukke op når den er færdig." , 7, "ITC Brugeroprettelse", 0 + 64)
start = Timer
    ' hvis der stilles krav om passwordlængde og passwordtypen er sat til 1 nulstilles kravet midlertidigt
        if pwtype = "1" and pwlength > 0 then
            shell.run "net accounts /minpwlen:0"
        end if
    wscript.sleep 100

    '*************************************************************
    'indlæsning og aktivering af brugerdata fra tekstfil
    '*************************************************************
   
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set tsinputfile = fso.OpenTextFile(StiTilFil, 1, False)
        While Not tsinputfile.AtEndOfStream                ' kør i en løkke til der ikke er mere tekst i filen.
            strLine = tsinputfile.ReadLine
            arrInput = Split(strLine, ",")
            arrInput(0)=replace(arrInput(0),chr(34),"")        'institutionskode
            instkode = arrInput(0)
            arrInput(1)=replace(arrInput(1),chr(34),"")        'kode 1 eller 2
            typekode = arrInput(1)
            arrInput(2)=replace(arrInput(2),chr(34),"")        'login
            log = arrInput(2)
            arrInput(3)=replace(arrInput(3),chr(34),"")        'hashkode
            passw = arrInput(3)
            passw = Right(passw,4)
            arrInput(4)=replace(arrInput(4),chr(34),"")        'fornavn
            fornavn = arrInput(4)
            arrInput(5)=replace(arrInput(5),chr(34),"")        'efternavn
            efternavn = arrInput(5)
            fuldenavn = fornavn & " " & efternavn

            valg = typekode
            if valg=1 then
                ou1 = ouk
                bruger_rod = bruger_rod_e
                rod_drev = rod_drev_e
                sti = slog
                status = bruger_rod_e
                antistatus = bruger_rod_p
               
            else
                ou1 = oup
                bruger_rod = bruger_rod_p
                rod_drev = rod_drev_p
                sti = plog
                status = bruger_rod_p
                antistatus = bruger_rod_e
            end if
            beskriv = status & " " & fuldenavn
            sfolderpath=rod_drev+bruger_rod +"\"+ log 'brugermappenavn

            set logg = Nothing
            On Error Resume Next
            set logg = GetObject("WinNT://"+sDomain+"/"+log+",user")
            if logg Is Nothing then
            ok = ok + 1       
                s1 = ou1+"," + root
                s = "LDAP://" + s1
                Set c = GetObject(s)
                uname = "CN=" + log ' commonname sættes til samaccountname
                uname = "CN=" + log
                Set u = c.Create("user", uname)
                uname1 = "LDAP://" + uname + "," + s1
                set u=GetObject(uname1)

    'her sættes kontoegenskaberne
    ' ***************************************************
            u.Put "givenName", fornavn             'fornavn
                u.Put "sn", efternavn            'efternavn
                u.Put "displayName", fuldenavn        'fulde navn
    '              u.Put "fullname", fuldenavn            'fulde navn
            u.Put"description", beskriv            'så de er lettere at kende i ad
                u.Put "sAMAccountName", log          'samaccountnavn
              u.Put "scriptPath",sti            'logonscript
            u.Put "homeDrive", + share_navn+col         ' navn på personligt drev (p:)
            u.Put "homeDirectory","\\" + sserver + "\"  + log +"$"
            u.Put "userPrincipalName", log         'brugers logonnavn = samaccountnavn
            if len(profilmappe) > 2 then
                if profiltype = "M" or profiltype = "m" then
                    u.Put "profilePath", profilmappe
                end if
                if profiltype = "R" or profiltype = "r" then
                    u.Put "profilePath", profilmappe & "\" & log
                end if
            end if


    ' her indlæses password fra regneark eller sættes med et standard password
    '***************************************************
    ' »useraccountcontrol« værdierne:
    '16    = brugeren skal ændre password ved næste logon,
    '64    = brugeren kan ikke ændre password,
    '66048    = brugerens password udløber aldrig, kan ændres.
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                if pwtype = 1 then
                          u.Put "userAccountControl",16
                end if
                  if pwtype = 2 then            ' sat ud af kraft i denne version
                    kode =right(hash, 4)    ' bruger de sidste fire cifre af hashkode som password
                    pword=(kode)        
                              u.Put "userAccountControl",66048
                    u.Setinfo
                            u.Setpassword(pword)
                    end if
    '***************************************************
                u.Setinfo
                Set u = nothing
                addusertogroup oDomain, log,status
            '                            Lav en mappe til brugeren
            fso.CreateFolder sfolderpath

            'get the file service object
            Set objFileService = GetObject("WinNT://" & sServer & "/LanmanServer")
            sharesom = log & "$"
            Set objFileShare = objFileService.create("FileShare", sharesom)
            objFileShare.Path = sfolderpath
            objFileShare.Description = fuldenavn
            objFileShare.MaxUserCount = -1 'set unlimited users
            objFileShare.SetInfo

                brufull = "wscript.exe c:\administration\brugeradm\aclchange.vbs " + anf + sfolderpath + anf +" "+sDomain+"\"+ log
                WshShell.run brufull , 1, true
                fso.CreateFolder sfolderpath+"\Dokumenter"
                fso.CreateFolder sfolderpath+"\Dokumenter\My Pictures"
                fso.CreateFolder sfolderpath+"\Skrivebord"

            if len(profilmappe) > 1 then
                if profiltype = "R" or profiltype = "r" then
                    filesys.CreateFolder profilmappe & "\" & log
                end if
                if profiltype = "M" or profiltype = "m" then
                    filesys.CreateFolder profilmappe
                end if
            end if
            if len(tsprofilmappe) > 2 then
                filesys.CreateFolder tsprofilmappe & "\" & log
            end if
            if len(pershare) > 1 then
            if typekode =2 then
                pubsti = pershare+"\"+log+"-udbakke"
                pristi = pershare+"\"+log+"-indbakke"
                filesys.CreateFolder pubsti
                filesys.CreateFolder pristi
                usrname = sDomain+"\"+antistatus
                pubfull = "wscript.exe c:\administration\brugeradm\aclfull.vbs "+ pubsti+" "+sDomain+"\"+ log
                prifull = "wscript.exe c:\administration\brugeradm\aclfull.vbs "+pristi+" "+sDomain+"\"+ log
                read = "wscript.exe c:\administration\brugeradm\aclread.vbs "+pubsti+" "+ usrname
                write = "wscript.exe c:\administration\brugeradm\aclwrite.vbs "+ pristi+" "+ usrname
                WshShell.run read , 1, true
                WshShell.run write , 1, true
                WshShell.run pubfull , 1, true
                WshShell.run prifull , 1, true
            end if
            end if
            if len(tsprofilmappe) > 2 then   
                Set WshShell = wscript.CreateObject("wscript.shell")
                WshShell.run "\\" & sserver & "\admin$\system32\tsprof /update /local  /profile:"  & tsprofilmappe & "\" &  log & " " &  log
            end if
            sfolderpath = nothing
        else
            findes = findes+1
        end if


        wend

'    __________________________________________________________________
   
    if pwtype = "1" and pwlength > 0 then                ' reglen om passwordlængde genoprettes
        shell.run "net accounts /minpwlen:" + pwlength
    end if


slut = Timer
brugt = slut-start
minutter = int(brugt/60)
sekunder = int(brugt-(minutter*60))
if minutter = 0 then
    txtm=""
    txts = sekunder & " sekunder"
end if
if minutter = 1 then
    txtm="1 minut og "
    txts = sekunder & " sekunder"
end if
if minutter > 1 then
    txtm= minutter & " minutter og "
    txts = sekunder & " sekunder"
end if
ok = ok-1
gns = brugt/ok
gns = gns*10
gns = int(gns)
gns = gns/10
    tekst = "ITC brugeroprettelse udført." & vbcrlf & vbcrlf & ok & " brugere blev oprettet."
    tekst = tekst & vbcrlf & vbcrlf & findes & " brugere var allerede oprettet."&vbcrlf & vbcrlf
    tekst = tekst & "Tid: "  & txtm & txts  & vbcrlf
    tekst = tekst & "Gns pr bruger: " & gns  & " sekunder" & vbcrlf
    wscript.echo tekst



Function parseINI(sIniFilename)
    on error resume next
    Dim fso, tsIni, iEquals, sKey, sVal
    Set parseINI = Wscript.CreateObject("Scripting.Dictionary")
    Set fso = Wscript.CreateObject("Scripting.FileSystemObject")

    Set tsIni = fso.openTextFile(sIniFilename)

    Do while not tsIni.AtEndOfStream
    sLine = Trim(tsIni.ReadLine)
    If sLine <>  "" Then
        If Left(sLine, 1) = "'" Then
        Else
            iEquals = InStr(1, sLine, "=")
            If (iEquals <=1) Then
                Wscript.Echo "Ugyldig linie: " & sLine
            Else
                sKey = Left(sLine, iEquals - 1)
                sVal = Right(sLine, Len(sLine) - iEquals)
                parseINI.Add sKey, sVal
            End if
        End if
    End if
Loop
End Function

Sub AddUserToGroup(strDomain,strUsername,strGroupname)
      Dim User
      Dim Group
      Set User = GetObject("WinNT://" & sDomain & "/" & log & ",user")
      Set Group = GetObject("WinNT://" & sDomain & "/" & bruger_rod & ",group")
      Group.Add(User.ADsPath)
      Group.Setinfo
      Set User = nothing
      Set Group = nothing
End Sub

Function UserExists(user)
    result=false
    tmp=mid(getAdsPath(user,"samAccountName", "user","","subtree",true,true,false),1,5)
    if not tmp="error" then
      result=true
    end if
    UserExists= result
End Function

Function getADsPath(name, nameproperty, oclass, oustr, scope, ldap, showdc, parent)
    'errorcheck
    if not ( _
          (oclass="computer" or oclass="contact" or _
            oclass="organizationalUnit" or _
            oclass="group" or oclass="user") _
        and _
          (scope="base" or scope="oneLevel" or scope="subtree") _
        ) then
      getAdsPath="error: bad objectclass or scope"
      exit function
    end if
   
    Const adStateOpen = 1
   
    Dim adoConnection
    dim adoRecordset
   
    Set adoConnection = CreateObject("ADODB.Connection")
    adoConnection.Provider = "AdsDSOObject"
    adoConnection.Open "", ADUSER & "," & _
                    DCSTR, PASSWORD

    if not adoConnection.State = adStateOpen Then
    Wscript.Echo "Authentication Failed."
    Wscript.Quit(1)
    end if

    tmpoustr=oustr
    if not tmpoustr="" then tmpoustr=tmpoustr & ","
    execstring ="<LDAP://" & tmpoustr & DCSTR & ">;" & "(&(" & nameproperty & "=" & name & ")" & "(objectClass=" & oclass & "));" & "AdsPath;" & scope
    Set adoRecordset =  adoConnection.Execute (execstring)
       
   
    result=""
    haveResult=false
   
    while not adoRecordset.EOF
      if haveResult then
        getADsPath="error:more than one result"
        exit function
      end if
   
      result = adoRecordset.Fields.Item("ADsPath").Value
      haveResult=true

      adoRecordset.MoveNext
    wend
   
    adoConnection.Close
    Set adoRecordset = Nothing
   
    if not haveResult then result = "error: no results"

    if parent then
      Set o = GetObject(result)
      Set p = GetObject(o.Parent)
      result = "LDAP://" & p.get("distinguishedName")
    end if
    if not ldap then
      Set o = getObject(result)
      result = o.get("distinguishedName")
    end if
    if not showdc then
      result = mid(result,1,instr(result,"DC=")-2)
    end if
    getAdsPath = result
End Function





Server.ini:

root = DC=NAG,DC=KAUV,DC=DK
rod_drev_p = "E:\"
bruger_rod_p = "Personale"
rod_drev_e = "E:\"
bruger_rod_e = "Elever"
sDomain = "nag.kauv.dk"
sServer = "Oskar"
share_navn = "P"
pwtype = 1
pwlength = 2
oup = "OU=Personale,OU=Brugere"
ouk = "OU=Elever,OU=Brugere"
plog = p-logon.bat
slog = e-logon.bat
profiltype =
profilmappe =
tsprofilmappe =
pershare =

samlet.txt:
"Skolens navn eller lignende","Denne linie bruges ikke"
"1","13167","","Birte","Petersen","050104-2050104-2","090285"
"2","LJ","","Lars","Jørgensen",",050104-2050104-2,","260256"

Forklaring:

Felt 1: 1 betyder elev, 2 betyder lærer
Felt 2: Login
Fe
Avatar billede oskar Nybegynder
15. august 2004 - 15:53 #2
ups, jeg fortsætter:
  lt 3: Bruges ikke
Felt 4+5: for- og efternavn
Felt 6: Holdbetegnelser
Felt 7: Fødselsdag. ( Kan eventuelt senere bruges til at sætte password.

Den første fil er en .vbs fil.

Der er masser af arbejde  at tilpasse det til din skole, men jeg håber du kan bruge det til inspiration.

:) Oskar
Avatar billede worrax Nybegynder
15. august 2004 - 17:22 #3
Har desvære ikke så meget forstand på vbs... eller hvad for et programerings sporg det er ....
Avatar billede oskar Nybegynder
15. august 2004 - 18:20 #4
Det var jo ikke så godt. Jeg ved ikke af  at der skulle eksistere nogen nemmere metoder, men hvis du sender mig lidt flere oplysninger, kan jeg jo prøve at kigge lidt på det.  Det vigtigste er at du præciserer så meget som muligt hvad du vil have og hvilke oplysninger du vil have med. Har du eller kan du lave en tekstfil med en opstilling i stil med:

"Type for læ","LJ","Klasse","Fonavn","Efternavn","Gruppe",""
Avatar billede oskar Nybegynder
15. august 2004 - 18:25 #5
Undskyld de mange fejlsendinger. Det er ikke til at styre den bærbare når man ligger på ryggen med en dum diskosprolaps.

"Type for lærer/elev" er for at inddele i forskellige OUer.

Hvad er ideen med opdelig i både klasse og gruppe? Noget med sikkerhedsgrupper? OU? mappetildelinger eller andet?
Avatar billede worrax Nybegynder
16. august 2004 - 17:44 #6
Jeg bliver nok nød til at sige at jeg bare opretter dem manualt... da jeg skal ha dem færdig til om nogle timer...  men ellers tak for hjælpen..
Avatar billede oskar Nybegynder
16. august 2004 - 20:31 #7
I får vel også 100 nye elever til næste år, så hvad med at få den lavet alligevel, som du ser har jeg koden så det er bare lidt tilretningsarbejde der skal til.
Avatar billede daki Juniormester
17. august 2004 - 08:42 #8
hej oskar.

Kan man få en forklaring til hvor man skal placere filerne.
Hvormange filer er der og kan den nemt rettes til, så jeg ect. kan bruge den i mit firma.
Avatar billede oskar Nybegynder
17. august 2004 - 10:05 #9
Alle filer skal ligge i c:\administration\brugeradm og der er vel en 10-15 stykker i alt. Om det er net at rette dem til til dit firma afhænger af kravene. Måske skulle du oprette et nyt spørgsmål, så vi ikke forstyrrer worrax, der allerede har lukket dette spørgsmål. Læg dog lige et link her.
Avatar billede daki Juniormester
17. august 2004 - 10:49 #10
Vi fortsættter her: http://www.eksperten.dk/spm/530060
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester