hromadne zakladani uctu v domene W2k3

Na téma Windows XP, 2000, Me, 98, 95 a starší

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Iol 17. 5. 2007 14:29

Zdravím, potřeboval bych nějak elegantně vyřešit hromadné zakládání účtů v doméně. Vyhovovalo by mi načítání uživatelských jmen z externího souboru (txt, xls).
S každým z uživatelů je ale třeba vytvořit také dva adresáře ("user"home a "user"profile a nastavit k nim práva ("user" umí r/w, administrators r/w, jinak nikdo nic...) a přiřadit ho do skupiny uživatelů (ta bude u všech stejná).
Bohužel neumím příliš skriptovat a i logon.vbs, který mapuje tiskárny a síťové složky podle příslušnosti k usergroup mi dal docela zabrat. Googlil jsem celkem usilovně, ale vynaložený čas a reálný posun směrem k řešení se začínají diametrálně rozcházet :-/ .
Pokud už máte s podobnou situací zkušenosti, podělte se pls o své know-how, případně postněte nějaké vzorové scripty...
Go go, google...
Iol
Junior
Uživatelský avatar

Odeslat příspěvekod Milanr1 17. 5. 2007 16:57

IMHO by ses měl s podobnými dotazy obracet na odborné konference. Pokud jsi správce serveru, je to pro Tebe nepsanou povinností. I když i tady občas potkáš špičkové guru jako je Mirek Pragl.
Podívej se aspoň na domácí mailové konference o Windows:
http://konference.vyvojar.cz/
Milan
Milanr1
Pokročilý
Uživatelský avatar

Odeslat příspěvekod Kroxigor 17. 5. 2007 17:20

na tohle bych měl jedinou odpověď RTFM :)
Kroxigor
Junior
Uživatelský avatar

Odeslat příspěvekod Iol 17. 5. 2007 19:12

Uvedu vec na pravou miru. Kdybych byl spravce v soukromem sektoru, bral bych za to odpovidajici penize, studoval bych ve dne v noci a ucastnil se odbornickych konferenci. Protoze jsem ucitel a delam spravu skolni site zdarma ve svem volnem case, ocenil bych, kdyby se do mne, kdyz uz neradi, alespon nikdo nenavazel.
Za tech par roku kdy uz nas neridi INDOS, pro ktery bylo vsechno "bezpecnostnim rizikem" a nic se nedalo nainstalovat a funkce "spravce" spocivala v obcasnem pusteni automaticke obnovy stanice, jsem nejaky pokrok udelal (a hlavne udelala pokrok informatika na nasi skole). Samozrejme nedosahuju vysin ducha nekterych zdejsich polobohu, ale kdo chce, nauci se. Vzhledem k tomu, ze mou prioritou bylo usetrit skole penize, musel jsem se naucit sam jak nastavit pravidla domeny, jak odladit cestovni profily, jak udelat bezpecny FW, jak si naroutovat pristup do skoly z domu a spoustu dalsich ukonu. To, ze dneska vsechno funguje jak ma, neni nahoda - jsou to hodiny a hodiny prace a hledani... Nechci aby to znelo jako chlubeni, protoze nemam nac byt hrdy - vsechen cas potrebny k ovladnuti vyse zmineneho jsem musel ukrast me vlastni rodine, coz mi hlavne v posledni dobe zacalo dost vadit. Pokud nekoho urazi, ze poprve za X let co ctu zive jsem si dovolil vznest dotaz na foru, omlouvam se a utikam cist "ten zas.ranej manual".
BTW - jak se rika, ze jsou linuxaci namysleni - na rootu jsem se setkal s naprosto odlisnym pristupem.
PS: za linka na konferenci dekuju tanhle vylev ma na svedomi Kroxigor a jeho vserikajici RTFM (kdyby tak nejaky manual existoval - a to jsem v posledni dobe na technetu pecenej varenej) >:-[]
Go go, google...
Iol
Junior
Uživatelský avatar

Odeslat příspěvekod Iol 17. 5. 2007 20:13

Od ledna tohoto roku existuje ceska verze LNM, ktera teoreticky tenhle problem resi. Pro skoly zdarma. Jedna se o specialni skolskou distribuci "jednoduse nastavitelnych W2k3" s klikacim webovym rozhranim pro "spravce" na vytvareni uctu, skupin useru apod... Vyzkousim a dam vedet jak funguje, pokud by mel nekdo tip na jiny nastroj, urcite dejte vedet.
vic info o LNM je na http://www.modernivyuka.cz/spravce/LNM/tabid/202/Default.aspx
Go go, google...
Iol
Junior
Uživatelský avatar

Odeslat příspěvekod Kroxigor 17. 5. 2007 20:35

Mám pro vás špatnou zprávu taky dělám admina na ZŠ kde zároveň učím a hold naše škola neprošla sítem INDOŠ tak si všechno platíme sami a já se taky musel prokousat komplet celým serverem vč instalace a nastavení ... nějakej krátkej rychlej návod není
Doporučuju ať do Vás investují a koupěj aspoň knihu Mistrovství v Win 2003 serveru tam je spousta užitečných informací a postupů
Kroxigor
Junior
Uživatelský avatar

Odeslat příspěvekod Iol 18. 5. 2007 07:14

1) Mam pocit, ze si ze mne strilite, protoze byt skutecnym adminem, pak byste konkretnost meho problemu chapal a ne mne odkazoval na nejaky manual (viz vas prvni uletly prispevek).
2) Uvadenou knihu mam a cerpam z ni. Temata jako je "migrace domen" mne ale v tuto chvili vazne moc nezajimaji a uvedena problematika (nastroje pro hromadnou spravu ucti s prednastavenymi akcemi pro vytvareni sitovych prostredku) tam neni. Nicmene by to mel resit LNM (viz vyse uvedeny odkaz).
3) Kdo vam nakukal, ze skoly ktere maji INDOSE si nic neplati? V ramci INDOSe jsme dostali 11ks pracovnich stanic + server + HPLJ2200 + licence na OEM windows 2000 (11ks). Priblizne pred dvema lety jsme od indose odesli (tedy hned jak to bylo mozne) a vyse uvedene nam bylo v nepouzitelnem stavu predano. Zacnu tim, ze jsem musel preinstalovat server, ktery v ramci svych povinnosti ani neshodili, hacknout se do jejich cisek a zrusit nesmyslne rozdeleni na 3 podsite, nehlede na instalaci stanic a zacleneni do domeny, vyresetovani a znovunastaveni HPcka2200 (aby se dalo tisknout po siti) byla taky lahudka. Nechci ani pomyslet, na ten hnus, kdy nam bylo "shora" receno, ze budto si muzeme ponechat nase stavajici pripojeni pres Telecom, ktere nam bude hradit stat a nebo si muzeme zvolit poskytovatele libovolneho (a nedaji nam ani kacku). V te dobe uz jsme pro nedostatecnou rychlost pripojeni (512kBps pro 40PC) uz davno nahradniho ISP meli. Narozdil od nas vy, cervene skoly jste na pripojeni penize dostaly (pokud se nepletu cca 25.000,- pro skoly s 300 zaky na rok) a nikdo se vas neptal od koho pripojeni mate!!! Tohle je INDOS a jeho vyhody v praxi! Pravda, diky tomu jsem se naucil v linuxu vybalancovat traffic mezi dvema poskytovateli, takze v podstate sama pozitiva a socialni jistoty.
4) Valna vetsina cervenych skol si nechava svou sit outsourcovat, takze predpokladam, ze vy osobne budete nejspis patrit k tem stastlivcum, kterym "to nekdo rozchodil" a ted uz provadite jen udrzovaci rutinu a hazite ramenama, kdyz nekdo potrebuje radu.
Pokud vas muj prispevek urazi, presne to jsem mel v umyslu. I vase druha rada patri do kategorie nepouzitelnych a muzete si ji strcit vite kam...
Go go, google...
Iol
Junior
Uživatelský avatar

Odeslat příspěvekod Jack 18. 5. 2007 07:44

Vzorové soubory jsem poslal sem:
Kód: Vybrat vše
http://leteckaposta.cz/700365032
Je to VBScript. Mělo by to po drobných úpravách pro vaše potřeby fungovat.
Vím že budu pranýřován ale neodpustím si poznámku. Doporučuji http://www.poradna.net kde tento problém můžeme dále a podrobněji diskutovat.
Jack
Junior

Odeslat příspěvekod pakozdy 18. 5. 2007 07:52

no aby sa tu nekecalo iba o nicom tak na uvod skus prikaz Dsadd user
tento sa da dalej zoskriptovat podla potreby.

popis prikazu najdes ked zadas dsadd user help

dalej si pozri toto: http://groups.google.com/group/microsof ... d55a1ccce1

[/url]
JE TAM AJ VBS SKRIPT NA CITANIE Z EXCELU . ale asi si hobudes musiet prisposobit

pripadne popozeraj toto: http://www.microsoft.com/technet/scriptcenter/scripts/ad/users/manage/default.mspx alebo toto http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx
je to zbierka VBS alebo JS skriptov primarne urcenych ako ukazkove skripty na management windowsov, AD a vsetkeho mozneho.
pakozdy
Kolemjdoucí

Odeslat příspěvekod P - E - T - E - R 18. 5. 2007 08:01

niesom ziaden expert ale pokial sa jedna o nejaku jednorazovu zalezitost skusil by som tuto trialku ktora ma moznost importu z CSV

http://manageengine.adventnet.com/products/ad-manager/active_directory_bulk_user_management.html

dalej by som pozrel tento zaujimavy blog

http://blog.scottlowe.org/2006/06/20/mass-changes-in-active-directory/

GL :)
P - E - T - E - R
Junior

Odeslat příspěvekod Miroslav Pragl 18. 5. 2007 08:03

mrkni do archivu konference na vyvojar.cz, toto se tam resi casto

MP
Miroslav Pragl
Expert
Uživatelský avatar

Odeslat příspěvekod Kroxigor 18. 5. 2007 08:53

Iol píše:1) Mam pocit, ze si ze mne strilite, protoze byt skutecnym adminem, pak byste konkretnost meho problemu chapal a ne mne odkazoval na nejaky manual (viz vas prvni uletly prispevek).
2) Uvadenou knihu mam a cerpam z ni. Temata jako je "migrace domen" mne ale v tuto chvili vazne moc nezajimaji a uvedena problematika (nastroje pro hromadnou spravu ucti s prednastavenymi akcemi pro vytvareni sitovych prostredku) tam neni. Nicmene by to mel resit LNM (viz vyse uvedeny odkaz).
3) Kdo vam nakukal, ze skoly ktere maji INDOSE si nic neplati? V ramci INDOSe jsme dostali 11ks pracovnich stanic + server + HPLJ2200 + licence na OEM windows 2000 (11ks). Priblizne pred dvema lety jsme od indose odesli (tedy hned jak to bylo mozne) a vyse uvedene nam bylo v nepouzitelnem stavu predano. Zacnu tim, ze jsem musel preinstalovat server, ktery v ramci svych povinnosti ani neshodili, hacknout se do jejich cisek a zrusit nesmyslne rozdeleni na 3 podsite, nehlede na instalaci stanic a zacleneni do domeny, vyresetovani a znovunastaveni HPcka2200 (aby se dalo tisknout po siti) byla taky lahudka. Nechci ani pomyslet, na ten hnus, kdy nam bylo "shora" receno, ze budto si muzeme ponechat nase stavajici pripojeni pres Telecom, ktere nam bude hradit stat a nebo si muzeme zvolit poskytovatele libovolneho (a nedaji nam ani kacku). V te dobe uz jsme pro nedostatecnou rychlost pripojeni (512kBps pro 40PC) uz davno nahradniho ISP meli. Narozdil od nas vy, cervene skoly jste na pripojeni penize dostaly (pokud se nepletu cca 25.000,- pro skoly s 300 zaky na rok) a nikdo se vas neptal od koho pripojeni mate!!! Tohle je INDOS a jeho vyhody v praxi! Pravda, diky tomu jsem se naucil v linuxu vybalancovat traffic mezi dvema poskytovateli, takze v podstate sama pozitiva a socialni jistoty.
4) Valna vetsina cervenych skol si nechava svou sit outsourcovat, takze predpokladam, ze vy osobne budete nejspis patrit k tem stastlivcum, kterym "to nekdo rozchodil" a ted uz provadite jen udrzovaci rutinu a hazite ramenama, kdyz nekdo potrebuje radu.
Pokud vas muj prispevek urazi, presne to jsem mel v umyslu. I vase druha rada patri do kategorie nepouzitelnych a muzete si ji strcit vite kam...


ad 1)jsem skutečným adminem a bohužel vím že nejlepší je se prostě naučit problémy řešit např po jedné záplatě se mi odstavil přístup na server a ač znám několik adminů nikdo mi nepomohl buď řešili něco jiného nevěděli a pod.
ad 2) jsou i jiné zdroje např microsoft a hledat v TechNetu či KB hold kdo hledá ten najde ale je k tomu nutná aj
ad 3) v rámci INDOŠe jsme nedostali nic páč se všude v dotaznících ptali kolik máte PC ale nikde se neptali na konfiguraci
pro nás to znamenalo jediné neinvestovat do jiných věcí a shánět sponzory ... internet si musíme platit z vlastních zdrojů (provozní náklady školy)
ad 4) tak u nás se o veškerý chod IT starám já nikdo jiný žádná najatá firma no a asi to taky bude tím že si sám zvyšuju kvalifikaci a chodím na školení a pod. samozřejmě i ve svém volném čase.
Hold mě pracovat pro školství baví i když mě lanaří firmy a nabízejí mi i několikanásobek platu.

abyste neřekl, že jsem zlej tož link na LNM
http://www.microsoft.com/cze/education/lnm/default.mspx
a nebo odkaz na ovládání AD z příkazového řádku to umožňuje hromadné přidání uživatelů do AD viz příkaz dsadd
http://technet2.microsoft.com/windowsse ... x?mfr=true
Kroxigor
Junior
Uživatelský avatar

Odeslat příspěvekod Iol 18. 5. 2007 09:43

To Kroxigor: tyhle linky jste moh poslat driv a usetril byste toto forum mych vylevu. BTW pokud jste si od MSMT nevzali prispevek na internet (jako cervena skola), tak jste divni...

to all: diky za prispevky, zkousim to postupne, soucasne uz mam objednany LNM... Vysledne aplikovane reseni sem postnu, at to muzeme uzavrit. Pokud mozno se budu snazit spachat to tak, aby vysledne pridavaci rozhrani bylo co nejjednodussi, at ho zvladnou vsichni ucitele.
Go go, google...
Iol
Junior
Uživatelský avatar

Odeslat příspěvekod Kroxigor 18. 5. 2007 10:00

Iol píše:To Kroxigor: tyhle linky jste moh poslat driv a usetril byste toto forum mych vylevu. BTW pokud jste si od MSMT nevzali prispevek na internet (jako cervena skola), tak jste divni...


žádali jsme každej rok, bohužel nám to bylo zamítnuto až na jeden rok což je dost bída na to, že internet u nás běží od r. 1998 a LAN máme od r. 1996

Ať se to daří a žáci moc neničej vybavení a nervíky :lol:
Kroxigor
Junior
Uživatelský avatar

Odeslat příspěvekod Iol 18. 5. 2007 17:20

inspiroval jsem se tady:
Kód: Vybrat vše
'info
   ' users script vbs
   ' create users in vhs-vbs script from a text file
   ' use 2 source of inspiration:
   ' win2000ads
   ' ADSI-Script-SysAdm
   '
   ' use a structure created by unit.vbs :
   ' - the naming is based of the acronyme of the unit = ACRONYME
   ' - the NETBIOS name computer is used to ressource on this computer
   '   main OU = "ACRONYME"
   '      Global Group admin of the OU = "ACRONYME-AdminG"
   '      Global Group staff of the OU = "ACRONYME-StaffG"
   '      Global Group student of the OU = "ACRONYME-StudentG"
   '      Global Group guest of the OU = "ACRONYME-GuestG"
   '      Local Group to use home directory of the OU = "NETBIOS-home-ACRONYME"
   '   main sharing of the OU (for home directory and profiles) = "ACRONYME-home"
   '      (acces by the UNC = "\\NETBIOS\ACRONYME-home)
   '   the user
   '      is inclued in Global Group staff of the OU = "ACRONYME-StaffG"
   '      this home directoy = "\\NETBIOS\ACRONYME-home\USER"
   '      this profiles directoy = "\\NETBIOS\ACRONYME-home\USER\profiles"
   '
   ' by Laurent.Kling@epfl.ch


'***********
'Force all variables to be declared so that we don't make any mistakes
   Option Explicit
   
   Const ForReading = 1
   Const ForWritting = 2
   Const ForAppending = 8
   
   On Error Resume Next
   
   'Include "AdsErr.vbs"   'pour le traitement des erreurs ADSI
   Dim   strErr   'Current Error String
   Dim   tsErr   'Current TextStream for Error
   
   sub adsiErr()
      strErr = "An error has occurred in Adsi cmd." & vbCrLf & vbCrLf
      Select case Err.Number
      case &H80005000:
         strErr = strErr &"Error: Invalid ADSI pathname" & vbCrLf
      case &H80005001:
         strErr = strErr &"Error: Unknown Domain Object" & vbCrLf
      case &H80005002:
         strErr = strErr &"Error: Unknown User Object" & vbCrLf
      case &H80005003:
         strErr = strErr &"Error: Unknown Computer Object" & vbCrLf
      case &H80005004:
         strErr = strErr &"Error: Unknown ADSI Object Requested" & vbCrLf
      case &H80005005:
         strErr = strErr &"Error: ADSI Property not set" & vbCrLf
      case &H80005006:
         strErr = strErr &"Error: ADSI Property not supported" & vbCrLf
      case &H80005007:
         strErr = strErr &"Error: ADSI property invalid" & vbCrLf
      case &H80005008:
         strErr = strErr &"Error: One or more input parameters invalid" & vbCrLf
      case &H80005009:
         strErr = strErr &"Error: Specified Object not bound to Remote Resource" & vbCrLf
      case &H8000500A:
         strErr = strErr &"Error: ADSI Object not modified" & vbCrLf
      case &H8000500B:
         strErr = strErr &"Error: ADSI Object has been modified" & vbCrLf
      case &H8000500C:
         strErr = strErr &"Error: ADSI datatype can't be converted" & vbCrLf
      case &H8000500D:
         strErr = strErr &"Error: Property not found in cache" & vbCrLf
      case &H8000500E:
         strErr = strErr &"Error: ADSI Property exists" & vbCrLf
      case &H8000500F:
         strErr = strErr &"Error: Attempted action violates DS schema rules" & vbCrLf
      case &H80005010:
         strErr = strErr &"Error: During query, Specified column not set" & vbCrLf
      case &H80005011:
         strErr = strErr &"Error: During query, One or more error occured" & vbCrLf
      case &H80005012:
         strErr = strErr &"Error: During query, No more rows" & vbCrLf
      case &H80005013:
         strErr = strErr &"Error: During query, No more columns" & vbCrLf
      case &H80005014:
         strErr = strErr &"Error: During query, Search filter is invalid" & vbCrLf
      case &H80004005:
         strErr = strErr &"Error: COM Error" & Err.Description
      case &H800401E4:
         strErr = strErr &"Error: COM Object not Found" & vbCrLf
      case &H800708B0:
         strErr = strErr &"Error: Unable to add, User Exists" & vbCrLf
   
      case else:
         strErr = strErr &"Status: Unknown Error " & Hex(Err.Number) & " ... " & Err.Source & "" & vbCrLf
      end Select
      
      WScript.Echo strErr
      If tsErr <> Nothing Then
         tsErr.Write strErr
      End If
   End Sub


'***********
'Declare all variables
   Dim   arrUser      'Array of parameters
   Dim arrUnit         'Array of Unit param
   
   Dim strUnitAcro,strUnitFull   'name of the unit (acronyme & description)
   Dim   strUnitDomainPath      'Name of the domain
   Dim   strUnitDomainNT         'Name of the domain in NT
   Dim   strUnitComputer         'Name netbios of the computer
   Dim strUnitDrive         'Drive of sharing
   Dim   strAdminSciper         'Id of the Adninistrator
   Dim strUnitDomainDNS      'name of the domain in DNS form
   Dim   strUnitPathNT         'name of the sharing in NT
   Dim strUnitDrivePath      'Drive of sharing
                        'Idx in arrUser
   Const UserUnit      = 0      '   - Unit
   Const UserInstit   = 1      '   - Institut
   Const UserDept      = 2      '   - Departement
   Const UserSciper   = 3      '   - Sciper
   Const UserShortName   = 4      '   - nom 8 char
   Const UserFullName   = 5      '   - nom e-mail cso
   Const UserFonction   = 6      '   - Fonction
   Const UserFirstName   = 7      '   - Prenom
   Const UserLastName   = 8      '   - Nom
   Const UserPhone      = 9      '   - Telephone
   Const UserFax      = 10   '   - Fax
   Const UserOffice   = 11   '   - Bureau
   
   Dim strExpdate         'Expiration date of of the current user
   Dim   strPasswd         'Password of the current user
   Dim   adsUserAdress      'pointer sur the structure of postal adresse
   Dim   strUserPathNT      'name of the sharing in NT
   Dim   strUserDrivePath   'name of the direct sharing
   Dim   strUserProfilePath   'name of the profile position
   Dim   fldUserHomeDir      'pointer to the user folder
   Dim   fldUserProfileDir   'pointer to the user profile folder
   Dim tsUserConfigTxt      'file (TextStream) to output configuration
   Dim tsUserlogTxt      'file to log modification
   
   Dim adsDomainOU      'pointer to the current ou in domain
   Dim adsAdminG      'Pointer to the Managers group
   Dim adsStaffG      'Pointer to the users group
   Dim adsUser         'pointer to the current user
   Dim   strDomainOU      'name (LDAP) of the OU
   Dim   tsUsersFile      'pointer to the input file of user
   Dim   strUsersFilePath'nom du fichier contenant les users
   Dim   tsUnitFile      'pointer to the input file of unit
   Dim   strUsersLine   'current user = current line...
   Dim   strUnitLine      'current Unit = current line...
   Dim strMsg,intMsg   ' for MsgBox
   Dim curDate         'current date
   Dim   strDateTime      'current execution time of thes csript
   
   Dim   WshShell         'Pointer to script shell
   Dim   WshSysEnv         'Pointer to shell environement
   Dim Fso               'Pointer to the file system object
   Dim strScriptPath      'Name of the current folder of script
   Dim strTmp            'string temporaire

'***********
' initialise all global object
   Set WshShell = Wscript.CreateObject("Wscript.Shell")
   Set Fso = CreateObject("Scripting.FileSystemObject")
   strScriptPath = Fso.GetParentFolderName(WScript.ScriptFullName)

'***********
' Writes the result to a UNIT-log-DATE-TIME.txt file, created in the script directory
   curDate =  Now   ' curDate contains the current system date.
   strDateTime = FormatDateTime(curDate, vbShortDate) & "-" _
   & FormatDateTime(curDate, vbShortTime)
   strDateTime = Replace(strDateTime, ":", ".")   ' pour ne pas vaoir : in time
   strDateTime = Replace(strDateTime, ".", "")   ' pour ne pas avoir de .
   strTmp = strScriptPath & "\" & "users-" & strDateTime &".txt"
   WScript.Echo "Fichier log: " & strTmp
   Set tsUserlogTxt = Fso.CreateTextFile(strTmp, 1)
   ' Set the Text Stream for the Error
   Set tsErr = tsUserlogTxt
   
   strTmp = WScript.Name & " ver. " & WScript.Version & vbCrLf _
   & "The host is: " & WScript.FullName & " running" & vbCrLf _
   & WScript.ScriptName & " from " & WScript.Path & vbCrLf _
   & "Script: " & WScript.ScriptFullName & vbCrLf & vbCrLf
   
   WshShell.LogEvent 0, strTmp
   tsUserlogTxt.Write strTmp
   
   'open the list of the current users
   strTmp = strScriptPath & "\" & "users-current" & ".txt"
   WScript.Echo "Fichier users: " & strTmp
   Set tsUserConfigTxt = Fso.OpenTextFile(strTmp, ForAppending, True)

'***********
' From O'Reylly Book -
   ' Example 16-4: Using a Text File to Create Many User Accounts in Windows 2000

'***********
'Open the text file as a text stream for reading.
'Don't create a file if users-to-create.txt doesn't exist
   strUsersFilePath = strScriptPath & "\"& "new-users" & ".txt"
   Set tsUsersFile = fso.OpenTextFile(strUsersFilePath, ForReading, False)
   strUnitAcro = ""   'initialise the default unit...
   
   '***********
   'Execute the lines inside the loop, even though you're not at the end
   'of the file
      While Not tsUsersFile.AtEndOfStream
   
      '***********
      'Read a line, and use the Split function to split the data set into
      'its separate parts
         strUsersLine = tsUsersFile.ReadLine
         arrUser = Split(strUsersLine, ":")
      'test if header line
         If  LCase(arrUser(UserUnit)) = "unit"  Then
            'read the next line, the current is header
            strUsersLine = tsUsersFile.ReadLine
            arrUser = Split(strUsersLine, ":")
         End if
   
      strUnitAcro = LCase(strUnitAcro)'in lowercase (for cosmetic aspect)
      arrUser(UserUnit) = LCase(arrUser(UserUnit))'in lowercase, for comparaison
   
      If  arrUser(UserUnit) <> strUnitAcro  Then
         ' il faut lire le fichier de l'unite
         ' initalise l'unite
            strUnitAcro = arrUser(UserUnit)
            strTmp = strScriptPath & "\"& strUnitAcro & "-unit" & ".txt"
            Set tsUnitFile = fso.OpenTextFile(strTmp, ForReading, False)
         ' extract data from the file
            strUnitLine = tsUnitFile.ReadLine
            arrUnit = Split(strUnitLine, ":")
            arrUnit(0) = LCase(arrUnit(0))'in lowercase, for comparaison
         
         If  arrUnit(0) <> strUnitAcro  Then
         ' inconsitance entre l'unite et le nom fichier Erreur !
            intMsg = MsgBox(strMsg,vbCritical,"inconsitance entre l'unite et le nom fichier Erreur !")
            Wscript.Quit(0)
         End If
         
         strUnitDomainPath = arrUnit(1)
         strTmp = strUnitDomainPath
         strTmp = Replace(strTmp,"DC=", ".")   ' pour ne pas avoir de fomat LDAP
         strTmp = Replace(strTmp,",", "")   ' pour ne pas avoir , du fomat LDAP
         strUnitDomainDNS = Right(strTmp,Len(strTmp)-1)   ' suprimme le . au debut
   
         strUnitDomainNT = arrUnit(2)
         strUnitComputer = arrUnit(3)
         strUnitDrive = arrUnit(4)
         strAdminSciper = arrUnit(5)
         strUnitFull = arrUnit(6)
         
         strUnitPathNT = "\\" & strUnitDomainNT & "\" & strUnitAcro
         strUnitDrivePath = strUnitDrive & ":\" & strUnitAcro & "-home"   'Drive of sharing
   
         strDomainOU = "OU="& strUnitAcro & "," & strUnitDomainPath
         strTmp = "LDAP://" & strDomainOU
         Set adsDomainOU = GetObject(strTmp)
   
         strTmp = "LDAP://" & "CN=" & strUnitAcro & "-AdminG" & "," &strDomainOU
         Set adsAdminG = GetObject(strTmp)
   
         strTmp = "LDAP://" & "CN=" & strUnitAcro & "-StaffG" & "," &strDomainOU
         Set adsStaffG = GetObject(strTmp)
         
         'Close the file
         tsUnitFile.Close
   
      End If
   
      ' Set the parameters not in file
         strExpdate = "30/10/2003"
         strPasswd = arrUser(UserSciper)
   
      Set adsUser = adsDomainOU.Create("user","cn=" & arrUser(UserFullName))
      adsUser.Put "sAMAccountName", arrUser(UserShortName)
      adsUser.Put "userPrincipalName", arrUser(UserFullName) & "@" & strUnitDomainDNS
   
      '***********
      'Write the newly created object out from the property cache
      'Read all the properties for the object, including
      'the ones set by the system on creation
         adsUser.SetInfo
         If Err Then adsiErr()
         adsUser.GetInfo
   
      '***********
      'Set the properties
         ' first the general properties
         If arrUser(UserFirstName) <> ""  Then _
            adsUser.FirstName = arrUser(UserFirstName)   '2k only
         If arrUser(UserLastName) <> ""  Then _
            adsUser.LastName = arrUser(UserLastName)   '2k only
         If arrUser(UserFullName) <> ""  Then
            adsUser.DisplayName = arrUser(UserFullName)
            adsUser.Description = arrUser(UserFullName) _
               & " dans l'OU " & strUnitAcro & " (" & strUnitFull & ")"
            adsUser.EmailAddress = arrUser(UserFullName) & "@epfl.ch"'2k only
         End if
         If arrUser(UserOffice) <> ""  Then _
            adsUser.OfficeLocations = arrUser(UserOffice)'2k only
         If arrUser(UserPhone) <> ""  Then _
            adsUser.TelephoneNumber = arrUser(UserPhone)'2k only
         If arrUser(UserFax) <> ""  Then _
            adsUser.FaxNumber = arrUser(UserFax)'2k only
         If arrUser(UserFirstName) <> ""  Then _
            adsUser.FirstName = arrUser(UserFirstName)   '2k only
         If arrUser(UserSciper) <> ""  Then _
            adsUser.EmployeeID = arrUser(UserSciper)'2k only
         adsUser.SetInfo
         If Err Then adsiErr()
         
         ' second, the address & Organization properties
         If arrUser(UserFonction) <> ""  Then _
            adsUser.Title = arrUser(UserFonction)      '2k only
         If arrUser(UserDept) <> ""  Then _
            adsUser.Department = "EPFL-" & arrUser(UserDept) _
            & "-" & arrUser(UserInstit) & "-" & arrUser(UserUnit)'2k only
         If arrUser(UserInstit) <> ""  Then _
            adsUser.Division = arrUser(UserInstit) & "-" & arrUser(UserUnit)'2k only
         adsUser.SetInfo
         If Err Then adsiErr()
         
         ' third, the account properties
         ' -Logon Name (userPrincipalName) is set before
         ' -NT Logon Name (sAMAccountName) is set before
         adsUser.IsAccountLocked = False
         adsUser.PasswordRequired = True   
         adsUser.AccountDisabled = False
         adsUser.AccountExpirationDate = strExpdate
         adsUser.SetInfo
         If Err Then adsiErr()
         
         ' fourth, the profile
         strUserPathNT = strUnitPathNT _
            & "\" & arrUser(UserShortName)
         strUserDrivePath = strUnitDrivePath & "\" & arrUser(UserShortName)
      
         adsUser.LoginScript = "\\" & strUnitDomainNT _
             & "\Loginscripts\" & strUnitAcro & ".cmd"
         adsUser.Profile = strUserPathNT & "\profile"
         'Set the drive that you'll map to
         adsUser.HomeDirectory = strUserPathNT
         adsUser.Put "homeDrive", "Z:"
         adsUser.SetInfo
         If Err Then adsiErr()
      
         'use input variable because adsi is not working when param is empty !
         strTmp = "Create User dans l'OU: " & strUnitAcro & VbCrLf _
            & "FirstName - LastName   : " & arrUser(UserFirstName) & "-" & arrUser(UserLastName) &VbCrLf _
            & "DisplayName         : " & adsUser.DisplayName &VbCrLf _
            & "Description         : " & adsUser.Description &VbCrLf _
            & "OfficeLocations      : " & arrUser(UserOffice) &VbCrLf _
            & "TelephoneNumber      : " & arrUser(UserPhone) &VbCrLf _
            & "FaxNumber         : " & arrUser(UserFax) &VbCrLf _
            & "EmailAddress         : " & arrUser(UserFullName) & "@epfl.ch" &VbCrLf _
            & "EmployeeID         : " & arrUser(UserSciper) &VbCrLf _
            & "Title            : " & arrUser(UserFonction) &VbCrLf _
            & "Department         : " & "EPFL-" & arrUser(UserDept) &VbCrLf _
            & "Division            : " & arrUser(UserInstit) & "-" & arrUser(UserUnit) &VbCrLf _
            & "ExpirationDate      : " & adsUser.AccountExpirationDate &VbCrLf _
            & "LoginScript         : " & adsUser.LoginScript &VbCrLf _
            & "Profile            : " & adsUser.Profile &VbCrLf _
            & "HomeDirectory      : " & adsUser.HomeDirectory &VbCrLf
         WScript.Echo strTmp
         WshShell.LogEvent 0, strTmp
         tsUserlogTxt.Write strTmp
   
      '***********
      'Create the home directory
         If Not fso.FolderExists(strUserDrivePath) Then
            Set fldUserHomedir = fso.CreateFolder(strUserDrivePath)
         End If
         strUserProfilePath = strUserDrivePath & "\profile"
         If Not fso.FolderExists(strUserProfilePath) Then
            Set fldUserProfileDir = fso.CreateFolder(strUserProfilePath)
         End If
      
      '***********
      'Set full rights for the user to the home directory
      ' and revoque right for the Staff group (for privacy)
         strTmp = "cacls " & strUserDrivePath _
         & " /t /e /g " & arrUser(UserShortName) & ":F" _
         & " /r " & strUnitAcro & "-StaffG"
         WshShell.Run strTmp, 1, True
      
         WScript.Echo "Droit user:" & VbCrLf & strTmp & VbCrLf & VbCrLf
         tsUserlogTxt.Write "Droit user:" & VbCrLf & strTmp & VbCrLf & VbCrLf
         WshShell.LogEvent 0, "Droit user:" & VbCrLf & strTmp & VbCrLf & VbCrLf
   
      '***********
      'Set the password
         adsUser.SetPassword strPasswd
         If Err Then adsiErr()
         ' re-set the required flag...
         adsUser.GetInfo
         adsUser.PasswordRequired = True   
         adsUser.AccountDisabled = True
         adsUser.SetInfo
         If Err Then adsiErr()
         
      '***********
      'Add user to the group Staff (and Admin staff if sciper Admin)
         adsStaffG.Add(adsUser.ADsPath)
         If strAdminSciper = arrUser(UserSciper) Then
            adsAdminG.Add(adsUser.ADsPath)
         End If
      
   
      '***********
      'Append this user to the users-current
         tsUserConfigTxt.WriteLine strUsersLine & ":" & strDateTime
   
      
      '***********
      'Stop referencing this user
         Set adsUser = Nothing
   Wend

'Close the input file
   tsUsersFile.Close
   'Copie to the backup files
   strTmp = strScriptPath & "\" & "new-users-" & strDateTime &".txt"
   Fso.CopyFile strUsersFilePath, strTmp
'Delete the base file & re-create with haeder
   Fso.DeleteFile(strUsersFilePath)
   Set tsUsersFile = fso.OpenTextFile(strUsersFilePath, ForWritting, True)
   strTmp = "Unit:" & "Instit:" & "Dept:" & "Sciper:" _
      & "ShortName:" & "FullName:" & "Fonction:" & "FirstName:" _
      & "LastName:" & "Phone:"& "Fax:" & "Office"
   tsUsersFile.WriteLine(strTmp)
   tsUsersFile.Close

'Close the output User file
   tsUserConfigTxt.Close

'Close the log file
   adsUnitlogTxt.Write "+++ end of log"
   adsUnitlogTxt.Close

a pak tady:
Kód: Vybrat vše
Option Explicit
Dim oExcelApp, oWorkbook, oWorksheet
Dim iCounter, bEmpty, strUser
Dim sPath
sPath = WScript.ScriptFullName
sPath = Left(sPath,Len(sPath)-Len(WScript.ScriptName))

' create Excel
Set oExcelApp = CreateObject("Excel.Application")

' get the Users.xls file and set a reference to the workbook
Set oWorkbook = oExcelApp.Workbooks.Open(sPath & "Users.xls")

' get a reference to the 1st worksheet and activate it
Set oWorksheet = oWorkbook.Worksheets(1)
oWorksheet.Activate
' make Excel visible
oExcelApp.Visible = True

iCounter = 2      ' start on the 2nd row
' loop through the rows bringing back the value of the 1st column
Do Until bEmpty = True   
    strUser = oWorksheet.Cells(iCounter, 1)   ' row, column
   
    If strUser = "" Then
        bEmpty = True
    Else
       ' add a user passing down the values from the cells
       AddUser oWorksheet.Cells(iCounter, 1), oWorksheet.Cells(iCounter, 2), _
          oWorksheet.Cells(iCounter, 3), oWorksheet.Cells(iCounter, 4), _
          oWorksheet.Cells(iCounter, 5), oWorksheet.Cells(iCounter, 6), _
          oWorksheet.Cells(iCounter, 7)
      
       iCounter = iCounter + 1
    End If
Loop

' close Excel
oExcelApp.Quit
WScript.Quit

Sub AddUser(byVal sCN, byVal sUserName, byVal sFirstName, byVal sLastName, _
   byVal sPhone, byVal sPassword, byVal sEMail)
   
   Dim oUSR, oOU
   ' bind to the target OU
   Set oOU = GetObject("LDAP://OU=StudentXOU,DC=NWTraders,DC=msft")
   Set oUSR = oOU.Create("user", "CN=" & sCN)
   
   ' set the properties of the new user
   oUSR.Put "samAccountName", cstr(sUserName)
   oUSR.Put "givenname", cstr(sFirstName)
   oUSR.Put "sn", cstr(sLastName)
   oUSR.Put "telephonenumber", cstr(sPhone)
   oUSR.Put "mail", cstr(sEMail)
   oUSR.SetInfo
   
   msgbox sUserName & " created successfully"
   
   oUSR.SetPassword cstr(sPassword)
   oUSR.AccountDisabled = False
   oUSR.SetInfo
End Sub


Momentalne zkousim kombinaci sirokeho zaberu (home, logon, atd) toho prvniho scriptu s moznosti cteni z excelu toho druheho. Coz by snad uz mela byt muska. Ale ponevadz uz se nam to soboti - dodelam to az z domu pres vikend. Jeste jednou vsem diky a kdyby nekoho trapilo podobne tema, mam v umyslu vytvorit male HOWTO a vystavit ho nekam na web, jak to bude hotove, pridam sem linka. :wink: Preci jen polopaticka ceska vysvetlivka muze nekomu usetrit kus prace.
PS: zajimalo by mne, jestli to budu vsechno zase predelavat az nam dojde to LNM :-)
Go go, google...
Iol
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků