Ru-Board.club
← Вернуться в раздел «В помощь системному администратору»

» Автоматизация администрирования. Часть 2

Автор: gap5
Дата сообщения: 27.08.2008 18:22
1.Надо эмулировать однократное нажатие F10 для определенного приложения.
Т.е. комп стартует, юзер автоматом логинится, вместо explorer.exe загружается нужная софтина, грузится она около 10 секунд, далее ей надо скормить нажатие F10. Как это лучше сделать?

2.Как проще всего мониторить наличие в запущенных приложениях определенного ехе'шника, а при его отсутствии запускать его снова?
Автор: DarkStar2000
Дата сообщения: 27.08.2008 18:37
YNY

Цитата:
на сколько я знаю если не менять политику паролей в домене, то длинна пароля должна быть не менее 8 знаков

Ну да, так и есть
я только не совсем понял к чему это замечание относится ?
Автор: abasov
Дата сообщения: 28.08.2008 13:08
gap5

Цитата:
2.Как проще всего мониторить наличие в запущенных приложениях определенного ехе'шника, а при его отсутствии запускать его снова?


первым делом прочесть это: http://www.script-coding.info/WMI_ProcMon.html

если слегка переделать, то можно использовать:

Код: Dim objWMI, objCollection, objInstance
Dim strComputer, strTemp, intErr, intProcID
Const strProcess = "PnAgent.exe"
strComputer = "DNS-имя или IP-адрес нужной станции"
intErr = 0
If Connection(strComputer) Then
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objCollection = objWMI.ExecQuery("SELECT Name FROM Win32_Process WHERE Name='" & strProcess & "'")
If objCollection.Count = 0 Then
Set objInstance = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\cimv2:Win32_Process")
intErr = objInstance.Create(strProcess, Null, Null, intProcID)
If intErr = 0 Then
WScript.Echo "Процесс на станции " & UCase(strComputer) & " запущен. Его ID: " & intProcID
Else
WScript.Echo "Ошибка запуска процесса на станции " & UCase(strComputer) & ". Код ошибки: " & intErr
WScript.Quit
End If
Else
WScript.Echo "Процесс на станции " & UCase(strComputer) & " уже запущен."
End If
On Error Resume Next
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objCollection = objWMI.ExecNotificationQuery("SELECT * FROM __InstanceDeletionEvent " & _
"WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'")
If Err.Number = 0 Then
Do
Set objItem = objCollection.NextEvent
If Err.Number = 0 Then
strTemp = objItem.TargetInstance.Name
If StrComp(strTemp, strProcess, vbTextCompare) = 0 Then
Set objInstance = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\cimv2:Win32_Process")
intErr = objInstance.Create(strProcess, Null, Null, intProcID)
'If intErr = 0 Then
' WScript.Echo "Процесс на станции " & UCase(strComputer) & " перезапущен. Его ID: " & _
' intProcID
'Else
' WScript.Echo "Ошибка запуска процесса на станции " & UCase(strComputer) & _
' ". Код ошибки: " & intErr
'End If
End If
Else
WScript.Echo "Ошибка работы сценария для станциии " & UCase(strComputer) & vbNewLine & _
"Код ошибки: " & Err.Number & vbNewLine & Err.Description
WScript.Quit
End If
Loop
Else
WScript.Echo "Ошибка работы сценария для станциии " & UCase(strComputer) & vbNewLine & _
"Код ошибки: " & Err.Number & vbNewLine & Err.Description
WScript.Quit
End If
Else
WScript.Echo "Станциия " & UCase(strComputer) & " не отвечает."
End If

Function Connection(strWS)
Dim objCollection, objItem
On Error Resume Next
Set objCollection = GetObject("winmgmts:{impersonationLevel=impersonate}"). _
ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address='" & strWS & "'")
For Each objItem In objCollection
If IsNull(objItem.StatusCode) Or objItem.StatusCode <> 0 Then
Connection = False
Else
Connection = True
End If
Next
End Function
Автор: yazzi
Дата сообщения: 29.08.2008 07:30
Подскажите пожалуйста существует ли возможность удаленно получить список программного обеспечения, а так же удаленного удаления его же. только не через Win32_Product так как он видит не все установленное обеспечение. Список впринципе можно через реестр получить но как потом удалить удаленно вот вопрос .
Автор: Garik_Lugansk
Дата сообщения: 31.08.2008 16:02
Подскажите пожалуйста, есть компьютерный клуб, 22 компьютера, и нужно разбрасывать новые игры. Через тотал командер нет докачки при обрыве, да и несовсем удобно, может есть уже давно специальная программа для разбрасывания файлов по сети?
Автор: YNY
Дата сообщения: 01.09.2008 09:06

Цитата:
есть компьютерный клуб,


Цитата:
Через тотал командер нет докачки при обрыве,

Цитата:
есть компьютерный клуб,

КАЧАЙ НА СЕРВАК а затем разливай по сети
Автор: booro
Дата сообщения: 01.09.2008 13:20
Подскажите пожалуйста, как можно организовать удаление файлов определенного расширения (.avi) из папки каждые 4 дня (или при недостатке свободного места на диске). Стоит сервер видеонаблюдения, его софт не имеет такой возможности. Доступ к нему имею не постоянно, руками удалять конечно можно, но это как-то не эстетично)) Или киньте ссылку с подобными примерами. Заранее спасибо.
Автор: abasov
Дата сообщения: 01.09.2008 13:42

Цитата:
Подскажите пожалуйста, как можно организовать удаление файлов определенного расширения (.avi)

booro


Код: Option Explicit
'err.raise 1, "Achtung!", "для запуска закоментировать строку генерации ошибки"
'1) Задать папки для поиска в массив aFolders, например "C:\","E:\"
'2) задать расширения файлов в массив aExtensions, например "mp3","avi","wma"
'3) задать путь и файл для логирования LogFileName1 , например "d:\temp\i.txt"
'см. дальше по тексту...


'Сценарий сканирует указанные каталоги и удаляет в нем файлы с указанными расширениями


Dim LogFileName1
'dim NameFileOfMessage    
dim TextOfMessage

Dim aFolders    'массив каталогов
Dim aExtensions    'массив расширений файлов

dim file1
dim FileOfMessage

'1) Задать папки для поиска в массив aFolders, например aFolders = Array("C:\","E:\")
aFolders = Array("D:\")

'2) задать расширения файлов в массив aExtensions, например aExtensions = Array( "mp3","avi","wma")
aExtensions = Array( "id","nsf")

Dim fso


'3) задать путь и файл для логирования LogFileName1 , например LogFileName1 = CStr("d:\temp\i.txt")
LogFileName1 = CStr("c:\Log_Delete_Incoming.txt")

'
'4) пункт убран
'

'5)текст сообщения, которое будет в файле в папке где был удалён файл
TextOfMessage = CStr("Администрация предупреждает: ")


Set fso = CreateObject("Scripting.FileSystemObject")
Set file1 = fso.OpenTextFile(LogFileName1,8,true)

Dim i
file1.WriteLine "----------- начало поиска --------------" & cstr(Date()) & "|" & cstr(Time())
For i = 0 To UBound(aFolders)
If fso.FolderExists(aFolders(i)) Then
on error resume next
Err.Clear

Dim folder
Set folder = fso.GetFolder(aFolders(i))
Dim file
For Each file In folder.Files
if Err then
file1.WriteLine "---> " & cstr(Date()) & "|" & cstr(Time()) &"!!! ->!Ошибка при доступе к папке!<- " &folder
exit for
End If
If IsKnowExtensions(file) Then

Set FileOfMessage = fso.OpenTextFile(folder+"\"+file.name+".txt",8,true)
FileOfMessage.WriteLine (TextOfMessage)
FileOfMessage.WriteLine ("файл '"& file.name & "' изъят до выяснения обстоятельств...")
FileOfMessage.close
file.Delete True
end if


Next
dim subFolder
For Each subFolder In folder.SubFolders
if Err then
exit for
end if
ScanSubFolder subFolder
Next


end if
Next
file1.WriteLine "----------- конец поиска --------------" & cstr(Date()) & "|" & cstr(Time())
file1.close


Function IsKnowExtensions(file)
    Dim strExtensions
    strExtensions = fso.GetExtensionName(file.Path)
    Dim i
    For i = 0 To UBound(aExtensions) '- 1
        If ucase(strExtensions) = ucase(aExtensions(i)) Then
            'msgbox "!"
            file1.WriteLine (cstr(Date()) & "|" & cstr(Time()) &" был Удалён : " & file.Path )

            IsKnowExtensions = True
            Exit Function
        End If
    Next
    IsKnowExtensions = False
End Function


Sub ScanSubFolder(folder)

Dim file
on error resume next
Err.Clear
For Each file In folder.Files
if Err then
file1.WriteLine "---> " & cstr(Date()) & "|" & cstr(Time()) &"!!! ->!Ошибка при доступе к папке!<- " &folder
Err.Clear
exit sub
end if    
If IsKnowExtensions(file) Then

Set FileOfMessage = fso.OpenTextFile(folder+"\"+file.name+".txt",8,true)
FileOfMessage.WriteLine (TextOfMessage)
FileOfMessage.WriteLine ("файл '"& file.name & "' изъят до выяснения обстоятельств...")
FileOfMessage.close
file.Delete true
end if
Next
Dim subFolder
For Each subFolder In folder.SubFolders
ScanSubFolder subFolder
Next
End Sub
Автор: booro
Дата сообщения: 01.09.2008 16:45
abasov
Спасибо большое, но может это можно сделать как-то попроще? Например, через планировщик заданий?
Автор: RMR
Дата сообщения: 01.09.2008 18:22
booro
Создай батник

Код: @echo off
del "путь к папке\*.avi"
Автор: booro
Дата сообщения: 01.09.2008 22:04
RMR
В той папке еще несколько папок, по номерам камер. Чего-то мне не догадаться, что надо еще добавить =)
Автор: NIKZZZZ
Дата сообщения: 01.09.2008 23:41
Есть такая задача - нужно выполнять некую программу (например, bat файл) до запуска оболочки (Explorer), при этом дождаться ее окончания. Запуск ее в виде сервиса с помощью srvany.exe не позволяет дождаться окончания ее работы, RunOnceEx запускается после загрузки оболочки.
Автор: abasov
Дата сообщения: 02.09.2008 06:38
booro
через планировщик как раз и работает

Добавлено:
NIKZZZZ
http://www.microsoft.com/technet/scriptcenter/guide/sas_ser_unza.mspx

Код: Const OWN_PROCESS = 16
Const NOT_INTERACTIVE = False
Const NORMAL_ERROR_CONTROL = 2

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objService = objWMIService.Get("Win32_BaseService")

errReturn = objService.Create("DbService" ,"Personnel Database" , _
"c:\windows\system32\db.exe", OWN_PROCESS, NORMAL_ERROR_CONTROL,_
"Manual", NOT_INTERACTIVE, "NT AUTHORITY\LocalService", "" )
Автор: yazzi
Дата сообщения: 02.09.2008 15:50
Подскажите что неправильно. Стоит задача удалить у всех пользователей ясю в невидимом режиме. Ася в удаляется с помощью следующей команды C:\WINDOWS\UNWISE.EXE /s C:\PROGRA~1\ICQ\ICQ99B.LOG "ICQ Uninstall". Написал следущий код

Код:
On Error Resume Next
Dim objSWbemLocator
Dim CompName
Dim UserName
Dim Pass
Dim objServices
Dim objClass
Dim Res
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
CompName = "test-02" 'имя компьютера
UserName = "user01" 'имя пользователя
Pass = "" 'пароль пользователя

'Set objServices = objSWbemLocator.ConnectServer(".", "Root\CIMV2")

Set objServices = objSWbemLocator.ConnectServer(CompName, "root\CIMV2", UserName, Pass, Null, Null, 0)
If Err.Number <> 0 Then
WScript.Echo Err.Number & ": " & Err.Description
WScript.Quit
End If
Set objClass = objServices.Get("Win32_Process")
Res = objClass.Create("C:\WINDOWS\UNWISE.EXE /s C:\PROGRA~1\ICQ\ICQ99B.LOG 'ICQ Uninstall' ", Null, Null, PID)
If Res <> 0 Then
WScript.Echo "Код ошибки: " & Res
End If
Автор: YNY
Дата сообщения: 04.09.2008 04:49

Цитата:
yazzi

а права то какие у юзверей?

Добавлено:

Цитата:
objClass.Create
на скоко помню: [more] The Create WMI class method creates a new process. A fully-qualified path needs to be specified in cases where the program to be launched is not in the search path of Winmgmt.exe. If the newly created process attempts to interact with objects on the target system without appropriate access privileges, it is terminated without notification to this method.
Return Values
Returns a value of 0 (zero) if the process was successfully created, and any other number to indicate an error. Some of the possible return values are listed in the following table.

Return code Description
0 Successful completion
2 Access denied
3 Insufficient privilege
8 Unknown failure
9 Path not found
21 Invalid parameter

[/more], попробуйслед-е варианты:
1)
Set WshExec = WshShell.Exec()
или
object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
2)
Вместо "... 'ICQ Uninstall' ... "
попробуй
"C:\WINDOWS\UNWISE.EXE /s C:\PROGRA~1\ICQ\ICQ99B.LOG" & " ICQ Uninstall" & """"

Добавлено:
добавлено:

Цитата:
Set objServices = objSWbemLocator.ConnectServer(CompName, "root\CIMV2", UserName, Pass, Null, Null, 0)

нигде не нашел чтоб Win32_ProcessStartup принимал бы NULL

...run an application in a hidden window? Call the application from a script that uses the Win32_Process and Win32_ProcessStartup classes.Const HIDDEN_WINDOW = 12

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = HIDDEN_WINDOW
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")

errReturn = objProcess.Create("Notepad.exe", null, objConfig, intProcessID)

Автор: ShafMAN
Дата сообщения: 04.09.2008 09:01
Архиватором 7z разархивируются файлы.

Код: wsh.Exec("C:\\1\\7z.exe e C:\\1\\*.7z");
Автор: yazzi
Дата сообщения: 04.09.2008 14:50
YNY Спасибо
Cделал следующим образом сначала сформировал строку ну а потом уже создал процесс

Код:
str="C:\WINDOWS\UNWISE.EXE /s C:\PROGRA~1\ICQ\ICQ99B.LOG "&chr(34)&"ICQ Uninstall"&chr(34)
Res = objClass.Create(str, Null, Null, PID)
Автор: YNY
Дата сообщения: 05.09.2008 06:16

Цитата:
yazzi

Ввообще-то если есть пробел, то либо весь путь, либо только эта часть берется в кавычки, если, по твоим словам, не работает с русским языком, то как тада оно по твоему устанавливалась в эту папку?
короткие имена мона в cmd dir посмотреть либо в Far

Добавлено:
если берешь часть в кавычки, то при тесте msgbox должен выдавать типа:
задаем
msgbox """я тут был установлен"""
получаем
"я тут был установлен"

Добавлено:
а вообще, то короткие имена мона получить (dir /x):
startTocopyFrom ' -- откуда в phatName хотим получить копию для формирования 'котроткого пути
phatName="..."
length=6
SPN=mid(phatName, startTocopyFrom,length) & "~1"

Добавлено:
Очень не плохим помошником в написании скриптов, если ничего больше нет, является обычный Word, т.к., там есть и справка по VB и среда MSVisual Studio со справкой по JS и VB !

Добавлено:
и VBA редактор )
Автор: yazzi
Дата сообщения: 05.09.2008 13:55
YNY
Цитата:
а вообще, то короткие имена мона получить (dir /x)

Dir нормально получает но надо что бы в сценарии так получал


Цитата:
startTocopyFrom ' -- откуда в phatName хотим получить копию для формирования 'котроткого пути
phatName="..."
length=6
SPN=mid(phatName, startTocopyFrom,length) & "~1"
Это только для английских имен подойдет, а мне надо что бы функция все имена переделывала в короткие Например Русское имя "Программа" будет выглядеть следующим образом "4AB4~1"
Автор: Anton_Y
Дата сообщения: 08.09.2008 07:21
уважаемые, подскажите можно ли с помощью WSH или както иначе открыть доступ к папке с опр. правами опр. пользователям?

Поясню, папка FOLDER, открыть доступ пользователям из DOMAIN\Users на модификацию, а DOMAIN\Admin полный доступ

p.s. net share открывает лишь полный доступ всем, cacls меняет лишь настройки безопасности файлов, но не настройки сетевого доступа.
Автор: Feeer
Дата сообщения: 08.09.2008 08:42
Как нажать какую либо кнопку в запущенном приложении ( например нажатие кнопки далее при установке приложения) на jscript? Если можно то маленький примерчик. Заранее спасибо !
Автор: Feeer
Дата сообщения: 09.09.2008 14:34
Помогите пожалуйста переписать с vbs на jscript

strComputer = "Computer"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colComputer = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")

For Each objComputer in colComputer
Wscript.Echo objComputer.UserName
Next
Автор: ShafMAN
Дата сообщения: 10.09.2008 10:20
Feeer
strComputer = "Computer";
var objWMIService = GetObject("winmgmts:" + "{impersonationLevel=impersonate}!\\\\" +strComputer + "\\root\\cimv2");
var colComputer = objWMIService.ExecQuery("Select * from Win32_ComputerSystem");

var enumItems = new Enumerator(colComputer);
for (; !enumItems.atEnd(); enumItems.moveNext()) {
var objItem = enumItems.item();
WScript.Echo(objItem.UserName);
}
Автор: rosalin
Дата сообщения: 10.09.2008 13:22
подскажите скриптик удаления майлагента на удаленном компе
Автор: MegaLend
Дата сообщения: 10.09.2008 22:03
Всем доброго времени суток, Уважаемый All прошу Вашей помощи в создании и построении системы. У самого не хватает нужных знаний, хотя стараюсь разобраться и учиться.
Задача: необходимо организовать подключение принтеров в локальной сети для пользователей, при чем есть еще один терминальный сервер который сейчас вводится в работу.
Сейчас на просторах рунета нашел вот такой вот код:

Код:
Option Explicit
Dim WSHNetwork, Computer, Path, strComputerDN, objSysInfo, objComputer, sPrintPath, PrintLocation
Dim objWMIService, colInstalledPrinters, objPrinter
Set WSHNetwork = CreateObject("WScript.Network")
On Error Resume Next
Path = WSHNetwork.ComputerName
Set objSysInfo = CreateObject("ADSystemInfo")
strComputerDN = objSysInfo.ComputerName
Set objComputer = GetObject("LDAP://" & strComputerDN)
'Назначаем необходимый для установки сетевой принтер
'в зависимости от значения поля Location
Select Case objComputer.Get("Location")
Case "Отдел 1"
sPrintPath = "\\server1\HPLaserJ"
PrintLocation = "Принтер в Отделе 1"
Case "Отдел 2"
sPrintPath = "\\server2\HP1100"
PrintLocation = "Принтер HP1100 Отдел 2"
Case Else
MsgBox("Для установки принтера обратитесь к системному администратору.") :WScript.Quit
End Select
'Выполняем проверку установленных принтеров
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")

For Each objPrinter in colInstalledPrinters
If PrintLocation = objPrinter.Location Then
WScript.Quit
End If
Next
Автор: mistx
Дата сообщения: 12.09.2008 16:49
Друзья подскажите плиз команду командной строки,
которая позволила переименовать все файлы на сервере xxxx.doc на xxx.rtf
интересует не просто переименование, а полное конвертирование в структуру rtf

может есть какой-нибудь скрипт?

Заранее благодарю
Автор: yazzi
Дата сообщения: 16.09.2008 15:30
Подскажите пожалуйста как скопировать сетевую папку (расшаренную) на свою машину без разницы причем на чем на vbs или cmd? Пробовал через FSO но она не берет сетевой путь .
Автор: niichavo
Дата сообщения: 16.09.2008 15:56
yazzi
xcopy /?

Например, так:

Код:
@echo off
xcopy /d /e /h /i /r /y "\\server\Fonts" "C:\Windows\Fonts"
Автор: yazzi
Дата сообщения: 17.09.2008 07:51
niichavo Спасибо

Автор: rosalin
Дата сообщения: 19.09.2008 12:17
Всем привет
Уважаемые All помогите отладить скрипт
Добавление нового пользователя в АД согласно корпоративным правилам именования и параметров учётной записи.


Код: const UF_DONT_EXPIRE_PASSWD = 65536
const MYEMAILDOMAIN = "домен"
const MYADDOMAIN = "домен АД"
const MYHOMEPAGE = "www.***.ru"
const MYCOUNTRY = "RU"
const MYCOMPANY = "ООО Компания моя"

' исходные данные пользователя
' не должно быть пустых строк ни в каком присваиваемом поле, иначе объект пользователя не создастся в АД
'==========================================================================================
myFirstName = "Имя"
myLastName = "Фамилия"
myDescription = "Описание"
myCompanyCity = "город Компании моей"
myTelephoneNumber = "телефончик"

myAddress = "адрес обычной почты"
myCity = "и город"

myTelephoneHome = "ещё один телефон"
myTelephoneMobile = "мобильный"
myFaxNumber = "факс"

myTitle = "а здесь мы почему-то пишем должность"
myDepartment = "отдел"
myZone = "зона, ну это начальник приказал в описание добавлять, не имеет значения"

myPassword = "пароль по правилам политики паролей"
'==========================================================================================

' данные пользователя предварительно обработанные
'------------------------------------------------
' удаляем пробельные символы в начале и в конце
myFirstName = Trim (myFirstName)
myLastName = Trim (myLastName)
myDescription = Trim (myDescription)
myTitle = Trim (myTitle)
myDepartment = Trim (myDepartment)

' первые буквы - заглавными
myFirstName = UFirstLetter (myFirstName)
myLastName = UFirstLetter (myLastName)
myDescription = UFirstLetter (myDescription)
myTitle = UFirstLetter (myTitle)
myDepartment = UFirstLetter (myDepartment)

'------------------------------------------------


' данные интерфейса пользователя
'-------------------------------
'вычисляем логин - это правило тоже от начальства
myLogonName = LCase (Left (myFirstName,1) + LCase (myLastName))

'как надо показывать имя - ну а это им на смех
myDisplayName = myLastName + "," + myFirstName + "," + UCase (myCompanyCity + "," + myZone)

+ "," + myTitle


' создание подключения и пользователя
'************************************
'создаём подключение
set objParent = GetObject("LDAP://"+MYADDOMAIN)

'создаём объект "пользователь"
set objUser = objParent.Create("user", "cn=" + myLogonName)
'************************************


' присваиваем поля объекту пользователя
'======================================
With objUser

'________GENERAL

.FirstName = myFirstName
.LastName = myLastName

if Len (myDescription) > 0 then .Description = myDescription
.DisplayName = myDisplayName

if Len (myTelephoneNumber) > 0 then .TelephoneNumber = myTelephoneNumber
.EmailAddress = myLogonName + MYEMAILDOMAIN
.HomePage = MYHOMEPAGE

'________ADDRESS

Call myPutAddress (objUser)

'________ACCOUNT

Call mySetUserAccountControl (objUser)

'________TELEPHONES

if Len (myTelephoneHome) > 0 then .TelephoneHome = myTelephoneHome
if Len (myTelephoneMobile) > 0 then .TelephoneMobile = myTelephoneMobile
if Len (myFaxNumber) > 0 then .FaxNumber = myFaxNumber

'________ORGANIZATION

if Len (myTitle) > 0 then .Title = myTitle
if Len (myDepartment) > 0 then .Department = myDepartment

' явно указать Company
.Company = MYCOMPANY

End With
'======================================

' попытаться ввести объект пользователя в АД
objUser.SetInfo

' проверить правильность пароля и установить его
myPassword = CheckedPassword (myPassword)
objUser.SetPassword(myPassword)

objUser.SetInfo

' создать текстовый файл с параметрами созданного пользователя
CreateParamsFile (myLogonName + ".txt")








' Создать файл с параметрами пользователя
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Sub CreateParamsFile(FileName)
Dim fso, tf

Set fso = CreateObject("Scripting.FileSystemObject")
Set tf = fso.CreateTextFile(FileName, True)

tf.WriteLine("Пользователь: " + myLogonName + " (" + myDisplayName + ")")
tf.WriteLine("Почта: " + myLogonName + MYEMAILDOMAIN)
tf.WriteLine("Пароль: " + myPassword)

tf.Close

End Sub


' Первая буква заглавная
'\\\\\\\\\\\\\\\\\\\\\\\\\\\
function UFirstLetter (Word)

' если слово не пустое - сделать первую букву заглавной
if Len(Word) <> 0 then
UFirstLetter = UCase(Left (Word,1)) + Right(Word, Len(Word)-1)
Else
UFirstLetter = ""
end if

end function

' приведение пароля в допустимый вид
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
function CheckedPassword (myPassword)

' если пароль задан, то возвратить заданный пароль
if Len (myPassword) > 0 then
CheckedPassword = myPassword
else
' пока пароль не задан, требовать ввода пароля
while len (myPassword) = 0
myPassword = InputBox ("введите непустой пароль:")
wend

CheckedPassword = myPassword
end if

end function


' установить параметры учётной записи пользователя
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Sub mySetUserAccountControl (ByRef objUser)

With objUser

'логин
.userPrincipalName = myLogonName + MYEMAILDOMAIN
'здесь источник потенциальных отказов - необходимо проверять корректность имени для

pre-Windows2000
.sAMAccountName = myLogonName


' установить пункт password never expire - по битовой маске, кто хочет - ищи в интернете
.UserAccountControl = (.UserAccountControl OR UF_DONT_EXPIRE_PASSWD)
' включить учётную запись пользователя в АД
.AccountDisabled = FALSE

End with

end Sub


' установить почтовый адрес
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Sub myPutAddress (ByRef objUser)

if Len (myAddress) > 0 then objUser.Put "streetAddress", myAddress
if Len (myCity) > 0 then objUser.Put "l", myCity

' явно указать страну MYCOUNTRY
objUser.Put "c", MYCOUNTRY

objUser.SetInfo

end Sub

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

Предыдущая тема: BackUp Win2003Serer


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.