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

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

Автор: urel
Дата сообщения: 21.01.2007 21:56
gap5
ну, вроде того. только 1 ньюанс - свежую дату будут иметь только вновь сознанные файлы. так что смотреть наверно last access time.
думается, что проще будет просто делать ротацию каждую ночь. - для файлов не критично, а для документов должны быть другие каналы.
Автор: gap5
Дата сообщения: 21.01.2007 22:08
urel
В каком смысле другие каналы? Задача чтобы юзеры при обмене файлами между отделами не оставляли их лежать в открытом доступе надолго...

Кстати, еще вопрос по автоматизации администрирования:
Как в AD получить список последней смены пароля всеми юзерами (а еще лучше вообще количество смен, кол-во символов... в общем максимум информации)?
Автор: urel
Дата сообщения: 22.01.2007 11:44
gap5
да по почте например.
лежать мало или долго - влюбом случае они там будут лежать - кому нужно тот возьмет.
Автор: Bugriy
Дата сообщения: 24.01.2007 13:27
Можно ли в скрипте на vbs получить пути к папкам windows и program files? SpecialFolders тут не прокатывает.
Автор: Vby
Дата сообщения: 24.01.2007 14:15
Bugriy

Цитата:
program files


Код:
Const PROGRAM_FILES = &H26&
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(PROGRAM_FILES)
Set objFolderItem = objFolder.Self
Wscript.Echo objFolderItem.Path
Автор: urel
Дата сообщения: 24.01.2007 14:18
Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo WshShell.ExpandEnvironmentStrings("%WINDIR%")
WScript.Echo WshShell.ExpandEnvironmentStrings("%PROGRAMFILES%")

Автор: Bugriy
Дата сообщения: 24.01.2007 14:26
urel

Спасибо! А к системному диску?
Автор: trueempty
Дата сообщения: 24.01.2007 14:34
Уважаемые господа!
Помогите, пожалуйста с примеров решения такой задачи в виде скрипта на VBS.
Нужно "логировать" процесс обращения клиентов к серверному ресурсу. Для этого написан скрипт, который конвертирован в EXE-файл и "подставлен" вместо оригинального. Соответственно скрипт запускается на компьютере пользователя и я могу взять имя компьютера (name), имя пользователя (user).
На сетевом ресурсе создана папка \\serv\log, в которой по мере обращения пользователей должны создаваться папки, имя которых для каждого компьютера такое: name_user.
Предварительно ресурс в скрипте подключается посредством net use с правами, дающими возможность записи (проверял в режиме отладки Проводником).
Классический пример из книги Г.Борна
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set oFolder = fso.CreateFolder(path)
Работает если папка создается на локальном диске.
Получаемая ошибка выглядит так
Ошибка выполнения Microsoft VBScript: Разрешение отклонено
P.S. Пока не проверял будет ли работать если подключать ресурс через букву - но не хотелось бы, т.к. диски уже могут быть на пользовательских компьютерах "размэплены"
Автор: urel
Дата сообщения: 24.01.2007 15:53
Bugriy
этот метод позволяет получить доступ к переменным окружения
просмотреть все можно набрав в cmd - set
%SystemDrive%

Добавлено:

trueempty
Классическая нехватка прав, Сэр. =)

Добавлено:
trueempty
проверь пермишены на шаре. можешь ли ты этим пользователем создавать папки через сеть?
Автор: trueempty
Дата сообщения: 24.01.2007 17:08
To urel
Спасибо за ответ, но с правами все нормально. Проверял так
1)запустил скрипт в VisualStudio и выполнил команду net use ...
2)запустил (ПУСК->Выполнить ) \\serv\log
3)Проводником проверил, что папка создается

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

Автор: Sk1f
Дата сообщения: 24.01.2007 18:11
trueempty, запости сам скрипт.
Автор: gap5
Дата сообщения: 24.01.2007 18:52
Подскажите, как в VBS указать имя папки на "русском с пробелами" и как описать все ее содержимое (файлы и папки), т.к. в указанном варианте перемещает только файлы?

Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.MoveFile "D:\Дневной отчет" , "D:\Rotate"
Автор: urel
Дата сообщения: 24.01.2007 20:56
gap5
да почти так и будет
Код: Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.MoveFile "D:\Дневной отчет\*.*" , "D:\Rotate\"
Автор: Asker80
Дата сообщения: 25.01.2007 05:19
Народ, а кто-нить уже PowerShell'ом пользуется? Как впечатления? Я вот пару статей по нему прочитал и очень впечатлился. Буду ставить и юзать(учить) потихоньку.
Автор: trueempty
Дата сообщения: 25.01.2007 08:23
To urel
Запустить под нужной учетной записью не получится, т.к. она определена только на сервере, который недоменный - соответственно доменной аутентификации нет.
Есть предположение, что не создается папка поскольку на самом деле я брал в качестве имени комбинацию из имени_компа, имени_пользователя и даты - соответственно в дате (возвращается командой Now) есть символ ":" - что для имени папки недопустимо.
По состоянию на сейчас вроде получается - убрал часть с датой (вырежу потом без ":") и дал пользователю AuthenticatedUser все права на "шару" (закладки Security и SharePermission).
Разумеется перед созданием папки подключаюсь так

Set WshShell = WScript.CreateObject("WScript.Shell")
Code = WshShell.Run ("net use \\serv\log /u:user_name password", 0, False)


Если получится, могу написать в ПМ.
Еще раз спасибо - пока повожусь сам
P.S.
Убрал права AuthenticatedUser на закладке Security - вроде тоже создается папка.
Автор: Bugriy
Дата сообщения: 25.01.2007 09:23
Нужно застопить и удалить одну службу, а потом стереть папку где находятся файлы используемые службой. Проблема в том, что не удаётся удалить папку сразу после остановки службы. То есть со второго или третьего запуска скрипт срабатывает, а после первого папка не удаляется. Я вставил задержку 5 секунд - иногда помогает, иногда нет. Предполагаю, что надо каким-то образом дождаться остановки службы. Как это сделать?


Set colServiceList = objWMIService.ExecQuery _
("Select * from Win32_Service Where Name = 'servicename'")

For Each objService in colServiceList

objService.StopService()
objService.Delete()

objTextFile.WriteLine(compname&": Остановлена и удалена служба servicename")

Next

WScript.Sleep(5000)

F=objFSO.DeleteFolder(PFpath&"\folder",true)

if (not F) then
objTextFile.WriteLine(compname&": Успешно удалена папка "&PFpath&"\folder")
else
objTextFile.WriteLine(compname&": Ошибка при удалении папки "&PFpath&"\folder")
end if
Автор: urel
Дата сообщения: 25.01.2007 10:25
Bugriy

кто мешает поставить цикл? дотех пор пока не удалит
Автор: Bugriy
Дата сообщения: 25.01.2007 11:19
urel
Мне это тоже конечно в голову приходило, но уж очень это топорно.
Автор: urel
Дата сообщения: 25.01.2007 14:28
Bugriy
если есть большое желание - то можно подождать звершение процесса
в цикле делать запросы к wmi на предмет наличия процесса.
но так imho проще =)
Автор: Bugriy
Дата сообщения: 25.01.2007 15:56
urel
Оказывается, дело не в службах. В трее висит иконка. Я этот процесс прибиваю, но он не прибивается и держит папки. Точнее он прибивается через раз. В чём может быть дело?

Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'lcfep.exe'")

For Each objProcess in colProcessList
objProcess.Terminate()
objTextFile.WriteLine(Date()&" "&Time()&" "&compname&": Удалена из системного лотка иконка endpoint'a")
Next

Причём на некоторых компах скрипт срабатывает сразу, а на других раза со второго-третьего. Причём не смотря на то что процесс такой есть, в логах не остаётся записи. Такое впечатление что скрипт его не находит.
Автор: gap5
Дата сообщения: 25.01.2007 18:09

Цитата:
urel
да почти так и будет
Код: Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.MoveFile "D:\Дневной отчет\*.*" , "D:\Rotate\"


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

Как его заставить перемещать все содержимое папки дневной отчет, и отключить сообщения об ошибках?

Хотел это сделать через bat, но там проблема с русским именем папки...
Автор: urel
Дата сообщения: 25.01.2007 18:14
Bugriy
видать сервис кривоват - и невсегда коректно прибивает свои процессы.

Добавлено:
gap5
тогда в 2 раза усложним
Код: On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.MoveFile "D:\Дневной отчет\*.*" , "D:\Rotate\"
objFSO.MoveFolder "D:\Дневной отчет\*" , "D:\Rotate\"
Автор: gap5
Дата сообщения: 25.01.2007 19:43
Кстати, а как лучше запускать скрипты из под "Scheduled tasks"? Из под Administrator не совсем удобно, т.к. пароль меняется и придется его переписывать для каждого задания... Под NTAUTHORITY\SYSTEM винда (2003) запускать не дает.
Автор: urel
Дата сообщения: 25.01.2007 19:59
gap5
странно - должно дать, попробуй через at создать
Автор: gap5
Дата сообщения: 25.01.2007 20:32
Cannot Configure Scheduled Tasks to Use System Account
View products that this article applies to.
Article ID : 223375
Last Review : October 30, 2006
Revision : 3.1
This article was previously published under Q223375
SYMPTOMS
When you create or modify a task in the Scheduled Tasks tool to use the System account, the task does not run as scheduled.
CAUSE
This issue occurs because you cannot configure a task to use the System account using the Scheduled Tasks Wizard.

Не должно оно оказывается ничего...
С другой стороны, если вбить туда один раз правильный пароль, а потом его поменять - он будет продолжать работать или нет?
Автор: urel
Дата сообщения: 25.01.2007 21:15
gap5
имея ввиду schtasks я подразумевал возможность в целом. и сказал что это пожносделать с помощью команды AT. ex: "at 23:00 cmd"
хотя наверно ты не schtasks имел ввиду а визард...
вобщем еще один вариант
schtasks /create /?
/RU username Specifies the "run as" user account
(user context) under which the task
runs. For the system account, valid
values are "", "NT AUTHORITY\SYSTEM"
or "SYSTEM".
Автор: gap5
Дата сообщения: 28.01.2007 13:10
urel
Столкнулся с еще одной проблемой...
Скрипт перестает работать после того как находит одинаковые имена файлов, сказать бы ему Overwrite.... но

objFSO.MoveFile "D:\Дневной отчет\*.*" , "D:\Rotate\" , True

Не работает, ругается на ошибку...
А как перемещать все содержимое папки (включая подпапки) с помощью move.exe? А то файлы то он перемещает, а вот с папками только если указать имя...


Добавлено:
Еще такой вопрос - нужен скрпит для автоматического uninstall'а указанного софта, нашел вот такой, но не работает:

' These are the Names of Software I want to remove
' and as they appear in Control Panel -> Add/Remove Softyware:

Dim ArrOfProcessesToTerminate, strTargetProcToTerminate
ArrOfProcessesToTerminate = Array("iTunes","AdminScriptEditor TRIAL
EDITION","Clipomatic")

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

For Each strTargetProcToTerminate In ArrOfProcessesToTerminate
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Product Where Name = '" &
strTargetProcToTerminate & "'")

For Each oProcess in colProcessList
wscript.popup "oProcess: " & ThisOne _
Chr(13) & "oProcess.InstallDate: " & oProcess.InstallDate _
Chr(13) & "oProcess.InstallLocation: " &
oProcess.InstallLocation _
Chr(13) & "oProcess.Name: " & oProcess.Name _
Chr(13) & "oProcess.Description: " & oProcess.Description
oProcess.Uninstall()

Next 'For Each oProcess In colProcesses

Next 'For Each strTargetProc In arrTargetProcs

Есть идеи почему?
Автор: mistx
Дата сообщения: 28.01.2007 19:01
Подскажите, пожалуйста скрипт
для одновременного отключения компов в домене.

Заранее благодарю.
Автор: Sk1f
Дата сообщения: 29.01.2007 08:36
mistx Самый простой и работоспособный способ
Создаешь групповую политику и приделываешь к ней скрипт.
Скрипт:

Цитата:

strComputer = "."
Set objWMIService = GetObject_
("winmgmts:{impersonationLevel=impersonate,(Shutdown)}\\" & _
strComputer & "\root\cimv2")

Set colOperating Systems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystems
objOperatingSystem.Win32Shutdown(1)
Next

Автор: SamsungC095
Дата сообщения: 29.01.2007 09:08
Привет всем! Вы когда-нибудь делали SQL базу (можно Access) для создания баз по считыванию штрих кодов? Как привязать данные, полученные с лазерников к mdb-файлам?
заранее спасибо.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

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


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