Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - скрипт отключения пользователей из Exel в AD через PS

Ответить
Настройки темы
PowerShell - скрипт отключения пользователей из Exel в AD через PS

Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Добрый день, коллеги!

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

собственно суть проста, что нужно.

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
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата yuriy.nepomnyashchiy.3@fb:
2. уже смирился, что из самого экселя никто не даёт примера, чтоб отключить список пользователей именно из эксель файла, без перевода в CSV. »
Да ну. На MS за глаза хватало примеров.

Отправлено: 17:29, 02-02-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Iska, ну не знаю как там за глаза, но то что мне нужно я вот не нашёл.

Отправлено: 17:36, 02-02-2015 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить 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
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Iska, спасибо завтра попробую!

Отправлено: 18:34, 02-02-2015 | #5


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Iska, подскажите, в данном примере не вижу пути к файлу, с которого провести отключение?

Отправлено: 16:51, 03-02-2015 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


yuriy.nepomnyashchiy.3@fb, а там нет пути. Процедура вставляется непосредственно в модуль «ЭтаКнига» той Рабочей книги, на первом листе («Лист1») которой содержится список из двух столбцов с заголовками. Я понял вопрос:
Цитата yuriy.nepomnyashchiy.3@fb:
из самого экселя никто не даёт примера, чтоб отключить список пользователей именно из эксель файла »
именно так — чтобы работало непосредственно из VBA, а не из внешнего файла. Впрочем, перевести этот код во внешний скрипт WSH или PoSH тоже вполне возможно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:32, 03-02-2015 | #7


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить 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
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Kazun, это:
Цитата Kazun:
Get-Process EXCEL | Stop-Process -Force »
является обязательным?

Отправлено: 16:09, 04-02-2015 | #9


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Думаю, нет. Но процесс EXCEL , часто остается висеть в процессах, чтобы наверняка

Отправлено: 16:13, 04-02-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - скрипт отключения пользователей из Exel в AD через PS

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход