Очень часто требуется делать импорт-экспорт данных. В PowerShell есть простой способ работы с CSV файлами – их можно читать и писать. Они могут стать буфером обмена.

Еще одна задача – планирование, когда на начальных этапах проекта требуется заполнить различные Excel файлы для планирования сайтов, возможностей, списков, пользователей, справочников и т.д. Потом эти файлы легко преобразовать в CSV и выполнить скрипт загрузки в нужное место.

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

 

Выгрузка пользователей Active Directory при помощи скрипта PowerShell

Запускаем консоль (обычную или Active Directory)

Можно запустить PowerShell ISE

Выполняем команду import-module ActiveDirectory

Получаем всех пользователей и групп из подразделения RUS домена infoworker.loc

Get-ADUser -Filter * -SearchBase "OU=RUS,DC=Infoworker,DC=loc"

Получаем сведения о пользователе с датой создания

Get-ADUser -Filter {Name -eq "ivanov"} -Properties whenCreated

Выбираем пользователей созданных за последние полгода и выгружаем их в файл

#HELP Get-ADUser -Examples

[System.DateTime]$date = [System.DateTime]::Now.AddDays(-180)

$encoding = "Unicode"

#Unicode,UTF7,UTF8,ASCII,UTF32,BigEndianUnicode,Default,OEM

 

$users = Get-ADUser -LDAPFilter '(&(objectCategory=person)(objectClass=user))' -properties whenCreated, title, department

 

$users | ? {$_.whenCreated -gt $date} | Export-Csv 'c:\users.csv' -Encoding $encoding

Import-Csv 'c:\users.csv' | Out-GridView

 

 

Выгрузка данных из таблицы SQL server при помощи PowerShell

# загрузить библиотеку ADO.NET для работы с данными

[System.Reflection.Assembly]::LoadWithPartialName("System.Data")

 

# создать соединение с БД SQL Server и открыть его

$conn = New-Object "System.Data.SqlClient.SqlConnection" -ArgumentList "server=mysrv; database=mydbname; integrated security=SSPI"

$conn.Open()

 

# создать sql запрос и указать текст запроса

$cmd = $conn.CreateCommand()

$cmd.CommandText = "select * from [dbo].[myTable]"

 

# создать адаптер, таблицу и заполнить ее данными

$adapter = New-Object "System.Data.SqlClient.SqlDataAdapter" -ArgumentList $cmd

$table = New-Object "System.Data.DataTable" -ArgumentList "Table1"

$adapter.Fill($table)

 

# сделать экспорт, потом импорт и проверить наличие данных

$table | Export-Csv "c:\data.csv" -Encoding "Unicode" -Delimiter "`t"

Import-Csv "c:\data.csv" -Delimiter "`t" | Out-GridView

 

Загрузка данных в список контактов SharePoint при помощи PowerShell

$web = Get-SPWeb http://portal

$users = Import-Csv -Delimiter "`t" -Path "c:\contacts.txt"

$list = $web.Lists["Контакты"]

#Выполните команду, которая позволит узнать имена полей в списке:

#$list.Fields | select InternalName,Title | Out-GridView

$users | where {

$item = $list.AddItem();

$item["FirstName"]=$_.Firstname;

$item["Title"]=$_.Lastname;

$item["JobTitle"]=$_.Job;

$item["Company"]=$_. Company;

$item["WorkPhone"]=$_.Phone;

$item.Update();

}

 

 

Выгрузка данных из списка SharePoint при помощи PowerShell

$web = Get-SPWeb http://portal

$list = $web.Lists["Контакты"]

$list.Items. GetDataTable() | Export-Csv "c:\data.csv" -Encoding "Unicode" -Delimiter "`t"