|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - скрипт отключения пользователей из Exel в AD через PS |
|
|
PowerShell - скрипт отключения пользователей из Exel в AD через PS
|
|
Новый участник Сообщения: 12 |
Добрый день, коллеги!
облазил весь интернет, и везде приводятся разные примеры отключения пользователей списком и все то не работают, то со своими параметрами не очень понятными мне. собственно суть проста, что нужно. 1. есть список пользователей в эксель, где есть первая колонка табельный номер, он же EmployeeID и вторая колонка ФИО оно же DisplayName 2. уже смирился, что из самого экселя никто не даёт примера, чтоб отключить список пользователей именно из эксель файла, без перевода в CSV. перевожу в CSV. удалось собрать скрипт, работает без ошибок, определяет и таб.номер и ФИО, но не отключает...есть подозрения что, чего-то не хватает.. вот собственно скрипт ниже.. Скрытый текст
cls
Import-Module ActiveDirectory $Users = Import-Csv "D:\scripts\ps\users.csv" -Delimiter ";" #$Global:count = 0 function disableUser ($EmployeeID, $DisplayName) { Write-Host ('EmployeeID: ' + $EmployeeID) Write-Host ('DisplayName: ' + $DisplayName) $login = (Get-ADuser -Filter {DisplayName -eq $EmployeeID -and Title -eq $DisplayName}).SamAccountName #$Global:count = $Global:count + 1 } function main { foreach($User in $Users) { disableUser $User.EmployeeID $User.DisplayName } } main #Write-Host ('count: ' + $Global:count) Буду благодарен за помощь. |
|
|
Отправлено: 17:27, 02-02-2015 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата yuriy.nepomnyashchiy.3@fb:
|
|
|
Отправлено: 17:29, 02-02-2015 | #2 |
|
Новый участник Сообщения: 12
|
Профиль | Сайт | Отправить PM | Цитировать Iska, ну не знаю как там за глаза, но то что мне нужно я вот не нашёл.
|
|
Отправлено: 17:36, 02-02-2015 | #3 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать yuriy.nepomnyashchiy.3@fb, вот прямо готового именно для Вашего конкретного случая с «EmployeeID» и «DisplayName» может и не быть, разумеется.
А так есть и в Script Center, и в отдельных chm-сборниках. Берём и лепим из кирпичиков нечто наподобие такого: Скрытый текст
![]() Option Explicit
Sub Sample()
Const ADS_UF_ACCOUNTDISABLE = 2
Dim objRange As Range
Dim objConnection As Object
Dim objRecordSet As Object
For Each objRange In ThisWorkbook.Worksheets.Item("Лист1").UsedRange.Rows
If Not objRange.Row = 1 Then
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
With CreateObject("ADODB.Command")
.ActiveConnection = objConnection
.Properties("Sort on") = "cn"
.CommandText = _
"<LDAP://dc=mydomain,dc=local>;" & _
"(&(objectClass=user)(objectCategory=person)(employeeID=" & objRange.Cells(1, 1).Value & ")(displayName=" & objRange.Cells(1, 2).Value & "));" & _
"userAccountControl,distinguishedName;" & _
"subtree"
Set objRecordSet = .Execute
End With
With objRecordSet
Do Until .EOF
Debug.Print .Fields("distinguishedName")
With GetObject("LDAP://" & .Fields("distinguishedName"))
.Put "userAccountControl", .Get("userAccountControl") Or ADS_UF_ACCOUNTDISABLE
.SetInfo
End With
.MoveNext
Loop
.Close
End With
objConnection.Close
Set objConnection = Nothing
End If
Next
End Sub
|
|
Отправлено: 18:26, 02-02-2015 | #4 |
|
Новый участник Сообщения: 12
|
Профиль | Сайт | Отправить PM | Цитировать Iska, спасибо завтра попробую!
|
|
|
Отправлено: 18:34, 02-02-2015 | #5 |
|
Новый участник Сообщения: 12
|
Профиль | Сайт | Отправить PM | Цитировать Iska, подскажите, в данном примере не вижу пути к файлу, с которого провести отключение?
|
|
Отправлено: 16:51, 03-02-2015 | #6 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать yuriy.nepomnyashchiy.3@fb, а там нет пути. Процедура вставляется непосредственно в модуль «ЭтаКнига» той Рабочей книги, на первом листе («Лист1») которой содержится список из двух столбцов с заголовками. Я понял вопрос:
Цитата yuriy.nepomnyashchiy.3@fb:
|
|
|
Отправлено: 18:32, 03-02-2015 | #7 |
|
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать $file = "С:\users.xlsx"
$ex = New-Object -ComObject Excel.Application
$wb = $ex.Workbooks.Open($file)
$wb.Worksheets.Item("Лист1").UsedRange.Rows | Foreach {
$DisplayName = $_.value2[1,1]
$EmployeeID = $_.value2[1,2]
Write-Host ('EmployeeID: ' + $EmployeeID) -ForegroundColor Yellow
Write-Host ('DisplayName: ' + $DisplayName) -ForegroundColor Yellow
Get-ADuser -Filter "EmployeeID -eq '$EmployeeID' -and DisplayName -eq '$DisplayName'" | Disable-ADAccount -Confirm:$false -PassThru
}
$wb.Close()
$ex.Quit()
Get-Process EXCEL | Stop-Process -Force
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ex)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($wb)
Remove-Variable ex
Remove-Variable wb
|
|
Отправлено: 15:11, 04-02-2015 | #8 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Kazun, это:
Цитата Kazun:
|
|
|
Отправлено: 16:09, 04-02-2015 | #9 |
|
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Думаю, нет. Но процесс EXCEL , часто остается висеть в процессах, чтобы наверняка
![]() |
|
Отправлено: 16:13, 04-02-2015 | #10 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| PowerShell - Скрипт для добавления пользователей в AD | Nord18 | Скриптовые языки администрирования Windows | 4 | 10-03-2016 15:52 | |
| PowerShell - Изменение атрибутов всех пользователей AD из exel | admt | Скриптовые языки администрирования Windows | 3 | 07-03-2014 18:07 | |
| VBS/WSH/JS - HELP!. Не работает скрипт заведения пользователей в AD | userovich2 | Скриптовые языки администрирования Windows | 3 | 24-10-2010 23:17 | |
| Любой язык - [решено] Нужен скрипт cmd,vbs,PowerShell для проверки списка пользователей и их удаление из AD | alex_frog | Скриптовые языки администрирования Windows | 6 | 22-07-2009 18:41 | |
| Скрипт для проверки списка пользователей и их удаление из AD | alex_frog | Microsoft Windows NT/2000/2003 | 0 | 22-07-2009 13:16 | |
|