Блог did5.ru

Про АйТи и около айтишные темы

Метка: powershell

[PowerShell] Блокировка пользователей в AD с истекшим паролем

Комментариев нет

Я уже выкладывал скрипт для блокировки компьютеров в AD с Last Logon больше 90 дней, теперь пришло время пользователей. Для блокировки использую PowerShell с командлетами Quest. Скрипт ищет пользователей в определенном контейнере, если у них пароль не менялся более 90 дней назад, то блокирует учетку и делает пометку в поле Notes этой учетки.

$Date = (Get-Date -format d)
Get-QADUser -PasswordNotChangedFor 90 -SearchRoot 'contoso.com/Users' | `
Disable-QADUser | `
Set-QADUser -Notes "Disabled - $Date, password expired > 90 days ago" | `
Select name

Для поиска учеток использую параметр – PasswordNotChangedFor со значением 90 дней, этого достаточно, чтобы отсеить отпускников, командировочных и т.д. Если этот скрипт запускать регулярно, то стоит добавить фильтр на уже заблокированные учетки, чтобы каждый раз не перезаписывать поле Notes. Фильтр можно взять из скрипта блокировки компьютеров (ссылка выше).

Автор: did5

21 Апр 2015 в 11:12

Рубрика: PowerShell

Метки:

Тормозной поиск учеток ActiveDirectory в SharePoint 2010

Комментариев нет

Проблема медленного поиска учетных записей AD в SharePoint 2010 нервирует администраторов уже очень давно. Соглаитесь, что на поиск учетки не может уходить около 30 секунд. А если необходимо добавить ста пользователям различные права доступа на портале? Ужас!

slow find users in sharepoint thumb1 Тормозной поиск учеток ActiveDirectory в SharePoint 2010

Но не все знают, что проблема решается очень просто, одной командой на PowerShell. Запускаем SharePoint 2010 Management Shell и ввводим следующую команду:

Set-SPSite -Identity "http://portal.contoso.com" -UserAccountDirectoryPath "DC=contoso,DC=com"

Естественно, необходимо поменять название домена и сайта. Можно не ограничиваться уровнем домена, а указать путь до какого-нибудь контейнера OU с пользователями и группами.

Автор: did5

17 Мар 2015 в 11:22

Рубрика: PowerShell,Sharepoint

Метки: ,

[PowerShell] Блокировка ПК с Last Logon больше 90 дней

2 комментария

При большом парке компьютеров в домене сложно выявлять те, на которые давно никто не логинился. Тут PowerShell с командлетами Quest приходит на помощь. Простенький скрипт блокирует компьютеры, на которые никто не логилился больше 90 дней и вносит комментарий с датой блокровки в поле Description.

$Date = (Get-Date -format d)
Get-QADComputer -NotLoggedOnFor 90 -SearchRoot 'contoso.com/Computers' -LdapFilter '(!(userAccountControl:1.2.840.113556.1.4.803:=2))' | Disable-QADComputer | Set-QADComputer -Description "Disabled - $Date, LastLogon > 90 days" | Select name

Параметре –NotLoggedOnFor отвечает за значение LastLogon, т.е. больше скольки дней;
Фильтр -LdapFilter '(!(userAccountControl:1.2.840.113556.1.4.803:=2))' исключает уже заблокированные ПК.

Автор: did5

08 Дек 2014 в 16:34

Рубрика: PowerShell,Windows

Метки: ,

[PowerShell] Обновление данных учетных записей в ActiveDirectory

Комментариев нет

Есть XML файл с актуальными данными сотрудников, из которого нужно обновить некоторые данные у учетных записей в ActiveDirectory (далее – AD). Уникальным индификатором является GUID (Как получить GUID и objectGUID из ActiveDirectory), которые уже выгружены из AD. Как прочитать данные из XML файла с помощью PowerShell я уже писал, поэтому здесь опишу часть скрипта, которая непосредственно вносит изменения в AD. Для работы с AD использую командлеты Quest Powershell.

XML файл имеет следующую структуру:

powershell set qaduser 1 thumb [PowerShell] Обновление данных учетных записей в ActiveDirectory

Последовательно считываем все учетки, берем GUID и остальные данные. В AD изменения вносятся следющей командой:

Set-QADUser $xmluser.GUID -Title $xmluser.title -Description $xmluser.title -Department $xmluser.department.Trim() -Notes $xmluser.info | Out-Null

Казалось бы вопрос решен, но в AD не есть не только пользователи, но и контакты. А командлет Set-QADUser работает только с учетными записями. Если необходимо взаимодействовать с учетными записями и контактами, как в моем случае, то используем командлет Set-QADObject:

Set-QADObject $xmluser.GUID -ObjectAttributes @{title=$xmluser.title;description=$xmluser.title;department=$xmluser.department.Trim();info=$xmluser.info} | Out-Null

Trim () – удаляет пробелы в строке.

Полное описание командлетов Set-QADObject и Get-QADObject с примерами.

Можно также отключать и включать учетные записи в AD с помощью командлета Set-QADObject:

Set-QADObject $xmluser.GUID -ObjectAttributes @{userAccountControl='512'} | Out-Null

512 – вкл, 514 – выкл.

Автор: did5

03 Дек 2014 в 11:41

Рубрика: PowerShell

Метки: ,

[PowerShell] Данные из XML файла

Один комментарий

Есть XML файл с данными сотрудников компании следующей структуры:

powershell read xml 1 thumb [PowerShell] Данные из XML файла

Необходимо из некого выгружать данные с помощью PowerShell. Скрипт достаточно простой получился:

# Пробелы в квадратных скобках нужно убрать
[ xml ]$xmlfile = Get-Content "D:\xml\test.xml"
foreach($xmluser in $xmlfile.domainusers.user) {
Write-Host $xmluser.ФИО
Write-Host $xmluser.Телефон
}

В примере скрипт выводит данные из двух тэгов – ФИО и телефон.

powershell read xml 2 thumb [PowerShell] Данные из XML файла

Автор: did5

25 Ноя 2014 в 11:51

Рубрика: PowerShell,Windows

Метки:

Импорт данных из XML файла в список SharePoint с помощью PowerShell

2 комментария

Появилась задача загрузить данные из файла XML в список SharePoint 2010. XML имеет следующую структуру:

xml to sharepoint list 1 thumb Импорт данных из XML файла в список SharePoint с помощью PowerShell

В SharePoint 2010 заранее создал список — Список пользователей, с соответствующими полями. Вот скрипт на PowerShell, который возьмет данные из файла XML и загурузит в список SharePoint:

if(!(Get-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction:SilentlyContinue))
{
Add-PSSnapin Microsoft.SharePoint.Powershell

#Set these two variables accordingly
$WebURL  = “http://portal.contoso.com/”
$ListName = "Список пользователей"
$XMLFilePath = "C:\scripts\xml\test.xml"

#Get the Web
$web = Get-SPWeb $WebURL
#Get the List
$ProjectList = $web.Lists[$ListName]

#import xml file
[*xml]$ProjectXmlFile = Get-Content $XMLFilePath

foreach ($XMLProject in $ProjectXmlFile.domainusers.user)
 {
$NewProject = $ProjectList.Items.Add()

$NewProject["ФИО"] = $XMLProject.ФИО
$NewProject["Отдел"] = $XMLProject.Отдел
$NewProject["Должность"] = $XMLProject.Должность
$NewProject["Комната"] = $XMLProject.Комната
$NewProject["Рабочий телефон"] = $XMLProject.Телефон
$NewProject["Адрес электронной почты"] = $XMLProject.Почта
$NewProject.Update()
Write-Host "Project $($XMLProject.ФИО) has been Added to External Projects list!"
 }

* в коде есть место — [*xml], так звездочку нужно удалить.

Это скрипт подойдет только для разовой загрузки данных, т.к. скрипт не заменяет данные в списке SharePoint, а еще раз их туда запишет, если его повторно запустить. Т.е. в списке будет две Ивановой, и две Соколовой.

Автор: did5

14 Ноя 2014 в 11:25

Рубрика: PowerShell,Sharepoint

Метки: ,

Как узнать версию SharePoint

Комментариев нет

Все время забываю, где можно посмотреть версию SharePoint. Так что это напоминалка для себя.

1. Версию SharePoint можно посмотреть в Центре администрирования –> Параметры системы –> Управление серверами в этой ферме.

sharepoint version center thumb Как узнать версию SharePoint

2. С помощью PowerShell:

Get-SPFarm | Select BuildVersion

sharepoint version powershell thumb Как узнать версию SharePoint

Командлет доступен только через Командную консоль SharePoint 2010, если через обычную консоль PowerShell, то необходимо добавить оснастку Microsoft.SharePoint.Powershell.

if(!(Get-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction:SilentlyContinue))
{
Add-PSSnapin Microsoft.SharePoint.Powershell
}
get-spfarm | select BuildVersion

3. Еще один вариант:

([Microsoft.SharePoint.Administration.SPFarm]::Local).buildversion

sharepoint version powershell 2 thumb Как узнать версию SharePoint

Автор: did5

14 Ноя 2014 в 10:34

Рубрика: Sharepoint

Метки: ,

[PowerShell] Как получить GUID и objectGUID из ActiveDirectory

Комментариев нет

При выгрузке свойства objectGUID учетных записей пользователей из ActiveDirectory при помощи Quest Powershell выяснилась одна особенность. objectGUID в результате выгрузки отличается от оригинала в AD, т.е. его потом нельзя использовать для поиска учеток в AD без преобразования.

Тут все дело в представлении. Для примера:

Get-QADUser USER | fl objectguid,guid

В результате получим два разных варианта:
objectGUID : 3F8C2B60E1E26C44B6D20FF8F6C3028F
Guid       : 602b8c3f-e2e1-446c-b6d2-0ff8f6c3028f

Guid совпадает с оригиналом из AD, а objectGUID его преобразованная версия в формат HexString. Чтобы не забивать себе голову обратным преобразованием, просто используем свойство Guid.

Для наглядного примера можно использовать эти команды:

$guid = (Get-QADUser USER).guid
Get-QADUser $guid

В результате должны отобразиться данные USER.

Полезные ссылки по этой теме:

Автор: did5

10 Ноя 2014 в 16:18

Рубрика: PowerShell,Windows

Метки:

[PowerShell] Как удалить файлы месячной давности

Комментариев нет

Простенький скрипт на PowerShell для удаления файлов, которые старше месяца:

$date = (Get-Date).AddMonths(-1)
$pathFolder = "D:\test1"
Get-ChildItem -Path $pathFolder | where {!$_.PSIsContainer} |
foreach { if ($_.LastWriteTime -lt $date) { $file = $pathFolder + "\" + $_
Remove-Item $pathFolder $file -whatif
}
}

За основу взял скрипт отсюда.

Автор: did5

15 Сен 2014 в 16:29

Рубрика: PowerShell

Метки:

[PowerShell] Последний модифицированный файл в каталоге

Комментариев нет

Найти последний модифицированный файл в каталоге можно так:

 $path = "D:\test1"
$file = Get-ChildItem -Path $path | Sort-Object LastWriteTime | Select-Object -Last 1
$file.Name

Автор: did5

12 Сен 2014 в 13:28

Рубрика: PowerShell

Метки: