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

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

Автор: netman
Дата сообщения: 13.04.2007 07:01
coolpunk

Цитата:
Желательно в батнике, т.к. в них хоть что-то понимаю, посоветуйте, пожалуйста.


--start--test.bat---
regedit /s myfile.reg
--end--test.bat


Редактор реестра можно запускать с некоторыми ключами
1. /s (импортирует значения из reg-файла без вывода диалогового окна)
2. /e (экспортирует параметры в reg-файл.
Пример: regedit /e myfile.reg HKEY_USERS\.DEFAULT


Автор: gap5
Дата сообщения: 15.04.2007 16:20
Нет ни у кого готового скрипта для сбора данных о залогиненных юзерах на компах?
Надо:
а) выцепить из AD имена всех компов,
б) проверить их доступность,
в) на доступных пробить залогиненного юзера,
г) записать ИМЯ_КОМПА, ИМЯ_ЮЗЕРА в файлик...

Основной напряг с пунктом Б можно конечно вызывать пинг, сохранять рез-ты в файл, читать файл - но может есть че-то побыстрее?
Автор: jONES1979
Дата сообщения: 15.04.2007 19:12
gap5

Цитата:
для сбора данных о залогиненных юзерах на компах?

ну вот если цель именно ТАКАЯ, то не проще ли поступить так:
- выбрать из AD всех пользователей у которых свойство LastLogon входит в интересующий нас диапазон (в течении часа, в течении дня, посде 7 утра сегодня и тд.),
- потом уже проверять по этому короткому списку с какой он машины логинился, доступен ли и прочее по твоему заданию

...

вообще, на http://www.microsoft.com/technet/scriptcenter/ была интересная идея, менять юзерам в AD свойство Description в логон-скрипте, и соответственно менять в логаут-скрипте, чтобы потом анализируя Description всегда иметь свежий юзер-лист
Автор: Smitis
Дата сообщения: 15.04.2007 20:01

Цитата:
Редактор реестра можно запускать с некоторыми ключами

Не забывайте ключ /ea - экспорт в ANSI формате (совместимый с win 9x и NT).
Автор: coolpunk
Дата сообщения: 16.04.2007 05:14

Цитата:
запросто:
это в cmd и в скрипт на логон каждого юзера:

Парни, вы, видимо, не так поняли. Одним кликом ВСЕМ юзерам! Т.е. не будет времени логиниться под каждым, а надо под админом запустить и всё.

Добавлено:
или я не так понял, где-то можно задать логон для всех?
Автор: Oldster
Дата сообщения: 16.04.2007 07:08
coolpunk

Цитата:
где-то можно задать логон для всех?

если у тебя стоит AD, то в Груповых политиках :
Конфиг. пользователя->Конфиг. Windows->Сценарии (Вход\Выход)->Вход в систему->Добавить

Цитата:
Одним кликом ВСЕМ юзерам! Т.е. не будет времени логиниться под каждым, а надо под админом запустить и всё.

так не получится, т.к. пути к 1С в реестр прописывается под конкретным юзером:
[HKEY_CURRENT_USER]\Software\1C\1Cv7\7.7\Titles]
gap5
см. выше, тоже самое, на логон ставишь вот это:
echo %date% %time% - logon %username% at %computername%>>\\server_name\share\logons.log
имеешь лог кто вошел, с какого компа и во сколько, на выход - тоже самое.
Автор: coolpunk
Дата сообщения: 16.04.2007 08:45
Oldster
К сожалению АД не стоит, в том-то и проблема что пути у каждого юзера
логи мне не нужны, мне нужно моментально удалить пути...
Автор: Infected Switch
Дата сообщения: 16.04.2007 09:53
Из той же оперы вопрос:
При входе юзера в домен локально срабатывает logon.bat, в котором прописан 1c.reg (добавляет в реестр пути к базам 1c). Как сделать, чтобы он не срабатывал при входе юзера на терминальный сервер (т.к. там уже другие пути нужны)?

Добавлено:
coolpunk
Добавить пути при отсутствии АД можно одним верным способом:
Пишем батник, кладем его в общедоступное место, юзер его запускает и имеет пути.
Периодически корректируем пути в этом батнике - они будут меняться.
Можно в автозапуск батников напихать, но тогда теряется возможность их нормального редактирования.
Как именно удалить пути - лично я пока не догнал.
Автор: skw
Дата сообщения: 16.04.2007 10:50

Цитата:
Нет ни у кого готового скрипта для сбора данных о залогиненных юзерах на компах?


'---------------------------------------------------------------
' Вывод списка пользователей отлогиненых на компьютерах
'---------------------------------------------------------------
Const ADS_SCOPE_SUBTREE = 2

on error resume next

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection

' В следующей строке необходимо заменить имя домена
objCommand.CommandText = "Select Name, Location from 'LDAP://DC=domain,DC=name' " & "where objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
Wscript.Echo "Computer Name: " & objRecordSet.Fields("Name").Value

strComputer = "."
Set objWMIService = GetObject(_
"winmgmts:\\" & strComputer & "\root\cimv2")
Set colPings = objWMIService.ExecQuery _
("Select * From Win32_PingStatus where Address = '"& objRecordSet.Fields("Name").Value &"'")

For Each objStatus in colPings
If IsNull(objStatus.StatusCode) _
or objStatus.StatusCode<>0 Then
WScript.Echo "Computer did not respond."
Else
Wscript.Echo "Computer responded."

'Получение имени отлогиненного пользователя
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
&objRecordSet.Fields("Name").Value & "\root\cimv2")
Set colComputer = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")

For Each objComputer in colComputer
Wscript.Echo "User Name = " & objComputer.UserName _
& VBNewLine & "Computer Name = " & objComputer.Name
'Nextscript.Echo objComputer.UserName
Next

End If
Next

Wscript.Echo "Location: " & objRecordSet.Fields("Location").Value
objRecordSet.MoveNext
Loop

Автор: gap5
Дата сообщения: 16.04.2007 11:03
Oldster
Если батник под юзером запускать, то получается он увидит при входе черное окошко... так ведь?

Добавлено:
skw
Как я понимаю надо как-то привязать

For Each objComputer in colComputer
Wscript.Echo "User Name = " & objComputer.UserName _
& VBNewLine & "Computer Name = " & objComputer.Name

к colPings иначе он просто на каждый комп будет выплевывать мессаг "доступен - недоступен" но юзера будет пробивать вне зависимости от доступности?
Автор: skw
Дата сообщения: 16.04.2007 11:34

Цитата:
Как я понимаю надо как-то привязать

Там все привязано.

Цитата:
If IsNull(objStatus.StatusCode) _
or objStatus.StatusCode<>0 Then


В скрипте не в том месте стоит вывод Location, его нужно поместить после вывода имени компьютера. А так все работает.
Автор: Oldster
Дата сообщения: 16.04.2007 13:31
coolpunk

Цитата:
мне нужно моментально удалить пути...

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

Цитата:
Как именно удалить пути - лично я пока не догнал.


Цитата:

[HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles]
"D:\\Bases\\MainDB\\"=-

gap5

Цитата:
Если батник под юзером запускать, то получается он увидит при входе черное окошко... так ведь?

ну не совсем так
если в политиках отключить это - то не будет ничего "моргать"

Добавлено:
еще про моргание черного окна: курим гугл на предмет cmdow.exe (не сильно спасает, но при больших cmd - помогает)
Автор: gap5
Дата сообщения: 16.04.2007 13:38
Oldster
Тогда уж проще через vbs запускать
Автор: Oldster
Дата сообщения: 16.04.2007 14:16
gap5
хозяин - барин, я предложил свой способ (короткий и простой).
Автор: Infected Switch
Дата сообщения: 16.04.2007 14:35
Oldster

Цитата:
[HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles]
"D:\\Bases\\MainDB\\"=-

Чета не пашет =\
Автор: Oldster
Дата сообщения: 16.04.2007 15:09
Infected Switch
сделай импорт из своего реестра, должно быть нечто:

Цитата:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles]
"D:\\Bases\\MainDB\\"="Главная база"


а потом измени его на

Цитата:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles]
"D:\\Bases\\MainDB\\"=-

и запусти. Проверяй правильность работы в самом реестре, естественно твои пути будут отличатся от моих.
Автор: gap5
Дата сообщения: 16.04.2007 16:42
Накидал скриптег который при логофе\логоне юзера создает на серваке папку (текущий месяц-год) в которой создает файлик и потом дописывает в его конец дату и время логона\логофа юзера на определенный комп. Запускается с параметрами off или on соответственно.
Вроде работает, подкорректируйте если где криво

on error resume next
wYYYY = DatePart("YYYY" , Now)
wMM = DatePart("M" , Now)
If Len(wMM) = 1 Then
wMM = "0" & wMM
End If
Set WshShell = CreateObject("WScript.Shell")
CompName = WshShell.ExpandEnvironmentStrings("%computername%")
UserName = WshShell.ExpandEnvironmentStrings("%username%")
Curdate = (FormatDateTime(date(),vbgeneraldate))
Curtime = (FormatDateTime(now(),vblongtime))
Dim objFSO, objFolder, objShell, objTextFile, objFile
Dim strDirectory, strFile, strText
strDirectory = "\\server\logfilez$\"
strMonthDirectory = ("AuthLog-"& wMM &"-"& wYYYY)
strFile = ("\auth-" & curdate & ".log")
strTextOFF = ("LOGOFF | " & Curdate & " at " & Curtime & " | " & Compname & " > "& username)
strTextON = ("LOGON | " & Curdate & " at " & Curtime & " | " & Compname & " < "& username)
WTODO = Wscript.Arguments.Item(0) 'cmd argument

Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strDirectory) Then
If not objFSO.FolderExists(strDirectory & strMonthDirectory) Then
Set objFolder = objFSO.CreateFolder(strDirectory & strMonthDirectory)
End if

If not objFSO.FileExists(strDirectory & strMonthDirectory & strFile) Then
Set objFile = objFSO.CreateTextFile(strDirectory & strMonthDirectory & strFile)
End If

set objFile = nothing
set objFolder = nothing
Const ForAppending = 8

Set objTextFile = objFSO.OpenTextFile _
(strDirectory & strMonthDirectory & strFile, ForAppending, True)

IF WTODO = "off" then
objTextFile.WriteLine(strTextOFF)
Else
objTextFile.WriteLine(strTextON)
End if

objTextFile.Close

End If

WScript.Quit

End If

WScript.Quit

P.S. Все бы хорошо, но придется юзерам давать доступ на запись в папку с логами, какой ни будь хитропопый юзер может узнать путь и покрошить файлики с логами. Если есть идеи как этого избежать буду признателен.
Автор: Infected Switch
Дата сообщения: 16.04.2007 16:43
Oldster
Так работает. А через logon не захотел... ща буду разбираться...
Спасибо!
Автор: SIAL
Дата сообщения: 16.04.2007 17:11
Гуру, не подскажете как осуществить поиск файла по маске на сетевой линуксовой машинке с самбой?
Такой вариант с wmi там не катит:
strDate = Date - 1
aDate = split(strDate, ".")
dtmTargetDate = aDate(2) & aDate(1) & aDate(0) & "000000.000000-000"
strComputer = "srv1"
Set colFiles = GetObject ("winmgmts:\\" & strComputer).ExecQuery _
    ("SELECT FileName,FileSize FROM CIM_DataFile WHERE " & _
    "Extension = 'gz' " & _
    "AND Path LIKE '\\Archives\\%' " & _
    "AND CreationDate >= '" & dtmTargetDate & "'")
For Each objFile in colFiles
Wscript.Echo objFile.FileName & " " & objFile.FileSize
Next

можно конечно ипользовать библиотечку WshExtra
Set WshExtra = CreateObject("WshExtra.FileQuery")
if not IsObject(WshExtra) then
msgBox "Невозможно создание объекта WshExtra." & vbCRLF & _
"Необходимо установить и зарегистрировать библиотеку WshExtra.dll" & vbCRLF & _
vbOKOnly + vbExclamation, "Вызов API"
End If

WshExtra.FileSpec = "\\srv1\Archives\*.gz"
For Each File In WshExtra
If objFSO.FileExists(File) = true Then
set objTestFile = objFSO.GetFile(File)
Wscript.Echo File & Round(objTestFile.Size / 1048576,2) & " Mb"
End If
Next

Но задача стоит по возможности избежать дополнительных библиотек
Автор: north_crow
Дата сообщения: 17.04.2007 08:16
ребята!
подскажите как пробежаться по OU Computers
и на тех компах которые в сети запустить скриптик который лежит на SYSVOL??? (короче форсировать выполнение скрипта)

вот нацарапал такой скрипт

Код:
Set objAD=getobject("LDAP://OU=TEST-COMP,DC=***,DC=***,DC=***") '
objAD.filter=array("computer")
On error resume next
For each obj in objAD
compad=right(obj.name, len(obj.name)-3) 'сдвигаем вправо на 3 символа (отрезаем CN=)

strComputer = compad
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")
Error = objWMIService.Create("\\10.28.0.2\sysvol\***\scripts\everest\everest.exe /R \\10.28.0.9\share\crow\log\$DATE\$HOSTNAME /SUM /HTML /SILENT /NOICONS /SAFEST", Null, Null, intProcessID)
Next
Автор: coolpunk
Дата сообщения: 18.04.2007 05:44
Определился, с приписанием путей не проблем нет. Нужно удалить за раз у всех, т.е. не подходит способ с прописыванием у каждого юзера. Нужет скрипт, который перебирает пользователей и удаляет эти ключи, если такое возможно. Вот с перебором и проблема.
Автор: YNY
Дата сообщения: 18.04.2007 06:19

Цитата:
Связанно это с активным обновлением компьютерного парка в конторе и как следствие, броуновским движением техники. Плюс еще и орг.заморочки (ИТ обслуживание у аутсорсера, я как служба заказчика). Посему нужен именно скрипт.

Ставьте все на терминальный сервер и пусть к нему подкл: самое быстрое решение

Добавлено:

Цитата:
ребята!
подскажите как пробежаться по OU Computers
и на тех компах которые в сети запустить скриптик который лежит на SYSVOL??? (короче форсировать выполнение скрипта)

на логон юзера в домен цепляй скрипт так меньшеписать прийдется и shell

Добавлено:

Цитата:
Infected Switch


Цитата:
При входе юзера в домен локально срабатывает logon.bat, в котором прописан 1c.reg (добавляет в реестр пути к базам 1c). Как сделать, чтобы он не срабатывал при входе юзера на терминальный сервер (т.к. там уже другие пути нужны)?

одно из решений: проверять имя компа или IP на котором папки подкл и соотв-но решать какие папки должны быть


Добавлено:
coolpunk


Цитата:
Нужно одним кликом удалить/добавить запись в реестре у КАЖДОГО юзера, к примеру путь к базе 1С. Желательно в батнике, т.к. в них хоть что-то понимаю, посоветуйте, пожалуйста.


АНАХАЙМ??? доступ на чтение и усе эсли боишся что потрут
Автор: north_crow
Дата сообщения: 18.04.2007 07:19
2 YNY
у меня висит подобный скрипт в логон!!!
но мне нужно именно пробежаться по Computers и форсировать запуск скпритпа, т.к. есть компьютеры которые очень редко перегружаются!!!
Автор: YNY
Дата сообщения: 18.04.2007 07:38

Цитата:
north_crow

Ну вообще-то если есть задача связанная с таким атрибутом как время то его лучше всего и использовать: пишется скритп кот через опред промежутки времени запускает другой, если не катит то для отлова ошибок используй msgbox или Wscript.Echo для того чтобы увидеть результаты или пиши их в файл, т.к. возможен вариант что ты запускаешь скрипт с пробегом по объектам которых еще нет или нет доступа или еще че-нить в этом духе, а обработки этого случая у тебя нет вот и выдается ошибка хотя ON ERROR RESUME NEXT как грубый вариант тебе может помочь но тогда ты не узнаешь полность весь список был обработан или нет!
P.S.
как вариант 2 есть еще кроме логона для юзера вкл/выкл для компа в политиках

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

Добавлено:
если есть Visual Studio 2007, то поставьте MSDN там есть возможность посмотреть подробно что за ошибка
Автор: north_crow
Дата сообщения: 18.04.2007 08:08
2 YNY
эверест лежит в доступном из сети месте!
как позже выяснилось - если вместо эвереста прописать например notepad.exe то он запускается на удаленных машинах, а вот запуск из сетевого ресурса не проходит.
Автор: YNY
Дата сообщения: 18.04.2007 09:07
north_crow

Цитата:
а вот запуск из сетевого ресурса не проходит.


rezult=WshShell.Run ("\\sarver\shared\...") - так у меня скрипт запускается через сеть.
(вместо ... подставьте то, что хотите запустить, я тестировал со стандартным виндовым калькулятором и все воркает)


Цитата:
эверест лежит в доступном из сети месте!

тут дело не в том, что он в доступном месте просто у вас на компе он (возможно--т.к. не упомяналось вами про это ничего) инсталлирован, т.е. зарег различные *.dll в системе, а у пользователей, при отсутствии инсталлированной проги, соотв этого нет

Добавлено:
Set WshShell = WScript.CreateObject("WScript.Shell") - обязательно до вызова WshShell.Run ()
Автор: north_crow
Дата сообщения: 18.04.2007 15:11
2 YNY

Цитата:
тут дело не в том, что он в доступном месте просто у вас на компе он (возможно--т.к. не упомяналось вами про это ничего) инсталлирован, т.е. зарег различные *.dll в системе, а у пользователей, при отсутствии инсталлированной проги, соотв этого нет

локально еверест не установлен!
через логон скрипт еверест же отрабатывает!



Добавлено:
вот пример от майкрософта

Код:
strComputer = "webserver"
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")

Error = objWMIService.Create("notepad.exe", null, null, intProcessID)

If Error = 0 Then
Wscript.Echo "Notepad was started with a process ID of " _
& intProcessID & "."
Else
Wscript.Echo "Notepad could not be started due to error " & _
Error & "."
End If
Автор: YNY
Дата сообщения: 19.04.2007 05:40

Цитата:
то в error возвращается код 2 (на MS написано что это Access denied), т.е. как понимаю нету доступа к расшареному ресурсу, т.е. нужно как то передать логин и пароль? а как?

я написал как запустить скрипт из сетевой папки:
Цитата:
rezult=WshShell.Run ("\\sarver\shared\...")
.
Если вам так уж надо все через WMI, то поставьте MSDN 2007 (локально лучше чем трафик гнать) там есть пример как подкл к удаленной системе.
Думаю доступ запрещен для выполнения (по exe правой кн и ...) для всех кроме админа, так что даём права и все должно заработать: так лучше чем трахаться с выдачей прав через WMI и паролями - надежность ниже !
Автор: AlessTO
Дата сообщения: 22.04.2007 18:50
Граждане! Есть проблема:
Требуется установить прогу (ПЕРЕсобранную) и, чтоб не париться с настройкой решено было внести изменения в реестр прямо при инсталле. Но эта <%%!Е;!!> часть настроек пишет в sID (куст типа HKU\S-1-5-21-...
Необходим код - вот основа (подогнали добрые люди)

Код: Set WshShell = CreateObject("Wscript.Shell")
Set fso = Wscript.CreateObject("Scripting.FilesystemObject")
fName = WshShell.SpecialFolders("Desktop") & "\SIDlist.txt"
Set b = fso.CreateTextFile(fName, true)


strProfileBranch = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\"
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colAccounts = objWMIService.ExecQuery _
("Select * From Win32_UserAccount")

For Each objAccount in colAccounts
    If objAccount.Name = "HelpAssistant" or objAccount.Name = "SUPPORT_388945a0" or objAccount.Name = "Администратор" or objAccount.Name = "Гость" then
    else
        b.writeline "" & objAccount.SID
    end if
Next

Function GetHomePath(strSID)
    On Error Resume Next
        GetHomePath = WshShell.ExpandEnvironmentStrings(Trim(WshShell.RegRead (strProfileBranch & strSID & "\ProfileImagePath")))
    On Error Goto 0
End Function

b.close
WshShell.Run "notepad.exe " & fName

Set fso = Nothing
set Wshshell = Nothing
Автор: Devil66
Дата сообщения: 23.04.2007 09:19
Народ, очень нужна помощь! Как получить день недели в Win2000?
Для WinXP есть класс Win32_UTCTime, но в Win2000 он выдает ошибку. Есть универсальный класс и для XP, и для вин2000?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

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


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