Avatar billede kimborg Nybegynder
11. januar 2007 - 10:03 Der er 42 kommentarer og
2 løsninger

Program til at oprette 600 brugere

Hey, jeg skal oprette ca. 600 brugere via Computer management, men det tager jo flere uger/måneder... Hvordan laver jeg et batch-program eller andet til at gøre det for mig???
Avatar billede mcgoat Nybegynder
11. januar 2007 - 10:08 #1
http://www.tek-tips.com/viewthread.cfm?qid=1292635&page=9

Et VB-Script til at oprette brugere i et AD. Men om du skal taste det manuelt ind i AD, eller taste det manuelt ind i et script og køre, går vel ud på et?
Avatar billede Slettet bruger
11. januar 2007 - 10:27 #2
mcgoat er inde på det rigtige, et vbscript.

Søg på google efter: vbscript create users excel

Jeg fandt blandt andet dette:
Create User Accounts from Information in an Excel Spreadsheet.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnclinic/html/scripting04132004.asp

:-)
Avatar billede Slettet bruger
11. januar 2007 - 10:29 #3
vil også sige at det er excel du skal have fat i.
Avatar billede Slettet bruger
11. januar 2007 - 10:31 #4
Der er et eksempel på et "nogenlunde færdigt" excel spreadsheet her

http://nuggetlab.com/server_2003/290.zip
Avatar billede kimborg Nybegynder
11. januar 2007 - 10:43 #5
De ligger i et excel ark, men ved ikke hvordan jeg opretter scriptet
Avatar billede kimborg Nybegynder
11. januar 2007 - 10:48 #6
Hmmm... jeg skal vel ikke bruge dem alle eller hvad?

Jeg laver normalt kun hjemmesider i asp/html, så er rimelig grøn på denne front
Avatar billede Slettet bruger
11. januar 2007 - 10:55 #7
ok, så findes der en guide på den her side.  http://www.computerperformance.co.uk/vbscript/vbscript_user_spreadsheet.htm
Avatar billede kimborg Nybegynder
11. januar 2007 - 11:46 #8
Okay, i excel har jeg lavet 3 kolonner: User name, Full name, Password. (Det er dem windows skal bruge), Men hvad skal de omdøbes til??
Avatar billede Slettet bruger
11. januar 2007 - 12:02 #9
du kan lave det som en batch fil.
se her

dsadd user cn=dinbrugersnavn01,ou=dinbrugersOU,dc=ditdomæne,dc=com -upn dinbruger01@ditdomæne.com -display dinbruger01 -pwd 123456789$ -mustchpwd yes  -memberof cn=dinbrugersnavn01,ou=dinbrugersOU,dc=ditdomæne,dc=com


og du fortsætter bare med "dinbrugersnavn02"  osv.
Avatar billede Slettet bruger
11. januar 2007 - 12:54 #10
jeg ændrer lige noget i koden.


dsadd user cn=dinbrugersnavn01,ou=dinbrugersOU,dc=ditdomæne,dc=com -upn dinbruger01@ditdomæne.com -display dinbruger01 -pwd 123456789$ -mustchpwd yes  -memberof cn=Gruppenavn,ou=dinbrugersOU,dc=ditdomæne,dc=com
Avatar billede Slettet bruger
12. januar 2007 - 09:40 #11
finder du ud af det ?
Avatar billede kimborg Nybegynder
12. januar 2007 - 09:55 #12
Tænkte på om man ikke kan få batchfilen til hente oplysningerne fra en txtfil eller tager det stadig meget lang tid, ved du det?
Avatar billede Slettet bruger
12. januar 2007 - 10:04 #13
tænker du på at du har en liste med alle de ansattes navne ?
Avatar billede kimborg Nybegynder
12. januar 2007 - 10:41 #14
Ja, de ligge i et excelark, men kan jo bare eksporteres til en csv-fil
Avatar billede Slettet bruger
12. januar 2007 - 10:52 #15
det kan du godt, uden at du skal fjerne dem fra excelarket. men så må ingen af navene være ens !

du kopierer bare den kolonne som indeholder navene over i det excelark som du kan hente via mit link.
så erstatter du kolonnen med navnene til venstre.  hedder  Phxuser01,02 osv..

du skal bare rette excelarket til så det passer ind i dit AD.
Ændrer dc=nuggetlab  til dit eget domæne, OSV...

til sidst markerer du koden, kopierer det over i noteblock, og gemmer det som en bat fil.
Avatar billede kimborg Nybegynder
12. januar 2007 - 11:42 #16
Okay. men hvad skal der stå i OU
Avatar billede Slettet bruger
12. januar 2007 - 12:17 #17
Hvis du ikke kender til OU bruger i det sikkert ikke.  Det står for Organisational Unit,  og har nogle andre egenskaber end en gruppe.
Hvis du ikke bruger ou skal du bare slette den helt fra arket.

dvs  dsadd user cn=brugernavn,dc=domæne,dc=com_dk_local_eller_andet osv........
Avatar billede kimborg Nybegynder
12. januar 2007 - 12:49 #18
Okay, hvordan får jeg sat flueben i felterne:

Users cannot change password
Password never expires
Avatar billede Slettet bruger
12. januar 2007 - 14:08 #19
tilføj kommandoen -chanchpwd no  -pwdneverexpires yes
Avatar billede kimborg Nybegynder
12. januar 2007 - 15:13 #20
Fået en besked at det virker da vi kører på en win2000 server
Avatar billede Slettet bruger
12. januar 2007 - 22:43 #21
ikke forstået ?
Har du fået en besked om at det virker, eller hvordan skal jeg forstå det du skriver ?
Avatar billede kimborg Nybegynder
12. januar 2007 - 23:30 #22
undskyld der skulle have stået:

Fået den besked at det ikke virker da vi kører på en win2000 server

dsadd kendes ikke...
Avatar billede Slettet bruger
13. januar 2007 - 17:33 #23
jeg kikker lige på det, jeg var ikke lige opmærksom på at det var server 2000.
Avatar billede Slettet bruger
13. januar 2007 - 18:32 #24
Det eneste jeg kan finde til 2000 er beskrevet her
http://www.activexperts.com/activmonitor/windowsmanagement/reskit2000/


Usrtogrp.exe - Add Users to a Group. 
This command-line tool adds users to a local or global group according to information contained in a user-specified input text file. The UsrToGrp tool creates the specified group if it does not already exist. Then, for each user name specified in the file, it searches the specified computer or domain for the user account. If you are adding users to a local group, the tool also searches trusted domains for the user account. If you are adding users to a global group, the tool only searches the specified domain, not any trusted domains. Once the account is found, UsrToGrp adds the account to the group. Note that if the user name exists in multiple domains, only the first instance of that user name that UsrToGrp finds is added to the group.
Avatar billede Slettet bruger
13. januar 2007 - 20:02 #25
så prover vi lige igen med de rigtige informationer.
http://www.kanal9.dk/artikler/29/1/Opret-mange-brugere/Side1.html'

download excelark, og VBscript til oprettelse af mange brugere i windows server 2000
http://www.kanal9.dk/zip/opretbrugere.zip
Avatar billede Slettet bruger
13. januar 2007 - 20:50 #26
Prøv dette script.
Scriptet opretter brugernavne udfra første bogstav i Fornavn + Mellemnavn + Efternavn.
Anders And bliver til AA
Rip And bliver til RA
Rap And bliver til RA1, da RA jo er brugt af Rip And
Rup And bliver til RA2
Fedtmule Han Hund bliver til FHH

Scriptet generer password på x længde, dog mindst 4 tegn.


Log på en maskine med en konto der har administrative rettighedder på domænet.

Opret et nyt Excel dokument eller rediger et eksisterende dokument.
Indtast disse overskrifter:
A1 = Brugernavn
B1 = Mellemnavn
C1 = Efternavn
D1 = Brugernavn
E1 = Password

Indtast bruger data i:
A2, B2, C2
A3, B3, C3
Og så videre.

Gem dokumentet som: C:\OpretBrugere\User.xls

Ret Const LDAPDomain = "dc=Dit_Domæne,dc=dk" til dine data
Ret Const Domain = "Dit_Domæne.dk" til dine data
   
Kopier teksten mellem, Script Start og Script Slut.
Gem den som  C:\OpretBrugere\User.vbs

Hvis du bruger Notesblok så sæt sto og navn i gåseøjne "C:\OpretBrugere\User.vbs" da den ellers gemmes som C:\OpretBrugere\User.vbs.txt

Dobbelt klik på filen User.vbs

Når scriptet er færdig med at oprette brugere kan du gemme User.xls under et andet navn. Så har du en Exel fil med brugernavne og passwords. Den kan du bruge til at brevflette i Word.

:-)


'Script Start
'****** RET TIL AKTUELLE DATA *********************************************************************************************

Const LDAPDomain = "dc=Dit_Domæne,dc=dk"    'Domænenavn i LDAP format. dc=Dit_Domæne,dc=dk eller dc=Dit_Domæne,dc=local
Const Domain = "Dit_Domæne.dk"            'Domænenavn. Dit_Domæne.dk eller Dit_Domæne.local
Const ExcelName = "C:\OpretBrugere\User.xls"    'Sti til Exel dokument
Const PasswordLen = 7                'Længde på password

Const PwUpper = True                'Password skal indeholde store bogstaver
Const PwLower = True                'Password skal indeholde små bogstaver
Const PwNumber = True                'Password skal indeholde tal
Const PwSpecial = True                'Password skal indeholde specialtegn

'****** Disse data bruges til password, fjern dem du ikke vil have i et password. Du må ikke fjerne " *********************
Const strUpper = "ABCDEFGHIJKMNPQRSTUVWXYZ"    'Store bogstaver, L og O er ikke med, de kan nemt forveksles med 1 og 0
Const strLower = "abcdefghijkmnpqrstuvwxyz"    'Små bogstaver, l og o er ikke med, de kan nemt forveksles med 1 og 0
Const strNumber = "123456789"            'Tal, 0 er ikke med, kan nemt forveksles med O
Const strSpecial = "%&+-"            'Special tegn

'**************************************************************************************************************************
'****** RET IKKE NOGET HER UNDER ******************************************************************************************
'**************************************************************************************************************************

Const Fornavn = 1                'Kolonne 1 i Exel dokumentet. Fornavn, indskrives inden scriptet køres.
Const Mellemnavn = 2                'Kolonne 2 i Exel dokumentet. Mellemnavn, indskrives inden scriptet køres.
Const Efternavn = 3                'Kolonne 3 i Exel dokumentet. Efternavn, indskrives inden scriptet køres.
Const Brugernavn = 4                'Kolonne 4 i Exel dokumentet. Brugernavn, generes af scriptet
Const Password = 5                'Kolonne 5 i Exel dokumentet. Password, generes af scriptet

Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000

'**************************************************************************************************************************
'****** BRUGER OPRETTELSE *************************************************************************************************
'**************************************************************************************************************************

Set objExcel = CreateObject("Excel.Application")

Set objWorkbook = objExcel.Workbooks.Open(ExcelName)
objExcel.Visible = True


intRow = 2
Do Until objExcel.Cells(intRow, Fornavn).Value = ""
  strInitialer = Ucase(Left(objExcel.Cells(intRow, Fornavn).Value, 1) & Left(objExcel.Cells(intRow, Mellemnavn).Value, 1) & Left(objExcel.Cells(intRow, Efternavn).Value, 1))

  strFuldeNavn = objExcel.Cells(intRow, Fornavn).Value
  If Len(objExcel.Cells(intRow, Mellemnavn).Value) > 0 Then
    strFuldeNavn = strFuldeNavn & " " & objExcel.Cells(intRow, Mellemnavn).Value
  End If
  strFuldeNavn = strFuldeNavn &" " & objExcel.Cells(intRow, Efternavn).Value

  strBrugerNavn = CreateUserName(strInitialer)
  strPassword = GeneratePassword(PasswordLen, PwUpper, PwLower, PwNumber, PwSpecial)
 
  Set objOU = GetObject("LDAP://CN=Users," & LDAPDomain)

  Set objUser = objOU.Create("User", "cn=" & strBrugerNavn)
  objUser.Put "sAMAccountName", strBrugerNavn
  objUser.SetInfo

  objUser.AccountDisabled = FALSE

  objUser.SetPassword strPassword

  objUser.Put "userPrincipalName", strBrugerNavn & "@" & Domain
  objUser.Put "givenName", objExcel.Cells(intRow, Fornavn).Value
  objUser.Put "sn", objExcel.Cells(intRow, EfterNavn).Value
  objUser.Put "initials", strInitialer
  objUser.Put "DisplayName", strFuldeNavn

  objUser.SetInfo

  objUser.Put "userAccountControl", (objUser.Get("userAccountControl") Or ADS_UF_DONT_EXPIRE_PASSWD)

  objUser.SetInfo

  Call UserCannotChangePassword(objUser)

  objExcel.Cells(intRow, Password).Value = strPassword
  objExcel.Cells(intRow, Brugernavn).Value = strBrugerNavn

  intRow = intRow + 1
Loop


'**************************************************************************************************************************
'****** DIVERSE FUNKTIONER OG RUTINER *************************************************************************************
'**************************************************************************************************************************

Function CreateUserName(samAccountName)
  strUserName = samAccountName
  Number = 1
  While UserExist(strUserName)
    strUserName = samAccountName & CStr(Number)
    Number = Number + 1 
  Wend
  CreateUserName = strUserName
End Function

'**************************************************************************************************************************

Function UserExist(samAccountName)
  strUserName = samAccountName
  Set objConnection = CreateObject("ADODB.Connection")
  objConnection.Open "Provider=ADsDSOObject;"

  Set objCommand = CreateObject("ADODB.Command")
  objCommand.ActiveConnection = objConnection

  objCommand.CommandText = "<LDAP://" & LDAPDomain & ">;(&(objectCategory=User)(samAccountName=" & strUserName & "));samAccountName;subtree"
 
  Set objRecordSet = objCommand.Execute

  UserExist = objRecordset.RecordCount > 0
End Function

'**************************************************************************************************************************

Function GeneratePassword(strLength, U, L, N, S)
  MinLength = 0
  If U Then
    MinLength = MinLength +1
  End If

  If L Then
    MinLength = MinLength +1
  End If

  If N Then
    MinLength = MinLength +1
  End If

  If S Then
    MinLength = MinLength +1
  End If
 
  If strLength < MinLength Then
    strLength = MinLength
  End If

  GeneratePassword = ""

  For I = 1 to strLength
    If I + MinLength => strLength Then
      If U And Len(strUpper) > 0 And TestU(GeneratePassword) = 0 Then
        strSeed = strUpper
      ElseIf L And Len(strLower) > 0 And TestL(GeneratePassword) = 0 Then
        strSeed = strLower
      ElseIf N And Len(strNumber) > 0 And TestN(GeneratePassword) = 0 Then
        strSeed = strNumber
      ElseIf S And Len(strSpecial) > 0 And TestS(GeneratePassword) = 0 Then
        strSeed = strSpecial
      End If
    Else
      strSeed = strUpper + strLower + strNumber + strSpecial
    End If
    MFactor = Len(strSeed)
    strNum = GenIt(MFactor)
    strNext = Mid(strSeed, strNum, 1)
    GeneratePassword = GeneratePassword & ChkNext(strNext, GeneratePassword, strSeed)
  Next
End Function

'**************************************************************************************************************************

Function GenIt(MFactor)
  Randomize
  GenIt = INT(RND()*MFactor)+1
end Function

'**************************************************************************************************************************

Function ChkNext(strNext, GeneratePassword, strSeed)
  strTmp = strNext
  MFactor = Len(strSeed)

  If InStr(1, GeneratePassword, strNext, 1) <>0 Then
    strNum = GenIt(MFactor)
    strNext = Mid(strSeed, strNum, 1)
    strTmp = ChkNext(strNext, GeneratePassword, strSeed)
  End if

  ChkNext = strTmp
End Function

'**************************************************************************************************************************

Function TestN(Password)
  TestN = 0
  For I = 1 To Len(Password)
    If Instr(strNumber, Mid(Password, I, 1)) >0 Then
      TestN = TestN + 1
    End If
  Next
End Function

'**************************************************************************************************************************

Function TestU(Password)
  TestU = 0
  For I = 1 To Len(Password)
    If Instr(strUpper, Mid(Password, I, 1)) >0 Then
      TestU = TestU + 1
    End If
  Next
End Function

'**************************************************************************************************************************

Function TestL(Password)
  TestL = 0
  For I = 1 To Len(Password)
    If Instr(strLower, Mid(Password, I, 1)) >0 Then
      TestL = TestL + 1
    End If
  Next
End Function

'**************************************************************************************************************************

Function TestS(Password)
  TestS = 0
  For I = 1 To Len(Password)
    If Instr(strSpecial, Mid(Password, I, 1)) >0 Then
      TestS = TestS + 1
    End If
  Next
End Function

'**************************************************************************************************************************

Sub UserCannotChangePassword(oUserObject)
Dim oSecDescriptor
Dim oDACL
Dim oACE
Dim oACE2

Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-00aa0040529b}"
Set oACE = CreateObject("AccessControlEntry")
Set oACE2 = CreateObject("AccessControlEntry")

oACE.Trustee = "NT AUTHORITY\SELF"
oACE.AceFlags = 0
oACE.AceType = 6
oACE.Flags = 1
oACE.ObjectType = CHANGE_PASSWORD_GUID
oACE.AccessMask = 256

oACE2.Trustee = "EVERYONE"
oACE2.AceFlags = 0
oACE2.AceType = 6
oACE2.Flags = 1
oACE2.ObjectType = CHANGE_PASSWORD_GUID
oACE2.AccessMask = 256

Set oSecDescriptor = oUserObject.Get("ntSecurityDescriptor")

Set oDACL = oSecDescriptor.DiscretionaryAcl

oDACL.AddAce oACE
oDACL.AddAce oACE2

oUserObject.Put "ntSecurityDescriptor", oSecDescriptor
oUserObject.SetInfo

Set oACE = Nothing
Set oACE2 = Nothing
Set oDACL = Nothing
Set oSecDescriptor = Nothing
End Sub

'**************************************************************************************************************************
'Script Slut
Avatar billede kimborg Nybegynder
15. januar 2007 - 09:03 #27
Henrik: hvad skal jeg skrive i disse:

Const Hjemmemappe = "dokumenter$"
Const Profilmappe = "profiler$"
Const TSProfilmappe = "TSProfiler$"
Const LoginScript = "Loginscripts$"
Const Server = "jupiter"
Avatar billede Slettet bruger
15. januar 2007 - 10:23 #28
Her er det hele i en Excel skabelon:
http://zyp.dk/opretbrugere.zip
Så kan det vist ikke blive memmere.

:-)
Avatar billede kimborg Nybegynder
15. januar 2007 - 10:40 #29
Smart, men vi har desværre ikke officepakken på vores ftp-server...
Avatar billede Slettet bruger
15. januar 2007 - 10:47 #30
Har i slet ikke en klient i domænet med Excel?
Hvorfor vil du oprette brugere på din FTP-server?

:-)
Avatar billede kimborg Nybegynder
15. januar 2007 - 10:56 #31
Nope, desværre ikke, den kører på et andet domæne...

Det er til vores klienter som afleverer rapporter løbende.
Avatar billede Slettet bruger
15. januar 2007 - 11:02 #32
Det vil sige at det er lokale brugere på jeres FTP-server.
Jeg gik udfra at det var domæne brugere.
:-)
Ps.
Fjerner lige http://zyp.dk/opretbrugere.zip fra min server.
Avatar billede Slettet bruger
15. januar 2007 - 15:23 #33
Dette script opretter lokale brugere på maskinen hvor scriptet køres.

Scriptet genererer et brugernavnet bestående af det første tegn i fornavnet + det første tegn i efternavnet.
Hvis brugernavnet findes i forvejen tilføjes et tal startende med 1, dette tal forhøjes indtil brugernavnet er unikt.
Hvis brugernavnet indeholder Æ, Ø eller Å bliver de er stattet af: AE, OE eller AA. Tegn som Ä bliver erstattet med X.

Der genereres et password på 7 tegn bestående af store og små bogstaver + tal.

Brugeren bliver medlem af gruppen Users.

Resultatet skrives i filen OprettedeBrugere.csv. Den kan du bruge til at brevflette i word.


Kopier teksten mellem '***** Script start ***** og '***** Script slut *****
Gem den som "OpretLokaleBrugere.vbs"

Kopier teksten mellem '***** csv start ***** og '***** csv slut *****
Gem den som "Brugere.csv"

Filerne: OpretLokaleBrugere.vbs og Brugere.csv skal være i samme folder på din FTP-server

Dobbeltklik på OpretLokaleBrugere.vbs

Når scriptet er færdigt, har det genereret en fil med navnet OprettedeBrugere.csv

Filen OprettedeBrugere.csv vil have dette indhold (Password vil dog ikke være de samme):
BRUGERNAVN;PASSWORD;NAVN
PG;Ki25346;Pelle Gris
AA;Zz75149;Anders And
AAOE;Ck23754;Åse Ødis

Kontroler at de tre brugere er som du ønsker, hvis de er det, så ret indholdet af Brugere.csv til dine brugere og kør scriptet igen.

:-)



***** csv start *****
Pelle;Gris
Anders;And
Åse;Ødis
***** csv slut *****


'***** Script start *****
Const strGroup = "Users"
Const strInputFile = "Brugere.csv"

Const ForNavn = 0
Const EfterNavn = 1
Const ForReading = 1
Const ForAppending = 2
Const ValidChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Const strUpper = "ABCDEFGHIJKMNPQRSTUVWXYZ"
Const strLower = "abcdefghijkmnpqrstuvwxyz"
Const strNumber = "123456789"
strOutputFile = "Oprettede" & strInputFile
Set oFSO = CreateObject("Scripting.FileSystemObject")
If NOT oFSO.FileExists(strInputFile) Then
  strMessage = "Filen: " & strInputFile & " blev ikke fundet!" & Chr(13) & Chr(13) & _
              "Kopier eller opret filen: " & strInputFile & ", så den er tilgængelig i samme folder som dette script.  " & Chr(13) & Chr(13)
  strResponse = MsgBox (strMessage, 48, "Brugeroprettelse")
  WScript.Quit
End If
If oFSO.FileExists(strOutputFile) Then
  strMessage = "Filen: " & strOutputFile & " findes allerede!" & Chr(13) & Chr(13) & _
              "Dette tyder på at du muligvis allerede har oprettet brugere med den samme "& strInputFile & ".    " & Chr(13) & _
              "Hvis du fortsætter bliver filen: " & strOutputFile & " overskrevet med de nye data!" & Chr(13) & Chr(13) & _
              "Vil du fortsætte med at oprette brugere?" & Chr(13) & Chr(13)
  intMessageType = 52
Else
  strMessage = "Start oprettelsen af brugere?    "
  intMessageType = 36
End If
strResponse = MsgBox (strMessage, intMessageType, "Brugeroprettelse")
If strResponse <> 6 then WScript.Quit
Set oUserList = oFSO.OpenTextFile (strInputFile, ForReading)
Set oUsersCreated = oFSO.OpenTextFile (strOutputFile, ForAppending, True)
oUsersCreated.WriteLine("BRUGERNAVN;PASSWORD;NAVN")
LinesRead = 0
UsersCreated = 0
Set WshNetwork = CreateObject("WScript.Network")
strComputername = WshNetwork.ComputerName
Do Until oUserList.AtEndOfStream
  strNextLine = oUserList.Readline
  LinesRead = LinesRead + 1
  arrUserList = Split(strNextLine , ";")
  If UBound(arrUserList) > 0 Then
    If Len(arrUserList(ForNavn)) > 0 And Len(arrUserList(EfterNavn)) > 0 Then
      Initialer = Left(arrUserList(ForNavn), 1) & Left(arrUserList(EfterNavn), 1)
      BrugerNavn = CreateUserName(Initialer)
      Password = GeneratePassword(7)
      FuldeNavn = arrUserList(ForNavn) & " " & arrUserList(EfterNavn)     
      Set oAccount = GetObject("WinNT://" & strComputername & ",computer")
      Set oUser = oAccount.Create("user", BrugerNavn)
      oUser.SetPassword Password
      oUser.SetInfo
      oUser.Put "Description", "FTP bruger, " & FuldeNavn
      oUser.Put "UserFlags", (oUser.Get("UserFlags") Or &H10000)
      oUser.Put "UserFlags", (oUser.Get("UserFlags") Or &H00040)
      oUser.SetInfo
      Set oGroup = GetObject("WinNT://" & strComputername & "/" & strGroup & ",group")
      oGroup.Add (oUser.ADsPath)
      Set oUser = GetObject("WinNT://" & strComputername & "/" & BrugerNavn & ",user")
      oUsersCreated.WriteLine(BrugerNavn & ";" & Password& ";" & FuldeNavn)
      UsersCreated = UsersCreated + 1
    End If
  End If
Loop
oUserList.Close
oUsersCreated.Close
strMessage = "Der er oprettet " & UsersCreated & " brugere." & Chr(13) & Chr(13) & _
            "Brugernavn, Password og Navn er skrevet i filen: " & strOutputFile & Chr(13) & _
            "Du kan bruge denne fil til at brevflette i Microsoft Word." & Chr(13) & Chr(13) & _
            "Det anbefales at flytte filerne: " & strOutputFile & " og " & strInputFile & " til en anden folder," & Chr(13) & _
            "så de ikke bliver overskrevet, eller der bliver oprettet en nyt sæt brugere med den samme " & strInputFile & ".    " & Chr(13) & Chr(13)
If LinesRead > UsersCreated Then
  strMessage = strMessage & _
            "Der var " & LinesRead & " linier i filen: " & strInputFile & ", men der blev kun oprettet " & UsersCreated & " brugere.    " & Chr(13) & _
            "Kontroler " & strInputFile & " og " & strOutputFile & ", da der måske var fejl i " & strInputFile & "." & Chr(13) & Chr(13)
End If
strResponse = MsgBox (strMessage, 64, "Brugeroprettelse")

Function GeneratePassword(PwLength)
  GeneratePassword = ""
  MinLength = 1
  If PwLength > 7 Then
    PwLength = 7
  End If
  If PwLength + MinLength < 4 Then
    PwLength = 4
  End If
  strSeed = ""
  For I = 1 To PwLength
    If I + MinLength >= strLength Then
      If Len(strUpper) > 0 And TestU(GeneratePassword) = 0 Then
        strSeed = strUpper
      ElseIf Len(strLower) > 0 And TestL(GeneratePassword) = 0 Then
        strSeed = strLower
      ElseIf Len(strNumber) > 0 And TestN(GeneratePassword) = 0 Then
        strSeed = strNumber
      End If
    Else
      strSeed = strUpper + strLower + strNumber
    End If
    MFactor = Len(strSeed)
    strNum = GenIt(MFactor)
    strNext = Mid(strSeed, strNum, 1)
    GeneratePassword = GeneratePassword & ChkNext(strNext, GeneratePassword, strSeed)
  Next
End Function

Function GenIt(MFactor)
  Randomize
  GenIt = Int(Rnd() * MFactor) + 1
End Function

Function ChkNext(strNext, GeneratePassword, strSeed)
  strTmp = strNext
  MFactor = Len(strSeed)
  If InStr(GeneratePassword, strNext) <> 0 Then
    strNum = GenIt(MFactor)
    strNext = Mid(strSeed, strNum, 1)
    strTmp = ChkNext(strNext, GeneratePassword, strSeed)
  End If
  ChkNext = strTmp
End Function

Function TestN(Password)
  TestN = 0
  For I = 1 To Len(Password)
    If InStr(strNumber, Mid(Password, I, 1)) > 0 Then
      TestN = TestN + 1
    End If
  Next
End Function

Function TestU(Password)
  TestU = 0
  For I = 1 To Len(Password)
    If InStr(strUpper, Mid(Password, I, 1)) > 0 Then
      TestU = TestU + 1
    End If
  Next
End Function

Function TestL(Password)
  TestL = 0
  For I = 1 To Len(Password)
    If InStr(strLower, Mid(Password, I, 1)) > 0 Then
      TestL = TestL + 1
    End If
  Next
End Function

Function CreateUserName(samAccountName)
  samAccountName = UCase(samAccountName)
  samAccountName = Replace(samAccountName, "Æ", "AE")
  samAccountName = Replace(samAccountName, "Ø", "OE")
  samAccountName = Replace(samAccountName, "Å", "AA")
  For I = 1 To Len(samAccountName)
    If InStr(ValidChar, Mid(samAccountName, I, 1)) = 0 Then
      samAccountName = Replace(samAccountName, Mid(samAccountName, I, 1), "X")
    End If
  Next
  strUserName = samAccountName 
  I = 1
  While UserExist(strUserName)
    strUserName = samAccountName & CStr(I)
    I = I + 1
  Wend
  CreateUserName = strUserName
End Function

Function UserExist(samAccountName)
  UserExist = False
  Set oComputer = GetObject("WinNT://" & strComputername)
  oComputer.Filter = Array("User")
  For Each oUser In oComputer
    UserExist = (oUser.Name = samAccountName)
    If UserExist Then
      Exit For
    End If
  Next
  Set oComputer = Nothing
End Function
'***** Script slut *****
Avatar billede kimborg Nybegynder
16. januar 2007 - 09:03 #34
Jeg har allerede de brugernavne og password, hvad skal ændres for at bruge dem?
Avatar billede Slettet bruger
16. januar 2007 - 09:20 #35
Har du virkelig lavet 600 FORSKELLIGE brugernavne og passwords? Det gad jeg godt nok ikke!

Post et par linier fra din .csv fil og navnet på filen. Så retter jeg scriptet.

:-)
Avatar billede kimborg Nybegynder
16. januar 2007 - 10:00 #36
Jeg har brugt excel til det meste, men det kan jo egentlig bare ligge i samme script, således at kundenr. bliver til brugernavn

99001  -> id099001
101001 -> id101001

Og kundenr. bliver til password

99001 (c2) -> iD230D430 - formel: =hvis(C2="";"";"iD2"&dec.til.hex(c2*15+1715033))

Kan man det??
Avatar billede Slettet bruger
16. januar 2007 - 10:10 #37
Det ser meget fornuftigt ud. Kunne heller ikke tro at du havde lavet det manuelt.

Jeg går udfra:
Filen har navnet Brugere.csv
Indholdet ser sådan ud:
Brurgernavn;Password
Avatar billede kimborg Nybegynder
16. januar 2007 - 10:11 #38
Korrekt
Avatar billede Slettet bruger
16. januar 2007 - 10:46 #39
Her scriptet
Lad mig høre hvordan det gik.
:-)


'***** Script start *****
Const strGroup = "Brugere"
Const strInputFile = "Brugere.csv"
Const strOutputFile = "Fejl.txt"
Const Brugernavn = 0
Const Password = 1
Const ForReading = 1
Const ForAppending = 2
strResponse = MsgBox ("Start oprettelsen af brugere?    ", 36, "Brugeroprettelse")
If strResponse <> 6 then WScript.Quit
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oUserList = oFSO.OpenTextFile (strInputFile, ForReading)
Set oUserError = oFSO.OpenTextFile (strOutputFile, ForAppending, True)
oUserError.WriteLine("Følgende brugere er ikke oprettet, da brugernavnet allerede var i brug:")
LinesRead = 0
UsersCreated = 0
Set WshNetwork = CreateObject("WScript.Network")
strComputername = WshNetwork.ComputerName
Do Until oUserList.AtEndOfStream
  strNextLine = oUserList.Readline
  LinesRead = LinesRead + 1
  arrUserList = Split(strNextLine , ";")
  If UBound(arrUserList) > 0 Then
    If Len(arrUserList(ForNavn)) > 0 And Len(arrUserList(EfterNavn)) > 0 Then
      If UserExist(arrUserList(Brugernavn)) Then
        oUserError.WriteLine(strNextLine)
      Else         
        Set oAccount = GetObject("WinNT://" & strComputername & ",computer")
        Set oUser = oAccount.Create("user", arrUserList(Brugernavn))
        oUser.SetPassword arrUserList(Password)
        oUser.SetInfo
        oUser.Put "Description", "FTP bruger"
        oUser.Put "UserFlags", (oUser.Get("UserFlags") Or &H10000)
        oUser.Put "UserFlags", (oUser.Get("UserFlags") Or &H00040)
        oUser.SetInfo
        Set oGroup = GetObject("WinNT://" & strComputername & "/" & strGroup & ",group")
        oGroup.Add (oUser.ADsPath)
        Set oUser = GetObject("WinNT://" & strComputername & "/" & arrUserList(Brugernavn) & ",user")
        UsersCreated = UsersCreated + 1
      End If
    End If
  End If
Loop
oUserList.Close
oUserError.Close
strMessage = "Der er oprettet " & UsersCreated & " brugere.    " & Chr(13) & Chr(13)
If LinesRead > UsersCreated Then
  strMessage = strMessage & "Alle brugere blev ikke oprettet, se filen: " & strOutputFile & "    "& Chr(13)
End If
strResponse = MsgBox (strMessage, 64, "Brugeroprettelse")

Function UserExist(samAccountName)
  UserExist = False
  Set oComputer = GetObject("WinNT://" & strComputername)
  oComputer.Filter = Array("User")
  For Each oUser In oComputer
    UserExist = (oUser.Name = samAccountName)
    If UserExist Then
      Exit For
    End If
  Next
  Set oComputer = Nothing
End Function
'***** Script slut *****
Avatar billede Slettet bruger
16. januar 2007 - 11:03 #40
UPS

Ret lige linien:
Const strGroup = "Brugere"
til
Const strGroup = "Users"

Jeg testede på en dansk XP og glemte at rette "Brugere" til Users" som gruppen heder på en engelsk server.

:-)
Avatar billede kimborg Nybegynder
16. januar 2007 - 11:31 #41
Fandt selv fejlen, og det virker jo perfekt!!! ;O)

Dog kunne jeg godt tænke mig at Full Name også bliver hentet fra cvs-filen, hvordan tilføjer jeg det??

Kan man lave et lignende script til oprettelse af virtual dirs i IIS'en??
Avatar billede Slettet bruger
16. januar 2007 - 11:40 #42
Det burde være muligt at tilføje/oprette med Fuldt navn.

Har du oprettet de 600 brugere, så det kun er "Fuldt navn" der skal rettes?
Eller har du kun kørt en test?

"Kan man lave et lignende script til oprettelse af virtual dirs i IIS'en??"
Ja det vil jeg tro, men det må vel være et andet spørgsmål.
:-)
Avatar billede kimborg Nybegynder
16. januar 2007 - 11:57 #43
Jeg har "kun" kørt en test, så skal vel strikkes ind i det sidste script

Fair nok til det sidste, det må jeg lige kigge på ;o)
Avatar billede Slettet bruger
16. januar 2007 - 12:05 #44
Du må meget gerne poste, hvor lang tid scriptet var om at oprette dine 600 brugere.
:-)

Brugere.csv skal se såden ud:
Brugernavn;Password;FuldtNavn

'***** Script start *****
Const strGroup = "Users"
Const strInputFile = "Brugere.csv"
Const strOutputFile = "Fejl.txt"
Const BrugerNavn = 0
Const Password = 1
Const FuldtNavn = 2
Const ForReading = 1
Const ForAppending = 2
strResponse = MsgBox ("Start oprettelsen af brugere?    ", 36, "Brugeroprettelse")
If strResponse <> 6 then WScript.Quit
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oUserList = oFSO.OpenTextFile (strInputFile, ForReading)
Set oUserError = oFSO.OpenTextFile (strOutputFile, ForAppending, True)
oUserError.WriteLine("Følgende brugere er ikke oprettet, da brugernavnet allerede var i brug:")
LinesRead = 0
UsersCreated = 0
Set WshNetwork = CreateObject("WScript.Network")
strComputername = WshNetwork.ComputerName
Do Until oUserList.AtEndOfStream
  strNextLine = oUserList.Readline
  LinesRead = LinesRead + 1
  arrUserList = Split(strNextLine , ";")
  If UBound(arrUserList) > 0 Then
    If Len(arrUserList(ForNavn)) > 0 And Len(arrUserList(EfterNavn)) > 0 Then
      If UserExist(arrUserList(Brugernavn)) Then
        oUserError.WriteLine(strNextLine)
      Else         
        Set oAccount = GetObject("WinNT://" & strComputername & ",computer")
        Set oUser = oAccount.Create("user", arrUserList(BrugerNavn))
        oUser.SetPassword arrUserList(Password)
        oUser.SetInfo
        oUser.Put "FullName", arrUserList(FuldtNavn)
        oUser.Put "Description", "FTP bruger"
        oUser.Put "UserFlags", (oUser.Get("UserFlags") Or &H10000)
        oUser.Put "UserFlags", (oUser.Get("UserFlags") Or &H00040)
        oUser.SetInfo
        Set oGroup = GetObject("WinNT://" & strComputername & "/" & strGroup & ",group")
        oGroup.Add (oUser.ADsPath)
        Set oUser = GetObject("WinNT://" & strComputername & "/" & arrUserList(Brugernavn) & ",user")
        UsersCreated = UsersCreated + 1
      End If
    End If
  End If
Loop
oUserList.Close
oUserError.Close
strMessage = "Der er oprettet " & UsersCreated & " brugere.    " & Chr(13) & Chr(13)
If LinesRead > UsersCreated Then
  strMessage = strMessage & "Alle brugere blev ikke oprettet, se filen: " & strOutputFile & "    "& Chr(13)
End If
strResponse = MsgBox (strMessage, 64, "Brugeroprettelse")

Function UserExist(samAccountName)
  UserExist = False
  Set oComputer = GetObject("WinNT://" & strComputername)
  oComputer.Filter = Array("User")
  For Each oUser In oComputer
    UserExist = (oUser.Name = samAccountName)
    If UserExist Then
      Exit For
    End If
  Next
  Set oComputer = Nothing
End Function
'***** Script slut *****
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