Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Книга Active directory

.pdf
Скачиваний:
553
Добавлен:
16.03.2016
Размер:
8.2 Mб
Скачать

98

Пользователи

Глава 3

ПРИМЕЧАНИЕ Ответы

Ответы на эти вопросы с пояснениями к каждому варианту ответа помещены в разделе «Ответы» в конце книги.

1.Вы являетесь администратором в крупном университете и только что получили по почте файл Excel, содержащий информацию о 2000 студентах, которые через две недели переступят порог этого учебного заведения. Вам нужно как можно быстрее создать учетные записи пользователей для новых студентов. Какую из следующих задач требуется выполнить?

A.Создать шаблон учетной записи пользователя и скопировать его д л я каждого студента.

Б.Запустить команду LDIFDE -i.

B. Использовать команду CSVDE -i.

Г.Запустить команду DSADD USER.

2.Вы являетесь администратором в крупном университете. Какую команду можно использовать для удаления учетных записей уже выпустившихся студентов?

A.LDIFDE. Б. Dsmod.

B.DEL.

Г. CSVDE.

Занятие 2. Создание пользователей с помощью

Windows PowerShell и VBScript

На занятии 1 мы обсудили принцип использования инструментов командной строки для добавления и импорта учетных записей пользователей. На этом занятии мы рассмотрим два самых мощных инструмента д л я в ы п о л н е н и я и автоматизации административных задач: Windows PowerShell и VBScript. Оба инструмента позволяют создавать сценарии, которые могут автоматизировать создание учетных записей пользователей. Инструмент Windows PowerShell также позволяет создавать пользователей в новой оболочке командной строки.

Изучив материал этого занятия, вы сможете:

/ Установить компонент Windows PowerShell в системе Windows Server 2008.

/Идентифицировать ключевые элементы синтаксиса Windows PowerShell, включая командные структуры cmdlets, переменные, псевдонимы, пространства имен и поставщиков.

/Создать пользователя в Windows PowerShell.

/Создать пользователя в VBScript.

Продолжительность занятия — около 75 мин.

Занятие 2 Создание пользователей с помощью Windows PowerShell и VBScript •) Q3

Введение в Windows PowerShell

Инструмент Windows PowerShell предназначен для выполнения и автоматизации административных задач в Windows Server 2008.

СОВЕТ К Э К З А М Е Н У

В этом разделе описаны основы Windows PowerShell. На сертификационном экзамене 70-640 от вас не потребуется создавать сценарии Windows PowerShell, однако вы должны знать командные структуры cmdlets, используемые для выполнения основных задач Active Directory, таких как, например, в упражнениях, описанных в данном руководстве. Подробную информацию об администрировании с помощью Windows PowerShell можно найти в руководстве «Windows PowerShell Scripting Guide», написанном Эдом Уилсоном (Microsoft Press, 2008).

Оболочка командной строки и я з ы к сценариев Windows PowerShell включают свыше 130 инструментов командной строки, которые называются командлетами (cmdlets от c o m m a n d - l e t s ) , с полностью согласованным синтаксисом и соглашениями именования, которые можно расширить с помощью настраиваемых командлетов. В отличие от традиционных командных оболочек, например Cmd.exe в Windows и B A S H в Unix, которые пересылают текстовую команду отдельному процессу и л и утилите и возвращают результаты этой команды в текстовом виде, оболочка Windows PowerShell непосредственно манипулирует объектами Microsoft . NET Framework в командной строке.

Оболочка Windows PowerShell устанавливается в качестве компонента Windows Server 2008. После установки ее можно открыть в меню Пуск (Start). Вы также можете поместить я р л ы к Windows PowerShell в более доступное место. В группе программ W i n d o w s PowerShell щелкните правой кнопкой мыши значок Windows PowerShell и примените команду Закрепить в меню "Пуск" (Pin То Start Menu) . Командная оболочка Windows PowerShell выглядит аналогично командной оболочке Cmd.exe, за исключением того, что по умолчанию в Windows PowerShell используется темно - синий фон, а командная строка начинается с PS. На рис. 3-1 показана командная оболочка Windows PowerShell.

Windows1'owert.heii

WindowsPoucrShe11

<C) 20Ш6КорпорацииМайкрософт.Все права защицены.

PS C:\Uscro\Пдмнннстратор>„

щ ш ш ш м а и ш ш н ш ш в ш п в тттгяттШ/Ш

Рис. 3-1. Консоль Windows PowerShell

100

Пользователи

 

Главаз

 

 

 

 

ПРИМЕЧАНИЕ

Одна оболочка в Windows

 

 

Оболочку Windows PowerShell можно использовать для запуска программ и выполнения команд, идентичных командам, применяемым в командной оболочке. Поэтому оболочка Windows PowerShell обратно совместима для администраторов. В Windows PowerShell можно выполнять административные задачи, аналогичные командам Cmd.exe, либо использовать директивы Windows PowerShell.

Синтаксис, командлеты и объекты Windows PowerShell

В традиционных оболочках наподобие Cmd.exe запускаются такие команды, как dir и сору, которые получают доступ к утилитам, встроенным в оболочку, а также выполняются такие программы, как attrib.exe и xcopy.exe, многие из которых принимают параметры из командной строки и обеспечивают обратную связь в виде выходных данных, ошибок и кодов ошибок.

В Windows PowerShell директивы выполняются с помощью командлетов. Командлет представляет собой команду с одной функцией, которая мани - пулирует объектом. Командлеты используют синтаксис Verb-Noun, то есть указывают действие и объект, разделенные дефисом. В качестве примеров командлетов можно привести Get-Service и Start-Service.

ПРИМЕЧАНИЕ

Поддержка прямого ввода данных и сценариев

Командлеты можно вводить в Windows PowerShell интерактивно или сохранять в файлах сценариев (VPS1), которые потом выполняются в Windows PowerShell.

Понятие объекта

Объект - это программная конструкция. В техническом отношении объект

.NET представляет собой экземпляр класса .NET, который состоит из данных и операций, связанных с этими данными. В определенном смысле объект — это виртуальное представление ресурса. Например, при использовании командлета Get-Service в оболочке Windows PowerShell возвращается один или несколько объектов, представляющих службы. Объекты также могут обладать свойствами, представляющими данные или атрибуты, поддерживаемые ресурсом. Например, объект, представляющий службу, содержит свойства, представляющие имя и тип запуска службы. При извлечении свойства извлекаются данные ресурса. При назначении свойства выполняется запись этих данных в ресурс.

Кроме того, объекты обладают методами, то есть действиями, которые можно с ними выполнять. Например, объект службы располагает методами start и stop. При реализации метода с объектом, представляющим ресурс, выполняется действие с самим ресурсом.

Эти командлеты не пересылают команды и параметры другим утилитам или программам, а непосредственно оперируют с объектами .NET. Если ввести командлет Get-Service, оболочка Windows PowerShell вернет коллекцию объектов всех служб. Результат выполнения командлета представлен в виде таблицы, где указаны служба, ее имя и выводимое имя (рис. 3-2).

Занятие 2

Создание пользователей с помощью Windows PowerShell и VBScript •) Q3

101

 

 

 

Uiiulows PouerShe 11

43

 

(С) 200f« Корпорации М<«йкрш:иф1. Иск up а на 1тии№ны.

 

*f>| С:чизегз\Пшшнистраюр> get-seruico

fioLookupSwc ftLG

flppinfo fipjjMynt AudioEndpointBu. ftudiosru

DPE

BITS

Browser

CcrtPropSwc

cli\_optiniz:atio. COMSysflpp CryptSvc CscService DcomLauncli

Dfs

DFSR

DJicp

DNS Dnscache dot3svc DPS EapHost EvcntLosf EuentSysten FCRegSvc

U L

Информация о совместимости приложений Служка илюза уронил при/1 оке ими Сведения о приложении Управление приложениями

Сридстио П О С Т Р О Е Н И Я конечных точек ...

Windows Audio

С л у ж в Д « А Э О & О Й О И Л Ь Т р й и И И

Фоновая интеллектуальная служба лер...

0 к < П р « ! П Л ! О Л Ь к о м п ь ю т е р о м

Распространение сертификата Microsoft .НЕТ Francwork NCEN u2.G Системное прнлоксимо СОМ* Служсы криптографии Автономные Ф й Й Л Ы

Модуль запуска процессов DCOfl-серввра Прас1р<<нс1ми имен DPS

Репликации DPS DHCP-клнен! DNl>~ccpocp DNS-клиент

Проводная аотонастройка Служба политики диагностики

Расширяемый протокол прооерки подли...

Журнал сосытий Windows Система событий СОМ*

Служеа регистрации платформы Fibre ...

j

Рис. 3-2. Командлет Get-Service

Эти простые команды можно использовать в комбинации или в конвейере для создания более сложных директив. Например, конвейер Get-Service или Format-List генерирует, как показано на рис. 3-3, другой результат.

И Щ И PS С:\иееге\Адмимистратор> got-se»*vico ! format-lice

DisplayNaroe

fleLoukupSuc

Информации о сиипесгигюсти приложений

Stains

Пшнпиц

0cpcndentScroice3

< >

Se rwic с s Dc ре nde dOnО

CanPauacfindContinuc

False

CanSbutdown

False

CanStop

True

Soryicolype

lfin32Sliape Process

Nane

flLC

DisjplayNcune

СЛОЖНА КЛЕИЛ у р о и н и п р и л о ж е н и и

Status

Stopped

Dependent Sis ru ices

<}

ScrviccsDcpendcdOn

False

CanPauscAndCantinuc

CanShutdown

False

CanStop

False

ServiceTypo

Uin320wnProccos

Nane

Appinfo

DioplayNane

Status

Сведения о приложении

DependentSeruices

Stopped

Seru icesDependedOn

<P,-ufSoi:. lip,:S=>

CanPauscflndCnntinue

False

CanS hut down

False

CanStop

False

SoruicoType

Min32Shai.oProcess

E L

J

I"

J'1

Рис. 3-3. Командлет Format-List оперирует с коллекцией объектов, сгенерированной командлетом Get-Service

Командлет Format-List генерирует более детальные результаты, чем GetService. Это важный момент. Командлет Get-Sewice возвращает не статический список трех атрибутов служб, а объекты, представляющие службы. При

-) 102

Пользователи

Глава з

помещении таких объектов в конвейер Format-List командлет Format-List может работать непосредственно с ними и отображать все атрибуты служб.

ПРИМЕЧАНИЕ

Тонкое, но важное отличие

Эта концепция отличается от принципов командной оболочки Windows, где выходные данные одной команды могут помещаться в конвейер другой команды только в текстовом виде. В случае использования Cmd.exe команда format-list лишь переформатирует три элемента информации в результатах команды get-seruice.

Командлет Format-List принимает решение об отображении атрибутов. Вы можете указать отображение всех атрибутов, добавив параметр property со звездочкой, представляющей все возможные значения. Следующая команда перечисляет все доступные параметры всех служб:

get-service | format-list -property •

Получение справочной информации

Поиск информации в Windows PowerShell лучше всего начать с командлета Get-Help, особенно если вы только знакомитесь с Windows PowerShell. Чтобы получить самую простую справку, введите командлет Get-Help, а затем укажите имя командлета, сведения о котором хотите получить. Например:

get-help get-service

Более детальную информацию можно получить, добавив параметры detailed или full, например:

help-get-command -detailed

или

get-help get-command -full

Переменные

Если вам постоянно нужно указывать путь или определение объекта, вы можете присвоить его переменной, чтобы сэкономить время. Переменные в Windows PowerShell всегда начинаются со знака доллара ($). Например, вы можете назначить переменную SDNS для представления объекта, извлекаемого командлетом Get-Service DNS:

$DNS=get-service DNS

При присвоении объекта переменной создается объектная ссылка. Свойства этого объекта можно извлечь, указав свойство с точкой (.). Например, чтобы вернуть состояние службы DNS, введите следующую команду:

SDNS.status

В качестве заполнителя для текущего объекта в текущем конвейере можно использовать особую переменную конвейера ($_)• Например, для извлечения списка всех запущенных служб введите следующую команду:

get-service | where-object { $_.status -eq "Running" }

Эта директива извлекает все службы и передает объекты в конвейер командлета Where-Object, который оценивает каждый объект в конвейере, чтобы определить, присвоено ли значение Running свойству состояния объекта, представленного переменной конвейера $_.

Занятие 2

Создание пользователей с помощью Windows PowerShell и VBScript

•) Q3

Псевдонимы

Использование псевдонима — это альтернативный способ ссылки на командлет. Например, ранее описанный командлет Where-Object имеет псевдоним Where, при использовании которого предыдущий код можно сократить так:

g e t - s e r v i ce | where { $ _ . s t a t u s , - e q "Running" }

Многие командлеты Windows PowerShell уже имеют псевдонимы. Например, для отображения содержимого папки на диске используется командлет Get-Childltem. Этот командлет имеет псевдоним Dir, аналогичный команде в оболочке Windows (Cmd.exe), а также псевдоним Ls, предназначенный для пользователей оболочки UNIX.

Как определить командлет, который «прячется» за псевдонимом? Для этого в командную строку введите alias:

a l i a s d i r

В выходных данных будет указано, что Dir — это псевдоним командлета

Get-Childltem.

Хотя в Windows PowerShell обеспечены псевдонимы для команд оболочки, командлеты W i n d o w s PowerShell используют другие параметры, отличные от команд оболочки Cmd.exe. Например, д л я извлечения каталога папок и всех подпапок в командную строку вводится команда dir/s, а в Windows PowerShell нужно ввести команду dir -recurse.

Пространства имен, поставщики и PSDrive

Командлеты оперируют с объектами в пространстве имен. Папка на диске является примером именного пространства — иерархии, в которой можно осуществлять навигацию. Пространства имен создаются поставщиками. Оболочка Windows PowerShell может получать прямой доступ и манипулировать объектами в пространствах имен этих провайдеров.

Вы н а в е р н я к а з н а к о м ы с концепцией пространства имен тома на диске с буквой или пространства имен общей сетевой папки в виде подключенного сетевого диска. В W i n d o w s PowerShell пространства имен любого провайдера могут быть представлены как PSDrive. Оболочка Windows PowerShell автоматически создает пространство имен PSDrive для каждой буквы диска, уже определенной в Windows.

Оболочка Windows PowerShell выводит эту концепцию на следующий уровень, создавая дополнительные пространства имен PSDrive для распространенных ресурсов. Например, она создает два диска, HKCU и HKLM, для ульев реестра H K E Y _ C U R R E N T _ U S E R и HKEY _ LOCAL _ MACHINE . После этого в реестре можно осуществлять навигацию и манипуляции, как в файловой системе. В командную строку Windows PowerShell введите следующую команду:

cd hklm:\software d i r

Ди с к и также создаются д л я псевдонимов, среды, сертификатов, функций

ипеременных. Д л я перечисления созданных пространств имен PSDrive введите команду get-psdrive.

-) 104

Пользователи

Глава з

Создание пользователя с помощью Windows PowerShell

Далее мы применим Windows PowerShell для создания пользователя в Active Directory. Основной сценарий Windows PowerShell для создания пользователя

выглядит примерно так:

$obj 0U=[ADSI]"LDAP: //0U=Peop1 е, DC=contoso, DC=com" $objUser=$objOU.Create("user","CN=Mary North") SobjUser.Put("sAMAccountName", "тагу.north") SobjUser.SetlnfoO

Э Т О Т К О Д демонстрирует четыре основных шага по созданию объекта в Active Directory с помощью Windows PowerShell.

1.Подключение к контейнеру (например, подразделению), в котором будет создан объект.

2.Применение метода Create контейнера вместе с указанным классом и относительным отличительным именем RDN (Relative Distinguished Name) нового объекта.

3.Заполнение атрибутов объекта с помощью метода Put.

4.Подтверждение изменений в Active Directory с помощью метода Setlnfo объекта.

В следующих разделах эти четыре шага описаны более детально.

Подключение к контейнеру Active Directory

Чтобы создать такой объект, как пользователь, нужно запросить создание объекта у контейнера объекта. Таким образом, процесс начинается с в ы п о л н е н и я действия (метода) с контейнером. Первый шаг состоит в подключении к этому контейнеру. Для работы с объектами Active Directory оболочка Windows PowerShell использует библиотеку адаптеров Active Directory Services Interface (ADSI). Адаптер — это преобразователь между сложной и иногда причудливой природой .NET Framework и упрощенной и согласованной структурой Windows PowerShell. Для подключения к объекту Active Directory выполняется строка запроса LDAP, представляющая собой просто моникер протокола L D A P : / / с именем DN объекта. Первая строка кода выглядит следующим образом: $obj 0U=[ADSI]"LDAP://0U=Peop1е, DC=contoso, DC=com"

Оболочка Windows PowerShell использует адаптер типов ADSI д л я создания объектной ссылки на подразделение People и присваивает ее переменной. Имя переменной objOU соответствует стандартам программирования, согласно которым для идентификации типа переменной используется п р е ф и к с из трех букв, а имена переменных могут быть любой длины и начинаться со знака доллара.

Применение метода Create

На этом этапе переменная $objOU является ссылкой на подразделение People. Вы можете запросить создание объекта с помощью метода контейнера Create. Метод Create требует два параметра, передаваемых в качестве аргументов: класс и RDN-имя объекта, которое является частью имени объекта в родительском

Занятие 2

Создание пользователей с помощью Windows PowerShell и VBScript •) Q3

контейнере. Большинство классов объектов используют в качестве своих RDNимен формат СЫ=имя_обьекта. И м я R D N подразделения ( O U ) указывается р формате 0\5=имя_подразделения, а имя R D N домена — в формате DC=zшя_ домена. Затем следующая строка создает объект пользователях RDN-именем, указанным в формате CN^Mary North:

SobjUser=$objOU.Create("user","CN=Mary North")

Полученный объект присваивается переменной SobjUser, которая представит объект и позволит манипулировать с ним.

Заполнение атрибутов пользователя

Важно помнить, что новый объект и изменения не будут сохранены, пока вы не подтвердите их, а д л я подтверждения изменений требуется заполнить все необходимые атрибуты . Необходимым атрибутом объектов пользователей я в л я е т с я и м я входа п р е д - W i n d o w s 2000. И м я L D A P этого атрибута — sAMAccountName, поэтому приведенная ниже строка кода присваивает объекту атрибут sAMAccountName с помощью метода Put. Стандартный метод Put используется д л я записи свойства объекта. Д л я извлечения свойства применяется стандартный метод Get. Далее показана строка кода:

SobjUser.Put("sAMAccountName", "тагу, north")

Подтверждение изменения с помощью метода Setlnfo

Д л я п о д т в е р ж д е н и я и з м е н е н и й используйте метод Setlnfo объектов Active Directory, как показано в коде:

SobjUser. S e t l n f o O

Заполнение дополнительных атрибутов пользователя

Предыдущие команды создают пользователя лишь с конфигурацией обязательного атрибута sAMAccountName. При создании объекта пользователя нужно заполнить и другие атрибуты. Запись свойства объекта пользователя выполняется с помощью метода Put. Вам нужно многократно использовать один метод, указав к а ж д ы й атрибут, который требуется добавить. Рассмотрим следующий код:

SobjUser.put("sAMAccountName",SsamAccountName) SobjUser. put("userPrincipalName",SuserPrincipalName) SobjUser.put("displayName", SdisplayName)

SobjUser.put("givenName",SgivenName) SobjUser. putC'sn", Ssn)

SobjUser . put("description",Sdescription) SobjUser.put("company", Scompany)

Sobj User.put("department", Sdepartment) S o b j U s e r . p u t ( " t i t l e " , S t i t l e )

SobjUser.put("mail", Smail) SobjUser. S e t l n f o O

Каждая из этих .команд заполняет атрибут пользователя значением, которое хранится в переменной. Не забывайте использовать метод SetlnfoQ объекта пользователя для подтверждения внесенных изменений в Active Directory. Пока не будет применен метод SetlnfoQ, внесенные изменения будут выполняться

5 Зак. 3 3 9 9

-) 106

Пользователи

Глава з

только в локальной копии объекта. Метод SetlnfoQ оценивает свойства объекта для подтверждения. Если атрибуту присвоено недействительное значение, вы получите ошибку в строке SetlnfoQ. С помощью метода GetlnfoQ объекта пользователя можно перезагрузить исходный объект, отменив таким образом все изменения.

Чтобы узнать имя атрибута LDAP, в оснастке Active Directory — пользователи и компьютеры (Active Directory Users and Computers) откройте вкладку Редактор атрибутов (Attribute Editor) диалогового окна свойств учетной записи пользователя. Эта вкладка отображается при установке флажка Дополнитель - ные компоненты (Advanced Features) в меню Вид (View). Редактор атрибутов выводит все атрибуты объекта, включая их LDAP-имена и значения. Чтобы отобразить свойства, заполненные для объекта пользователя, м о ж н о также использовать любую из следующих команд:

SobjUser. psbase.properties SobjUser | get-member

ПРИМЕЧАНИЕ

Многозначные атрибуты

Хотя большинство атрибутов пользователя являются однозначными, некоторые из них многозначные. Если атрибут принимает множество значений, используйте метод PutExQ объекта пользователя. В Интернете выполните поиск ключевых слов PowerShell user array PutEx, чтобы получить адреса ресурсов многочисленных сообществ, где описывается работа с многозначными атрибутами.

А как насчет пароля пользователя? Команда Put не применяется для назначения пароля пользователя. Вместо нее используется метод SetPassword, как показано ниже:

$obj User.SetPasswo rd ("COmp! exP@sswO rd")

К сожалению, метод SetPassword можно использовать только после создания пользователя и активизации метода SetlnfoQ. Это означает, что учетная запись создается до назначения пароля. Здесь дело не в о ш и б к е или ограничении Windows PowerShell, а в сути протоколов Kerberos и LDAP. Тем не менее данная методика вполне безопасна, поскольку учетная запись создается в отключенном состоянии.

После этого нужно включить учетную запись. Флагом состояния учетной записи также нельзя манипулировать с помощью команды Put. Вместо нее используется следующая команда:

SobjUser. psbase. InvokeSet("AccountDisabled",Sfalse) SobjUser. SetlnfoO

Импорт пользователей из базы данных с помощью Windows PowerShell

Хотя на сертификационном экзамене от вас не потребуется применение методов импорта из базы данных с помощью Windows PowerShell, знание этих концепций обеспечит значительные преимущества в автоматизации процесса создания пользователей. Импорт выполняется с помощью нескольких строк дополнительного кода с мощными командлетами Windows PowerShell.

Занятие 2 Создание пользователей с помощью Windows PowerShell и VBScript •) Q3

Предположим, что вы получили из отдела кадров таблицу Excel с данными 0 новых сотрудниках. Программа Excel может сохранить эти данные в виде текстового файла с разделительными запятыми (.csv), который затем можно импортировать с п о м о щ ь ю W i n d o w s PowerShell. Первая строка файла .csv должна содержать имена полей; после нее следуют данные о каждом пользователе. В качестве простого примера рассмотрим файл .csv, сохраненный под именем Newusers.csv:

cn,sAMAccountName, Fi rstName,LastName John Woods, john.woods, Johnathan,Woods Kim Akers,kim.akers,Kimberly,Akers

Обратите внимание на то, что имена полей необязательно соответствуют LDAP - именам атрибутов. Эти имена будут сопоставлены именам атрибутов с помощью сценария.

Оболочка Windows PowerShell может импортировать этот источник данных с помощью одной команды:

$dataSource=import-csv "newusers.csv"

После импорта источника данных в нем нужно пройти циклом по каждой записи. Эта операция выполняется блоком foreach, использующим формат

foreach($dataRecord in

$datasource)

 

 

(

 

 

 

tt выполнение действий

 

 

 

1

'

''

Командлет ForEach проходит циклом по каждому объекту или записи в ис-

точнике данных, п р и с в а и в а я т е к у щ и й объект

переменной SdataRecord, так

что текущую запись представляет переменная

SdataRecord. Теперь вы можете

просмотреть реальные поля в каждой записи, которые становятся свойствами переменной SdataRecord. Например, рассмотрим имя первого пользователя:

SdataRecord.FirstName

Его можно присвоить переменной:

SgivenName = SdataRecord.FirstName

Опять-таки, переменная и л и имя поля необязательно должны соответствовать LDAP - имени атрибута. Сопоставление выполняется при записи переменной со значением в сам атрибут:

$obj User.Put("givenName", SgivenName)

LDAP - атрибут givenName заключен в кавычки. Корректно использовать имя требуется только при ссылке на реальный атрибут объекта. Тем не менее код проще понять, если имена полей источника данных и переменных соответствуют именам атрибутов.

Сложив все фрагменты кода вместе, получим сценарий импорта пользователя (сценарий Userimport . psl):

$objOU=[ADSI]"LDAP://OU=People,DC=contoso,DC=com" SdataSource=import-csv "NewUsers.csv"

foreach($dataRecord in $datasource) { ttmap variables to data source