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

» Автоматизация администрирования

Автор: jONES1979
Дата сообщения: 14.11.2006 15:32
north_crow

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

вот те аналог твоего скрипта, тока со чтенияем из файла.
там же всякие штуки в комментах, типа создания ОУ, групп под юзеров, взятия имени файла из параметра командной строки и прочая.

[more]

Код:
Option Explicit
' based on http://www.microsoft.com/technet/scriptcenter/guide/sas_ads_scsw.mspx

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000

Dim objRootDSE, objDomain, objContainer, objOU, objGroup, objLeaf
Dim i, j, xC, objArgs, objFSO, objFile, sParamFN
Dim strName, Flag, newFlag
Dim AP, sNames

Sub CreateCourseOU(iCourse)
' Создать новый OU
' Set objDomain = GetObject("LDAP://ou=Students,ou=EDU_users,dc=edu,dc=ntiustu,dc=local")
Set objDomain = GetObject("LDAP://ou=Students,dc=edu,dc=ntiustu,dc=local")
Set objOU = objDomain.Create("organizationalUnit", "ou=Course"+CStr(iCourse))
objOU.SetInfo
End Sub

' Создать новую группу "students2005" в OU="EDU_users"
' Sub CreateGroup
' Set objOU = GetObject("LDAP://ou=EDU_users,dc=edu,dc=ntiustu,dc=local")
' Set objGroup = objOU.Create("group", "cn=students2005")
' objGroup.Put "sAMAccountName", "students2005"
' objGroup.SetInfo
'End Sub




' процедура создания юзера
Sub CreatAD_User(sParam)

' WScript.Echo sParam

AP = Split(sParam, ",", -1, 1)
xC = UBound(AP)
For j=0 To xC
' WScript.Echo AP(j)
Next

WScript.Echo AP(2)

sNames = Split(AP(3), " ", -1, 1)

Set objContainer = GetObject("LDAP://ou=Course"+CStr(AP(6))+",ou=Students,dc=edu,dc=ntiustu,dc=local")

Set objLeaf = objContainer.Create("User", "cn=" & AP(2) )
objLeaf.Put "sAMAccountName", AP(0)
objLeaf.Put "description", "Студент 2006 " & AP(5)

objLeaf.FullName = AP(3)
objLeaf.FirstName = sNames(0)
objLeaf.LastName = sNames(1)&" "& sNames(2)
objLeaf.userPrincipalName = AP(0)& "@" & "edu.ntiustu.local"

objLeaf.SetInfo ' Записываем

objLeaf.SetPassword AP(4) ' ПАРОЛЬ. После того как юзер создан

objLeaf.Put "Title", AP(1) ' Было так "Студент "+AP(5) Теперь тут будет храниться код
objLeaf.Put "Division", AP(5)
objLeaf.Put "Department", "Факультет "& AP(7)


Flag = objLeaf.Get("UserAccountControl")
newFlag = Flag or ADS_UF_DONT_EXPIRE_PASSWD
objLeaf.Put "userAccountControl", newFlag

objLeaf.AccountDisabled = False

objLeaf.SetInfo

Set objGroup = GetObject("LDAP://cn=Students,ou=Students,dc=edu,dc=ntiustu,dc=local")
objGroup.Add(objLeaf.ADsPath)

End Sub

' 0 1 2 3 4 5 6 7
' пример Abashev-DG, Abashev Dmitrij Gennadevich,Абашев Дмитрий Геннадьевич,20040235,224-ИСТ,2,Экономики и менеджмента
' Abashev-DG,11287,Abashev Dmitrij Gennadevich,Абашев Дмитрий Геннадьевич,20040235,224-ИСТ,2,Экономики и менеджмента
'

' ========================================================
' ================== Начало скрипта ===================


Set objArgs = WScript.Arguments
If objArgs.Count = 1 Then sParamFN = objArgs(0) Else sParamFN = "test.ADSI.txt"

For i=1 To 6
' CreateCourseOU(i)
Next


WScript.Echo "Загружается файл"
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (objFSO.FileExists(sParamFN)) Then

Set objFile = objFSO.OpenTextFile (sParamFN, ForReading)
i = 0
Do Until objFile.AtEndOfStream
i = i + 1
strName = objFile.ReadLine

If Left(strName,1) <> "*" Then CreatAD_User(strName) ' WScript.Echo strName

Loop

objFile.Close
End If

WScript.Echo "Well done. "+CStr(i)+" items processed"

Автор: Geduc
Дата сообщения: 15.11.2006 07:15
Ладно, с удалением выбранных файлов я разобрался.
Теперь стоит задача передать имя папки для архивирования в рар (имя папки постоянно будет разное, поэтому нельзя просто путь в батник записать).
Я попытался сначала записать имя папки в текстовик:
cd >> 1.txt
Но не знаю, как его вернуть в рар:
rar.exe a archive.zip <имя папки>
Подскажите пожалуйста.
Автор: north_crow
Дата сообщения: 15.11.2006 07:59
2 jONES1979 Спасибо!

2 All

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



Добавлено:
2 jONES1979
по поводу приведенного тобой скрипта...
там у тебя разделитель - это запятая.
мне знаки препинания не подходят, т.к. знаки препинания у нас могут входить в пароль...
как поступить в этом случае???
Автор: Vby
Дата сообщения: 15.11.2006 09:26
Geduc
А если не
Цитата:
cd >> 1.txt
, а rar.bat <имя папки>,
где rar.bat:

Цитата:
rar.exe a archive.zip %1


Автор: fedmun
Дата сообщения: 15.11.2006 09:48
Может кто подскажет скрипт для следующей задачи?:
Outlook сохраняет открытые аттачи в папке %UserProfile%\Local Settings\Temporary Internet Files\OLKxx, где xx - различные комбинации.
Т.к. Outlook не всегда корректно чистит эту папку, необходимо при выходе из системы ее чистить.
Имя папки для каждого пользователя хранится в ключе реестра
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Security]
"OutlookSecureTempFolder"
(например "OutlookSecureTempFolder" = "C:\\Documents and Settings\\User\\Local Settings\\Temporary Internet Files\\OLK2\\")
Т.е. надо прочитать значение ключа "OutlookSecureTempFolder" и удалить в этой папке все.
Может кто-то уже делал аналогичное?
p.s. изменение имени папки для всех пользователей на одинаковое для упрощения чистки - не подходит .
Чистка целиком "Temporary Internet Files" - также нежелательна.
Автор: Geduc
Дата сообщения: 15.11.2006 10:32
Ещё такой вопрос:
как из командной строки создать архив (использую я rar.exe) с именем текущей папки и расширением zip, если имя папки неизвестно?
Заранее спасибо! =)
Автор: uZver
Дата сообщения: 15.11.2006 11:16
Geduc
если нужно только сменить расширение то
move *.rar *.zip

а если нужно пожать в зиповом формате, то
тут 2 варианта
использовать pkzip
либо
использовать ключ - afzip для винрара
типа WinRAR a -afzip arc
НО (из справки) - ключ НЕ поддерживается в консольной версии
Автор: Geduc
Дата сообщения: 15.11.2006 11:22
uZver, тут проблема не в этом. Винрар в консоли отлично жмёт в zip, просто указав в имени архива *.zip. Проблема в том, чтобы присвоить архиву имя папки, в которой он создаётся.
Автор: Vby
Дата сообщения: 15.11.2006 11:38
Geduc
Создай bat внутри которого rar с параметрами.
Используй bat <par1> <par2>
Пример: rar.bat archive_name source
rar.bat:
rar.exe a %2 %1
Автор: jONES1979
Дата сообщения: 15.11.2006 11:46
north_crow

используй любые другие разделители
Автор: uZver
Дата сообщения: 15.11.2006 13:25
Geduc
папки одного уровня?
или типа
папка1 - папка2 - нужная папка
и
папка1-папка2-папка3-нужная папка

Добавлено:
если папки одного уровня
например 2,т.е например c:\1\{2,3,...х}
то вот

Код: FOR /F "tokens=2-25 delims=\" %%i IN ("%CD%") DO rar a %%j *.*
Автор: Geduc
Дата сообщения: 15.11.2006 14:01
Всё сделал, всем спасибо! =)

Автор: VovaMozg
Дата сообщения: 15.11.2006 18:41
north_crow
у меня скрипт на vbs, который адаляет все профили в папке Documents and Settings кроме папок All Users, Default User, LocalService, NetworkService, Администратор. Ну в принципе сам смотри. Можно поставить условие другое

'comp_name.txt - файл, в котором находятся имена машин, с которых нужно удалять, он 'лежит рядом со скриптом, но можно поместить его хоть куда...
'Выносим профили
file_computer_name="comp_name.txt"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile(file_computer_name)
Set TextStream = File.OpenAsTextStream(1)
While Not TextStream.AtEndOfStream
'Имя компутера берём из файла
computer_name=TextStream.ReadLine()
path="\\"+computer_name+"\c$\Documents and Settings\"
'проверяем - существует ли такой путь
if (FSO.FolderExists(path) = true) then
'Смотрим все подкаталоги
Set Folder = FSO.GetFolder(path)
For Each SubFolder In Folder.SubFolders
folder1=SubFolder.Name
if folder1<>"All Users" and folder1<>"Default User" and folder1<>"LocalService" and folder1<>"NetworkService" and folder1<>"Администратор" then
folder1=path+folder1
if (FSO.FolderExists(folder1) = true) then
Set folder_for_delete = FSO.GetFolder(folder1)
folder_for_delete.Delete(True)
else MsgBox "Путь "+folder1+" не найден"
end if
end if
Next
end if
Wend
TextStream.Close


Надеюсь помог
Автор: north_crow
Дата сообщения: 15.11.2006 23:05
2 VovaMozg
я наверно неправильно задал вопрос...
мне не нужно удалять папки с профилем... мне нужно удалить учетные записи с локального компа кроме админа и доменной записи...
Автор: MONEYMDF
Дата сообщения: 15.11.2006 23:40
Покажите, пожалуйста, как должен выглядеть VBscript для автологина.

Программка, запускаемая в WindowsXP, выводит окошко для ввода логина и пароля.

Хотелось бы иметь возможность автоматического заполнения этой формы при ее появлении. Ну или ее заполнения путем запуска скрипта из бат-файла.

Название окошка "Идентификация пользователя"
Название поля для логина "Введите ваш логин"
Название поля для пароля "Введите ваш пароль"

Выручите, пожалуйста, кто знает.

Автор: Stranger2000
Дата сообщения: 16.11.2006 03:11
Здравствуйте, Администраторы!

Возникла нетривиальная задача. Самостоятельно решить знаний не хватило, хотя я честно гулял по многим ссылками и учитался всякой информацией практически до раздвоения личности

ситуация:

есть сеть, есть домен вин2к. Сеть 100+ машин.
Подавляющие большинство профилей пользователей - перемещаемые. постоянные профили, как водится, только у командования.

На предприятии постоянная текучка кадров - каждый месяц кто-то уходит, кто-то приходит. Такова специфика - жруналисты, еклмн. Поскольку профили не привязаны к машинам, то уволившийся сотрудник оставляет за собой хвосты почти на всех машинах в виде локальных копий профилей. А хотелось бы, чтобы все копии профилей после удаления учетной записи из домена удалялись со всех машин. Хотелось бы узнать - возможно ли написать скрипт, который будет работать примерно по следующему алгоритму:

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

что должен делать:
хватает SID и Login всех живых и не заблокированных пользователей из АД.
сравнивает этот список со списком профилей на конкретной машине (где выполняется скрипт)
при условии, если есть одинаковые SID, но нет одинаковых login-name, привязанных к этому SID = учетная запись убивается.

по русски: если в домене пользователя нет - копию профиля убиваем.
====
воть. надеюсь к решению задачки подошел с той стороны, жаль только что в скриптах не шарю. но если вы вдруг знаете, как эту проблему решить проще - я буду только рад. а то парит шарится по всем компам в отделах и убивать профили людей, которые уже год как не работают.
Автор: Geduc
Дата сообщения: 16.11.2006 07:20
Ребята, возникла ещё одна задача.
Возможно ли написать батник, чтобы он при запуске выдавал сообщение:
"Введите имя:", а потом введённое с клавиатуры имя записывал в файл?
Заранее спасибо!
Автор: Rurik
Дата сообщения: 16.11.2006 08:25
Geduc

Код:
set /P VAR= ВВЕДИТЕ ...
echo %var% >file
Автор: Geduc
Дата сообщения: 16.11.2006 08:45
Rurik, О! спасибо большое, отлично работает!
Но в процессе работы возник ещё один вопрос. Пишу:

Код:
set DATE=%2
echo Created : %date% 11:00>>%OUTPUTFILE%
Автор: uZver
Дата сообщения: 16.11.2006 09:00
%TIME% текущее время, %TIME:~0,-3% - время без долей сек.
%DATE% - текущая дата
- b - значит это же передается в %2, если %2 используется только для получения даты то используйте %DATE%
ЗЫ: и вот тут про батники можно посмотреть
Автор: Plaston
Дата сообщения: 16.11.2006 09:07
Подскажите пожалуйста решение следующей задачи.
Есть сеть: 1 КД, ~500 компов, IP у всех статические. Необходимо на всех компах поменять маску (только маску, IP оставить старым). Так вот, помогите пожалуйста с написанием скрипта для решения данной задачи, потомучто руками менять на каждом компе сами понимаете... А может есть другой способ?
Автор: Geduc
Дата сообщения: 16.11.2006 09:45
uZver, спасибо большое! =)
А вот результат:
Просто создает несколько директорий и файл с информацией о создателе и времени.
[more]
@echo off
mkdir Tessy_RRJ_Init
cd Tessy_RRJ_Init
mkdir test
mkdir root
mkdir source
mkdir stubs
set /P VAR= Enter name
set OUTPUTFILE=%1 Tessy_RRJ_init.pdb
echo File Version : 3.0>>%OUTPUTFILE%
echo Directory : "C:\TESSY_RRJ_init">>%OUTPUTFILE%
echo Author : "%Var%">>%OUTPUTFILE%
echo Created : %DATE:~-10% %TIME:~0,-6%>>%OUTPUTFILE%
echo Last Changed : %DATE:~-10% %TIME:~0,-6%>>%OUTPUTFILE%
echo Comment : "">>%OUTPUTFILE%
echo Project>>%OUTPUTFILE%
echo Name : "test">>%OUTPUTFILE%
echo Comment : "Created by %var% (LRU)">>%OUTPUTFILE%
echo End>>%OUTPUTFILE%
[/more]
Автор: strizhakovs
Дата сообщения: 16.11.2006 14:27
Люди подскажите, как поправить скрипт?
Есть скрипт который получает инфу об установленном на машине софте:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile("c:\scripts\software.txt", True)

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

objTextFile.WriteLine "Caption" & vbtab & _
"Description" & vbtab & "Identifying Number" & vbtab & _
"Install Date" & vbtab & "Install Location" & vbtab & _
"Install State" & vbtab & "Name" & vbtab & _
"Package Cache" & vbtab & "SKU Number" & vbtab & "Vendor" & vbtab _
& "Version"

For Each objSoftware in colSoftware
objTextFile.WriteLine objSoftware.Caption & vbtab & _
objSoftware.Description & vbtab & _
objSoftware.IdentifyingNumber & vbtab & _
objSoftware.InstallDate2 & vbtab & _
objSoftware.InstallLocation & vbtab & _
objSoftware.InstallState & vbtab & _
objSoftware.Name & vbtab & _
objSoftware.PackageCache & vbtab & _
objSoftware.SKUNumber & vbtab & _
objSoftware.Vendor & vbtab & _
objSoftware.Version
Next
objTextFile.Close


ВОПРОС! Как изменить WMI запрос, чтобы получать этуже инфу но для удаленного компьютера???т.е. я хочу получить инфу о том какой софт стоит на удаленном компьютере...
Автор: Vby
Дата сообщения: 16.11.2006 14:45
strizhakovs
Похоже здесь поменять надо:

Цитата:
strComputer = "."


Должен иметь соостетствующие права на удаленной машине.
Автор: jONES1979
Дата сообщения: 16.11.2006 15:30
strizhakovs

уже пора осваивать теги more и code!
Автор: maGELan
Дата сообщения: 16.11.2006 16:12
Plaston, боюсь что тебе ....как и мне (двумя страницами выше) не ответят
У меня похожая задача, но несколько сложнее...
Чтобы написать такой скриптик нужно знать имя подключения по локальной сети (а оно у половины людей будет называться "Локальная сеть", а у остальных как им угодно) на чем я собственно и застрял в решении своей задачи.
кстати повторю свой вопрос, раз уж он остался незамеченным)


Цитата:
Долго мурыжился, но так до конца и не нашел возможности переименовать имя подключения по локальной сети с текущего (которое может быть каким угодно) в "новое имя"
Помогите ПЖЛСТ сделать ЭТО при помощи командной строки.

Нашел такой вот способ, НО он как-то не так (только с подтверждением или я не там ставлю "/y") срабатывет ...? (к слову, Нужен ли второй ключ моего скрипта?)

Код:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{9DA79BA9-4817-4800-9425-30B4E7067E83}\Connection" /v Name /t reg_sz /d "Имя"
reg add "HKLM\SYSTEM\ControlSet001\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{9DA79BA9-4817-4800-9425-30B4E7067E83}\Connection" /v Name /t reg_sz /d "Имя"

Задача стоит не сколько иначе ...
1. Допустим у пользователя две сетевых карты из которых подключена к сети только одна (как определить активную ?) и переименовать именно ее?



Дальнейшее решение твоей задачи выглядит проще простого


Код: netsh interface ip set address name="Локальная сеть" source=static addr=10.55.22.100 mask=255.255.0.0
netsh interface ip set address name="Локальная сеть" gateway=10.55.0.1 gwmetric=1
netsh interface ip set dns name="Локальная сеть" source=static addr=81.25.32.34 register=PRIMARY
netsh interface ip add dns name="Локальная сеть" addr=81.25.32.9 index=2
netsh interface ip set wins name="Локальная сеть" source=static addr=none
Автор: strizhakovs
Дата сообщения: 16.11.2006 16:30
Ребят я немного сображаю и до этого использовал вот такой листинг для удаленного WMI запроса

Цитата:

strComputer = "computer hostname"
strUserName = "\administrator"
strPassword = "password"
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer(strComputer, "root\cimv2", strComputer & _
strUserName, strPassword)
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")


но такой запрос не работает в данном случае, применительно для вышеуказанного мной листинга с получением инфы о софте на удаленном компе ((
как нажно правльно составить WMI запрос?
Автор: Plaston
Дата сообщения: 17.11.2006 08:59
maGELan, кажется мне что дальнейшее решение задачи не выглядит проще простого. Маску нужно поменять одновременно на 500 компах!!! IP должен остаться старым, меняется только маска. Т.е. скрипт должен быть универсален, для любого IP, для любого названия соединения. Возможно ли такое ?
Автор: uZver
Дата сообщения: 17.11.2006 11:47
совсем

Цитата:
должен быть универсален, для любого IP, для любого названия соединения

DHCP
Автор: jONES1979
Дата сообщения: 17.11.2006 13:23
strizhakovs

ты должен сказать какую конкретно ошибку выдает. Это может быть просто связано с настройками DCOM. Даже хоть ты DomainAdmin, всё равно, если в этих настройках чего-т не так, будешь обламываться...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Зеркалирование дисков Win2000


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