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

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

Автор: rosalin
Дата сообщения: 06.07.2007 07:16
Ребята помогите сворганить bat ничек для подключения сетевых ресурсов если они доступны используя команду


Код: net use z: \\server\printer /u:Domain\user /persistent:yes
Автор: PIL123
Дата сообщения: 06.07.2007 11:01
Доброго времени суток, коллеги. Помогите, пожалуйста, кто силён в скриптологии решить такую задачу: автоматизировать заполнение описания компьютера, чтобы оно содержало ФИО человека, работающего (залогоненного) в данный момент на нём. А также синхронизировать это описание с описанием компьютера в Active Directory. Один хороший человек на другом форуме посоветовал мне эту идею и шаги, как её реализовать, цитирую:

Цитата:
У нас стояла задача сделать описание чтобы имя компьютера содержало ФИО человека работающего на нем. Реализовали двумя скриптами:

1) Соотносил значения компьютер-человек по входу учетной записи на ПК. Затем записывал имя учетной записи в каталог AD как описание машины.

2) На основе полученного результата брал полное имя пользователя из каталога AD и подставлял его в описание уже непосредственно на машине.

Помогите, пожалуйста, в написании скрипт -а/-ов - я в это деле - 0
Автор: cluster
Дата сообщения: 06.07.2007 11:40
подскажите способы изменения даты\времени на удалённой машине. права админа есть.

..и в добавок: Как удалить шару с удалённого сервера?
Автор: Bugriy
Дата сообщения: 06.07.2007 12:56
PIL123
Мне всегда было интересно, а зачем вообще это нужно делать?
Автор: PIL123
Дата сообщения: 06.07.2007 13:06
Bugriy

Цитата:
Мне всегда было интересно, а зачем вообще это нужно делать?

Ну как зачем - дабы было удобно и пользователям обозревать "Сетевое окружение" и в ADUC порядочек и актуальность была бы. Дело в том, что у нас сейчас так заведено, что в описании компьютера пишется ФИО пользователя, и в ADUC вописании тоже указывается ФИО. А так, как текучка кадров всё-таки есть, то руками постоянно заниматься переписывание этих данных неохота.
Автор: Bugriy
Дата сообщения: 06.07.2007 13:17
PIL123
По-моему, тут такой скрипт проскакивал. Именно в этой теме. Ты поищи повнимательнее.
Автор: alecsandrb
Дата сообщения: 09.07.2007 06:35
PIL123

Вот пример того что тебе нужно, но пока я например не решил только одну проблему как
сделать так чтобы часть скрипта (запись в реестр ПК и запись строки в АД) выполнялась под domain admin, иначе не срабатывает.
Про добавление описания для ПК можно почитать на NetworkDoc.ru, там есть статья и тема на форуме.
Сам скрипт:
[more]
Option Explicit
Dim WshNetwork, objSysInfo, strComputerDN, objComputer, strUserDN, objUser
Dim myArray, Path, rec, DepartmentPath, OUCompPath, DescriptionStr
Dim objWMIService, colSoftware, WshShell, StrCmds, RetVal

On Error Resume Next

'Определяем имя компьютера
Set objSysInfo = CreateObject("ADSystemInfo")
strComputerDN = objSysInfo.computerName
Set objComputer = GetObject("LDAP://" & strComputerDN)

'Определяем имя пользователя
Set WshNetwork = CreateObject("WScript.Network")
strUserDN = objSysInfo.userName
Set objUser = GetObject("LDAP://" & strUserDN)

' Получаем информацию об OU пользователя
' общая информация включая полный перечень всех OU
' в общем случаем для меня это: cn=Ivan Ivanov,OU=IT,OU=USERS,OU=KOR,OU=CEM,DC=RR,DC=TT,DC=NNNNNN,DC=MMM
myArray = Split(strUserDN, ",")
Path = ""
For Each rec In myArray
If Left(rec, 3) = "OU=" Then
Path = Mid(rec, 4) + Path
End If
Next
' В примере Path="CEMKORUSERSIT"
DepartmentPath = Mid(Path, 12)
' Результат DepartmentPath="IT"

' Получаем информацию об OU компьютера
' У меня разнесены учетки ПК, ноутбуков и серверов по разным OU
' и у меня у ПК для примера будет: cn=PCVASYA,OU=Workstation,OU=KOR,OU=CEM,DC=RR,DC=TT,DC=NNNNNN,DC=MMM
myArray = Split(strComputerDN, ",")
Path = ""
For Each rec In myArray
If Left(rec, 3) = "OU=" Then
Path = Mid(rec, 4) + Path
End If
Next
' В примере Path="CEMKORWorkstation"
OUCompPath = Mid(Path, 7)
' Результат OUCompPath="Workstation"

' Полное описание будет следующего вида:
' Workstation IT Ivanov Ivan Last Logon 1 июня 8:00:00
DescriptionStr = OUCompPath & " " & DepartmentPath & " " & objUser.sn & " " & objUser.givenName &" Last logon - "& Now

' запись полученной строки в описание компьютера в AD
objComputer.Put "Description" , DescriptionStr
objComputer.SetInfo

' Далее эту строку запишем в описание ПК на самом компьютере
' Останавливаем службу Сервер и зависящие от нее служюы
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colServiceList = objWMIService.ExecQuery("Associators of " & "{Win32_Service.Name='LANMANSERVER'} Where " & "AssocClass=Win32_DependentService " & "Role=Antecedent" )
For Each objService in colServiceList
objService.StopService()
Next
Wscript.Sleep 20000
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='LANMANSERVER'")
For Each objService in colServiceList
errReturn = objService.StopService()
Next

' Внесение данных о пользователе в свойcтва компьютера
Set WshShell = Wscript.CreateObject("WScript.Shell")
Set WshNetwork = CreateObject("WScript.Network")
WshShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\srvcomment", DescriptionStr

' Запускаем службу Сервер и зависящие от нее служюы
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='LANMANSERVER'")
For each objService in colServiceList
errReturn = objService.StartService()
Next
Wscript.Sleep 20000
Set colServiceList = objWMIService.ExecQuery("Associators of " & "{Win32_Service.Name='LANMANSERVER'} Where " & "AssocClass=Win32_DependentService " & "Role=Dependent" )
For each objService in colServiceList
objService.StartService()
Next

[/more]
Автор: alecsandrb
Дата сообщения: 10.07.2007 08:58
PIL123

Ну вот получилось что-то работающее, правда пришлось разбить скрипт на две части.
Первая дабавляет в реестр ПК запись с описанием и перезапускает службу Сервер,
а вторая часть читает строку из реестра и записывает в АД. Первая часть написана на AutoIt3.
Еще нужно дать разрешение для пользователей домена на изменение ветки реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters в групповой политике.
Первый скрипт компилируется (не забудь исправить имя пользователя под которым запускается перезапуск службы Сервер и запуск второй части скрипта и имя или IP адресс контроллера домена) и вставляется в логон-скрипты, а ворой положить на шару netlogon на контроллере домена, вот вроде и все.
Скрипт №1 (DescriptionPC.au3):
[more]
; добавляем описание константы - путь в реестре для описания ПК
Local Const $HKLM_DESCR = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters"
; Добавляем описание функции для чтения данных из АД
; Будет возвращена строка типа:
; cn=Ivan Ivanov,OU=IT,OU=USERS,OU=KOR,OU=CEM,DC=RR,DC=TT,DC=NNNNNN,DC=MMM|cn=PCVASYA,OU=Workstation,OU=KOR,OU=CEM,DC=RR,DC=TT,DC=NNNNNN,DC=MMM

Local $Code = ""
$Code &= 'Function ReadAD()' & @LF
$Code &= ' Dim WshNetwork, objSysInfo, strComputerDN, objComputer, strUserDN, objUser' & @LF
$Code &= ' Set objSysInfo = CreateObject("ADSystemInfo")' & @LF
$Code &= ' strComputerDN = objSysInfo.computerName' & @LF
$Code &= ' Set WshNetwork = CreateObject("WScript.Network")' & @LF
$Code &= ' strUserDN = objSysInfo.userName' & @LF
$Code &= ' ReadAD = strComputerDN & "|" & strUserDN' & @LF
$Code &= 'End Function' & @LF
    
; вызов функции чтения данных о ПК и пользователе
Local $VbsObj = ObjCreate("ScriptControl")
$VbsObj.Language = "vbscript"
$VbsObj.AddCode($Code)
Local $DescriptionStr = $VbsObj.Run("ReadAD")
; Результат следующих действий:
; $DescriptionStr = cn=Ivan Ivanov,OU=IT,OU=USERS,OU=KOR,OU=CEM,DC=RR,DC=TT,DC=NNNNNN,DC=MMM|cn=PCVASYA,OU=Workstation,OU=KOR,OU=CEM,DC=RR,DC=TT,DC=NNNNNN,DC=MMM
$mmm = StringInStr($DescriptionStr, "|") - 1
; $mmm = 72
$strComputerDN = StringMid($DescriptionStr, 1,$mmm)
; $strComputerDN = cn=Ivan Ivanov,OU=IT,OU=USERS,OU=KOR,OU=CEM,DC=RR,DC=TT,DC=NNNNNN,DC=MMM
$strUserDN = StringMid($DescriptionStr, $mmm + 2 )
; $strUserDN = cn=PCVASYA,OU=Workstation,OU=KOR,OU=CEM,DC=RR,DC=TT,DC=NNNNNN,DC=MMM

; Далее получаем информацию в каком OU расположена учетка пользователя (для меня это название отдела)
; Заполняем массив $myArray значениями из строки $strUserDN, концом для текущего значения будет <,>
$myArray = StringSplit($strUserDN, ",")
; Далее перебираем весь массив и все значения в которых есть строка с <OU=> собираем в одну строку $Path
$Path = ""
For $rec In $myArray
If StringLeft($rec, 3) = "CN=" Then
$UserName = StringMid($rec, 4)
EndIf
If StringInStr($rec, "OU=") > 0 Then
$Path = StringMid($rec, 4) & $Path
EndIf
Next
; Path="CEMKORUSERSIT"
$DepartmentPath = StringMid($Path, 12)
; $DepartmentPath = "IT"

; Далее получаем информацию в каком OU расположена учетка ПК (у меня разнесены учетки ПК, ноутбуков и серверов по разным OU)
; Заполняем массив $myArray значениями из строки $strUserDN, концом для текущего значения будет <,>
$myArray = StringSplit($strComputerDN, ",")
; Далее перебираем весь массив и все значения в которых есть строка с <OU=> собираем в одну строку $Path
$Path = ""
For $rec In $myArray
If StringLeft($rec, 3) = "OU=" Then
$Path = StringMid($rec, 4) & $Path
EndIf
Next
; Path="CEMKORWorkstation"
$OUCompPath = StringMid($Path, 7)
; $OUCompPath = "Workstation"
$Code3 = $OUCompPath & " " & $DepartmentPath & " " & $UserName & " " & @MDAY & "." & @MON & "." & @YEAR & " "& @HOUR & ":" & @MIN
; Описание будет следующего вида:
; Workstation IT Ivan Ivanov 9.07.2007 8:00

; Создаем раздел для в реестре под описание ПК
RegWrite($HKLM_DESCR, 'srvcomment', 'REG_SZ', "")
; Записываем полученное значение
RegWrite($HKLM_DESCR, 'srvcomment', 'REG_SZ', $Code3)

; Запускаем все остальные действия под учеткой Domain admins
RunAsSet('Имя пользователя - Domain admins', 'Имя домена', 'Пароль')

; Далее запускаем несколько Дос сессий в скрытом режиме
; Запуск второй части скрипта
$StrCmd1 = @SystemDir & '\cscript.exe \\имя контроллера домена или его IP адресс\netlogon\OpisaniePC.vbs'
RunWait($StrCmd1, @SystemDir, @SW_HIDE)
; Останавливаем службу Сервер и все от нее зависящие службы
$StrCmd = @SystemDir & '\net.exe stop lanmanserver /y'
RunWait($StrCmd, @SystemDir, @SW_HIDE)
; Пауза
Sleep(100)
; Заново запускаем службу Сервер
$StrCmd2 = @SystemDir & '\net.exe start lanmanserver /y'
RunWait($StrCmd2, @SystemDir, @SW_HIDE)
; Возвращаемся к учетке залогиневшегося пользователя
RunAsSet()

[/more]
Скрипт №2 (OpisaniePC.vbs):
[more]
Option Explicit
Dim objSysInfo, strComputerDN, objComputer, WshShell, WshNetwork
Dim DescriptionStr

On Error Resume Next
' Получаем данные о ПК на котором зологинился пользователь
Set objSysInfo = CreateObject("ADSystemInfo")
strComputerDN = objSysInfo.computerName
Set objComputer = GetObject("LDAP://" & strComputerDN)
Set WshShell = Wscript.CreateObject("WScript.Shell")
Set WshNetwork = CreateObject("WScript.Network")

' Читаем из реестра описание ПК и пользователя сформированное первым скриптом
DescriptionStr = WshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\srvcomment")

' Записываем данные в АД в свойсво Description
objComputer.Put "Description" , DescriptionStr
objComputer.SetInfo

[/more]
Автор: cluster
Дата сообщения: 10.07.2007 10:49
Ребята, подскажите скрипт для создания OU, так чтоб он спрашивал имя OU.
Расположение новой OU в АД
"LDAP://OU=Файловые ресурсы,OU=iTg,DC=NOVGARO,DC=RU"
Автор: PIL123
Дата сообщения: 10.07.2007 13:24
alecsandrb, спасибо большущее - буду пробовать. Прости за наглость, можно ли тебя ещё попросить сделать описание по тексту скриптов и общее описание вообще как это всё должно работать, чтобы так сказать продукт имел документацию . А также, разъясни, пожалуйста, что надо делать с первым скриптом, чтобы он отрабатывал как надо: надо ли что-то дополнительно иметь на клиентах или может ещё какие- нюансы - как им пользоваться? С AutoIt3 никогда дел не имел, но вроде как слышал, что эта штука глючная немного - это так?
Автор: alecsandrb
Дата сообщения: 10.07.2007 14:57
PIL123

Я добавил описание как ты попросил, смотри предъидущий мой пост.
Как работает:
1) Добавляешь в скрипт 1 свои данные о пользователе с правами доменного администратора и IP адресс своего доменного контроллера
2) Скачиваешь, устанавливаешь AutoIT и компилируешь скрипт 1 в exe файл
3) Копируешь файл OpisaniePC.vbs в папку Netlogon на доменном контроллере
4) В групповой политике для Пк на которых хочешь чтобы было описание в Логон скрипты добавляешь файл DescriptionPC.exe и разрешаешь доменным пользователям редактировать ветку реестра на локальных машинах (ту в которую записывается описание ПК)
5) Перезагружаешь пользовательский комп или обновляешь политку и завершаешь текущий сеанс и логинишься заново.
6) Если все нормально у тебя появиться одинаковое описание на локальном ПК и в Оснастке Active Directory - Пользователи и Компьютеры


Цитата:
С AutoIt3 никогда дел не имел, но вроде как слышал, что эта штука глючная немного - это так?

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

Вроде все написал....
Автор: vasiliy74
Дата сообщения: 11.07.2007 12:34
Есть задача пусть №1 считать данные из реестра, в данном случае к 1с, затем использовать их для архивации.

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


можно по другому:
1 Пока находим следующее значение производим архивацию по пути, нет значении выход

Не нашёл понятного описания метода RegRead решил проверить как оно работает нужно считывать value name, и как двигаться по значениям в ключе? Попробовал это это:

Код: lcValue1 = WSHShell.RegRead(value)("HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles\")
WScript.Echo lcValue1
Автор: Evgeniy15
Дата сообщения: 16.07.2007 14:51
Всем привет!

У меня вопрос по SCHTASKS.

Есть     N-ное количество рабочих станций Windows XP PRO с учетными записями администратора и пользователя с ограниченными правами.

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

Заранее благодарен.
Автор: Sid Salmon
Дата сообщения: 17.07.2007 11:27
Sk1f
Да сам, если есть вопросы пиши в личку

Evgeniy15

runas есть такая комманда но она спаршивает пароль его можно только вводить с клавы но есть сторонние утилиты для запуска с правами

comercial
TcqRunAs, Mast RunAs Proff

Free
http://www.joeware.net/freetools/tools/cpau/index.htm

ну а дальше как обычно
Автор: cluster
Дата сообщения: 17.07.2007 12:55
эмс.. а можно как-нибудь, н-р, скриптом, добавлять адреса в чёрный спсиок на ISA?
Автор: Dirk Diggler
Дата сообщения: 18.07.2007 13:00
Как можно для всех текущих терминальных сессий получить такие сведения как имя пользователя, его компа, статус и т.п. с пом WMI или чего-нть похожего?
Автор: Sun Ray
Дата сообщения: 18.07.2007 14:35
Доброе время суток, не подскажете как можно помапить в LPT1 через WMI принтер-шару с Терминального клиента, при этом имя клиента выдернуть через WMI?

Код:
Const CONNECT_CLIENT_DRIVES = 1
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}\\" & strComputer & "\root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * from Win32_TSClientSetting")
For Each objItem in colItems
errResult = objItem.ConnectionSettings _
(CONNECT_CLIENT_DRIVES)
Next
Автор: gap5
Дата сообщения: 19.07.2007 08:31
Пытаюсь сделать выключение компов в сети, для этого надо собрать живые компы по net view, далее каждый потушить. Проблема:

1) Как быстро после включения компы должны появляться в списке net view контроллера домена (c учетом того, что поднят wins сервер) ?

2) Странное дело, но от имени юзера (без прав администратора) под шедулером не хочет запускаться команда net.exe.

Простой батник c:\windows\system32\net.exe > c:\file.txt дает пустой вывод... ping.exe - пожалуйста, без проблем. Причем тот же батник без проблем запускается и выводит net.exe через runas, а через шедулер никак. Очередная подстава от мелкософта?
Автор: SantaS
Дата сообщения: 22.07.2007 20:48
Доброго времени суток. Пожалуйста, помогите решить следующую задачу, нужен VBscript, который при входе в систему будет проверять наличие Outlook 2003 profile и в случае отсутствия создавать его. Причем необходима возможность управлять расширенными свойствами, такими как – второй почтовый ящик, отключения кэширования, настройка на Exchange сервер.
Через какой класс это все делать(outlook.aplication или)? Может, у кого есть соответствующий пример или ссылка. Заранее огромное спасибо.
Автор: north_crow
Дата сообщения: 25.07.2007 13:12
ребята!!! прошу помощи!
есть такая ситуация:
допустим есть экселевский файл со списком пользователей домена
мне нужно пробежаться по этому файлу, выдергивая из него полное имя пользователя (objUser.cn) и этому пользователю прописать какие либо данные в профиль (например телефон)

а проблема заключается вот в чем...
допустим я имя пользователя выдернул в переменную FIO
и пытаюсь взять этого пользователя таким образом Set objUser = GetObject("LDAP://****/cn=" & FIO & ",ou=test,dc=***,dc=***,dc=com")
вот тутто и возникает проблема
как мне правильно достучаться до профиля пользователя?
Автор: Sk1f
Дата сообщения: 25.07.2007 17:13
north_crow, в смысле проблема?
Какая ошибка выскакивает?

Пример из script_center:

Цитата:

Const ADS_PROPERTY_APPEND = 3

Set objUser = GetObject _
("LDAP://cn=MyerKen,ou=Management,dc=NA,dc=fabrikam,dc=com")

objUser.PutEx ADS_PROPERTY_APPEND, "otherHomePhone", Array("(425) 555-0116")
objUser.SetInfo
Автор: north_crow
Дата сообщения: 25.07.2007 23:09
Sk1f
я уже сам разобрался...
просто я неправильно пытался записать в TelephoneNumber значение...

ЗЫ а может еще подскажите - как в TelephoneNumber записать пустую строчку? делов том, что в списке пользователей есть пользователи без телефона, и при записи пустого значения вываливается ошибка
Автор: Oldster
Дата сообщения: 26.07.2007 06:43
north_crow

Цитата:
и при записи пустого значения вываливается ошибка

попробуй пробел писать
Автор: north_crow
Дата сообщения: 26.07.2007 07:27
Oldster
дык вот пока "пробелом" и решил проблему
Автор: Lovec
Дата сообщения: 01.08.2007 09:32
Надо чтобы планировщик выполнял задание даже если не был выполнен вход в систему. Это срабатывает на Win2003 server, но не срабатывает на Win2000 server.
Как можно автоматизировать этот процесс? Надоело логиниться каждый раз в одно и тоже время Может какой патч можно поставить для win2000?

Цель: ежедневный запуск резервного копирования в одно и тоже время. Дополнительных приложений ставить не очень хочется, дабы не засорять систему...
Автор: LeaF_AVF
Дата сообщения: 01.08.2007 10:12
Lovec
а использовать вместо стандартного планировщика nnCron не желаете? Его возможности приятно удивят..
Автор: slayer120
Дата сообщения: 01.08.2007 13:11
Lovec
А какой сервис пак стоит? у меня w2k+sp4 все работает даже если не логинишся в систему
Автор: SPV_Ed
Дата сообщения: 01.08.2007 14:26
Lovec
Можно управлять планировщиком удаленной системы с рабочей станции XP.

Код: schtasks /create /s 10.10.10.2 /sc onstart /tn notepad_task /tr notepad.exe
Автор: Lovec
Дата сообщения: 01.08.2007 14:54
slayer120
Стоит Windows Advanced Server SP4. Без логина планировщик не запускает задание...

SPV_Ed
А какой смысл мне через командную строку создавать задание, если я создаю его напрямую, мышкой и оно не выполняется? Разницы не вижу ...

Попробую посмотреть nnCron по совету LeaF_AVF. Пока мыслей больше нет...
Автор: LeaF_AVF
Дата сообщения: 01.08.2007 15:23
Lovec
если будут вопросы по nnCron, - чем смогу помогу, давненько с ним (и не представляю как вообще без него существовать можно
да и тут на форуме, есть темка про него...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

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


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