Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows NT/2000/2003 (http://forum.oszone.net/forumdisplay.php?f=5)
-   -   [решено] Автоматическое удаление пользователей в системе на состоящей в АД (http://forum.oszone.net/showthread.php?t=261308)

Daemonstar 27-05-2013 13:41 2157078

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

Столкнулся с задачей автоматизировать удаление не используемых системных пользователей на серверах Win Srv 2003 не входящих в АД.

Нашел несколько решений (скриптов) для контроллера домена, для удаления доменных пользователей, а вот для локальных ничего не могу найти.

Буду очень признателен всем кто хотя бы подскажет вектор - куда копать.

Спасибо!

Iska 27-05-2013 15:48 2157162

1. Зачем надо именно автоматизировать, почему не ручками? У Вас там что — тасуются ежедневно десятки учётных записей?
2. Укажите отличительные признаки «не используемых» от «используемых».
3. Что означает «системных» в словосочетании «системных пользователей»? Чем они отличаются от прочих?

astomper7 27-05-2013 16:22 2157189

Цитата:

Цитата Iska
Что означает «системных» в словосочетании «системных пользователей»? »

Скорее всего, имелись в виду пользователи удаленного рабочего стола.

Daemonstar 27-05-2013 16:43 2157205

Добрый день! Спасибо за ответ.

1. Прошу прощения за "корявоизложение", дело в том что как бы это парадоксально не звучало , есть этому некий сакраментальный смысл )) но таких машин порядка дюжины, и они согласно этому смыслу в домен не входят.

2. Для характеристики не используемых учетных записей я приведу пример:

Пришел сотрудник на работу , выдали ему логин/пасс , работа человека не устроила , он уволился через неделю, по истечению N дней от последней авторизации я хочу получить список тех которые не логинились за этот период (N дней), либо без списка а сразу лочу их.

3. «системных пользователей»? Чем они отличаются от прочих? - тем что они пользователи ОС, не СУБД не ВЕБ а именно ОС.

В добавок к выше написанному , хочу приложить официальное решение от Microsoft, но оно работает только на контроллере домена :'(

http://support.microsoft.com/kb/197478

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

Iska 27-05-2013 19:00 2157291

Daemonstar, ясно. Вопрос звучит так: «Как удалить учётные записи неактивных в течение определённого времени локальных пользователей?». По-простому — примерно так (удалять не будем, только отключать):
читать дальше »
Код:

Option Explicit

Dim strComputer

Dim objIADsContainer
Dim objIADsUser
Dim dtLastLogon

For Each strComputer In Array("Machine01", "Machine02", "MachineN")
        WScript.Echo "[" & strComputer & "]:"
       
        Set objIADsContainer = GetObject("WinNT://" & strComputer & ",computer")
       
        objIADsContainer.Filter = Array("user")
       
        For Each objIADsUser In objIADsContainer
                On Error Resume Next
                dtLastLogon = CDate(objIADsUser.LastLogin)
               
                If Err.Number = 0 Then
                        On Error Goto 0
                       
                        If DateDiff("d", dtLastLogon, Now()) > 90 Then
                                WScript.Echo "    " & objIADsUser.Name & vbTab & dtLastLogon
                               
                                objIADsUser.AccountDisabled = True
                                objIADsUser.SetInfo
                        End If
                End If
               
                On Error Goto 0
        Next
Next

WScript.Quit 0


Прилагаю также ссылку: Delprof2 - User Profile Deletion Tool • Helge Klein.

Daemonstar 28-05-2013 10:01 2157543

Огромное спасибо, Iska! Вы мне очень помогли!

exo 28-05-2013 10:32 2157567

как вариант:

далее выделить всех, правый клик - Disable, Move
Скрин из 2008 R2, но для 2003 вроде так же было.

Daemonstar 28-05-2013 12:27 2157635

Цитата:

Цитата Iska
Daemonstar, ясно. Вопрос звучит так: «Как удалить учётные записи неактивных в течение определённого времени локальных пользователей?». По-простому — примерно так (удалять не будем, только отключать): »

Вы просто волшебник, но если вас не затруднит, не могли бы дописать user exception_list, то есть как добавить массив пользователей , которых лочить не нужно?

Iska 28-05-2013 14:32 2157752

exo, машины не в домене.

Цитата:

Цитата Daemonstar
добавить массив пользователей , которых лочить не нужно? »

Попробуйте так (не проверялось!):
читать дальше »
Код:

Option Explicit

Dim objDictExcludeUsers

Dim strComputer

Dim objIADsContainer
Dim objIADsUser
Dim dtLastLogon


Set objDictExcludeUsers = WScript.CreateObject("Scripting.Dictionary")

With objDictExcludeUsers
        .Add "Иванов", ""
        .Add "Петров", ""
        .Add "Сидоров", ""
End With

For Each strComputer In Array("Machine01", "Machine02", "MachineN")
        WScript.Echo "[" & strComputer & "]:"
       
        Set objIADsContainer = GetObject("WinNT://" & strComputer & ",computer")
       
        objIADsContainer.Filter = Array("user")
       
        For Each objIADsUser In objIADsContainer
                On Error Resume Next
                dtLastLogon = CDate(objIADsUser.LastLogin)
               
                If Err.Number = 0 Then
                        On Error Goto 0
                       
                        If DateDiff("d", dtLastLogon, Now()) > 90 Then
                                If Not objDictExcludeUsers.Exists(objIADsUser.Name) Then
                                        WScript.Echo "    " & objIADsUser.Name & vbTab & dtLastLogon
                                       
                                        objIADsUser.AccountDisabled = True
                                        objIADsUser.SetInfo
                                End If
                        End If
                End If
               
                On Error Goto 0
        Next
Next

Set objDictExcludeUsers = Nothing

WScript.Quit 0


Daemonstar 28-05-2013 14:53 2157771

Цитата:

Цитата Iska
Попробуйте так (не проверялось!): »

Вы просто гений vbs! :)
Огромное спасибо, работает как часы :)

Daemonstar 28-05-2013 16:05 2157824

Добавлено логирование и мейл нотификация.

читать дальше »
Set wshShell = WScript.CreateObject( "WScript.Shell" )
Dim strComputer
Dim objIADsContainer
Dim objIADsUser
Dim dtLastLogon
Dim objDictExcludeUsers
dateStamp = Now()

Set objDictExcludeUsers = WScript.CreateObject("Scripting.Dictionary")

With objDictExcludeUsers
.Add "excludе_login1", ""
.Add "exclude_login2", ""
.Add "exclude_login3", ""
.Add "login4", ""
End With

Set ObjFSO = CreateObject("Scripting.FileSystemObject")
Set objLog = objFSO.CreateTextFile("C:\blocked_users_log.txt")
objLog.WriteLine (cstr(dateStamp))

StrComputer = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
Set objIADsContainer = GetObject("WinNT://" & strComputer & ",computer")
objIADsContainer.Filter = Array("user")
For Each objIADsUser In objIADsContainer
On Error Resume Next
dtLastLogon = CDate(objIADsUser.LastLogin)
If Err.Number = 0 Then
On Error Goto 0
If DateDiff("d", dtLastLogon, Now()) > 90 And (objIADsUser.AccountDisabled = False) Then
If Not objDictExcludeUsers.Exists(objIADsUser.Name) Then
objLog.WriteLine "Blocked account: " & objIADsUser.Name & " Last login: " & dtLastLogon & vbNewLine
objIADsUser.AccountDisabled = True
objIADsUser.SetInfo
End If
End If
End If
Next
objLog.Close
On Error Goto 0
Set S = CreateObject("Wscript.Shell")
set FSO=createobject("scripting.filesystemobject")
Call SendPost("smtp.server.com","to_email1@example.com, to_email2@example.com","from_email@example.com","Accounts blocked on "&StrComputer,"")
Function SendPost(strSMTP_Server,strTo,strFrom,strSubject,strBody)
Set iMsg=CreateObject("CDO.Message")
Set iConf=CreateObject("CDO.Configuration")
Set Flds=iConf.Fields
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")=2
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")=0
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername")="blabla"
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword")="xXx"
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.example.com"
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=25
Flds.Update
iMsg.Configuration=iConf
iMsg.To=strTo
iMsg.From=strFrom
iMsg.Subject=strSubject
iMsg.TextBody=strBody
'iMsg.AddAttachment "C:\blocked_users_log.txt"
Const FileToBeUsed = "C:\blocked_users_log.txt"
Set objLog = objFSO.OpenTextFile(FileToBeUsed)
'** The ReadAll method reads the entire file into the variable BodyText
iMsg.Textbody = objLog.ReadAll
'** Close the file
objLog.Close
'** Clear variables
Set objLog = Nothing
iMsg.Send
End Function
Set iMsg=Nothing
Set iConf=Nothing
Set Flds=Nothing
WScript.Quit 0

Iska 29-05-2013 05:39 2158198

Daemonstar, добавьте ещё оформление кода тэгом [code].

DmitriiV 29-05-2013 07:36 2158223

Для работы со списком исключений (в данном случае) можно обойтись только строковыми функциями. Я обычно делаю так:
Код:

strExclude = "Иванова;Петров;Сидоров;"
strUser = "Иванов"
If InStr(1, strExclude, strUser & ";", vbTextCompare) = 0 Then
    WScript.Echo "Не является исключением."
Else
    WScript.Echo "Является исключением."
End If



Время: 02:33.

Время: 02:33.
© OSzone.net 2001-