Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Автоматизация администрирования. Часть 2

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

ShriEkeR (23-05-2011 23:06): Автоматизация администрирования. Часть 3  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

   

FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
 

                               Коллеги-администраторы  ....  


Часть 2я

Часть 1
Думаю каждый из вас сталкивался с необходимостью выполнять некие несложные рутинные операции, на котороые уходит много драгоценного времени.
 Например, создать определенную структуру каталогов для каждого пользователя домена, изменить некие параметры в профилях всех или части пользователей, изменить полномочия/владельца однотипных файлов в разных каталогах т.д.  
Я, как сисадмин, тоже не раз был вынужден делать все это.  Руками делать это тоскливо и муторно, как вы понимаете. Должен заметить, что по неким "религиозным" убеждениям я всегда старался избегать любых отношений с бейсиком и его производными. Еще мой отец учил меня не иметь с ним никаких дел. Буквально. А теперь я учу своего сына тому же. Но, тем не менее, полностью избежать этого, по всей видимости, невозможно, тем более, что бейсик от M$ сейчас уже далеко не та "лапша", которой он был изначально, а современный структурированный язык, нашедший множество применений. Похоже, что для меня в очередной раз настала пора выучить еще что-то. Знаете, как курильщик много раз безуспешно пытается бросить курить, так и я не раз пытался подступиться к изучению VBScript, но пока никак не одолел. Лень, знаете ли. А инструмент в делах административных был бы весьма пользительный, должен заметить, для быстрого написания всякого рода скриптов.

 
    Внимание   !  !  !  

  • Поскольку данный топ весьма не мал, не забывайте  использовать "версию для печати" для более удобного поиска по теме. А также МЕГА ПОИСКОВИК от NEPa

  • Дабы не раздувать топ,  примеры своих  скриптов  заключаем в тег  "more"

Консольные команды. Командный интерпретатор

Windows Script Host (WSH) &  VBScript  &  JScript


Вышеперечисленные буки можно  взять здесь

    ТOOLS :
  1. Autoit+readme.rus
  2. Scriptologic
  3. AutoMate
  4. KIXTART
  5. nnCron-Планировщик с поддержкой скриптового языка --  РЕКОМЕНДУЮ
  6. WGET, GREP, GETMAIL, BLAT for Windows замечательные консольные утилиты
  7. 4dos/4nt -- отличная замена стандартного коммандного интерпретатора  
  8. JudoScript - java подобный скриптовый язык с исходниками
  9. VBS2EXE - утилита для компиляции vbs и js скриптов в exe выдранная из пакета PrimalScript

    Дружественные темы :
  1. Автоматическая (unattended) установка Windows
  2. Интересные команды при работе с Linux
  3. Отличный сайт по скриптингу, и не только
  4. Использование KIX
  5. Использование WMI
  6. Программирование "удобняшек" на VBScript

 
Подробнее...
Создается по материалам данного топа

 
Надеюсь данная тема будет полезна для Вас.
 Предложения по реформированию шапки принимаю в ПМ Jovanotti

 

Всего записей: 3795 | Зарегистр. 16-07-2004 | Отправлено: 17:27 11-12-2006 | Исправлено: Smitis, 12:30 20-08-2008
Vby



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
klimusu

Цитата:
может как-то можно сделать кнопку "отмена"

ярлык на рабочий стол или батник

Всего записей: 781 | Зарегистр. 16-09-2004 | Отправлено: 23:43 11-03-2009
el_verdugo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Real Root

Цитата:
Нормально все будет работать, это штатная отмена штатного действия. А вот если вы svchost грохните, то winlogon инициализирует shutdown -r - и во тогда отмена возможна, но как после этого будет комп работать уже не известно.

Дело в том, что винда после команды shutdown уже инициирует выгрузку себя, иначе говоря, частично себя выгружает из памяти, и работа после команды
Код:
shutdown -a
это уже не работа, если вы хоть раз работали после этой команды... проще перезагрузить комп...
вопрос (уже klimusu) в том, с какой целью выключается компьютер удаленно?

Всего записей: 121 | Зарегистр. 10-02-2006 | Отправлено: 05:16 12-03-2009
graydevil



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Развертывание Windows...
 
 Такая мысль пришла для автоматизации установки,  
 
1. Ставим винды, получаем ip через DHCP сервер.  
 
2. Пускаем скрипт пишуший юзер пасс и прочее..
 
Вопрос можно ли через DHCP сервер,  сказать выполнить для этой станции
с таким-то ip такой-то батник, т.е. опция в DHCP может есть хитрая...
 
Или может есть решение попроще, типа прописать в установку виндов батник,  
получаем ип, пускаем с сервака батник, который по текущему ип пропишет все настройки...
 

Всего записей: 59 | Зарегистр. 14-04-2006 | Отправлено: 09:27 12-03-2009
el_verdugo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
graydevil

Цитата:
Развертывание Windows...  
   
 Такая мысль пришла для автоматизации установки,  
 
1. Ставим винды, получаем ip через DHCP сервер.  
 
2. Пускаем скрипт пишуший юзер пасс и прочее..  
 
Вопрос можно ли через DHCP сервер,  сказать выполнить для этой станции  
с таким-то ip такой-то батник, т.е. опция в DHCP может есть хитрая...  
 
Или может есть решение попроще, типа прописать в установку виндов батник,  
получаем ип, пускаем с сервака батник, который по текущему ип пропишет все настройки...  

Обрабатывай скрипт при подключении клиента. В реестре клиента создай собственный ключ/параметр и читай его. После переустановки винды параметр будет отсутствовать, а после внесения настроек ты его запишешь...

Всего записей: 121 | Зарегистр. 10-02-2006 | Отправлено: 02:35 13-03-2009
ShafMAN

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как прочитать заголовок (title) запущенной программы?

Всего записей: 125 | Зарегистр. 09-01-2005 | Отправлено: 10:27 15-03-2009
el_verdugo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShafMAN

Цитата:
Как прочитать заголовок (title) запущенной программы?

Примерно так

Код:
Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
'Для выборки использовать одну из двух нижних строк
Set oSelQ = oWMI.InstancesOf("Win32_Process")
'Set oSelQ = oWMI.ExecQuery("Select Caption FROM Win32_Process")
 
For Each oItem In oSelQ
'здесь всавляй проверку заголовка вместо вывода всех заголовков на экран
WScript.Echo oItem.Caption
Next
 
Set oSelQ = Nothing
Set oWMI = Nothing

Всего записей: 121 | Зарегистр. 10-02-2006 | Отправлено: 03:02 16-03-2009
gbcfkf



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
День добрый
Такая ситуация:
Есть vbs скрипт, цикл, который пробегается по компам из списка.
Для каждого компьютера выполняю:
 

Код:
 
Set grp = GetObject("WinNT://" & strNextLine & "/" & groupName & ",group")  

, где  strNextLine это имя очередного компьютера.
Проблема в том, что как только цикл натыкается на выключенный компьютер вылазит сообщение об ошибке "заданный компьютер недоступен"
и, самое главное, прекращается выполнение всего скрипта.
 
Как избежать остановки скрипта? ну недоступен комп и хрен с ним.. как продолжить работу со следующим?
 
update
Нашел
On Error Resume Next
и обработка ошибок
If Err.Number<>0 Then
помогли
Правда недоступные компьютеры сильно тормозят выполнение скрипта. Пока выяснится, что комп недоступен состариться можно

Всего записей: 702 | Зарегистр. 17-10-2006 | Отправлено: 08:18 19-03-2009 | Исправлено: gbcfkf, 09:10 19-03-2009
YNY

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
gbcfkf

попробуй
просто игнорировать ошибку
On Error Resume Next  
или поматреть че за
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear    ' Clear the error.
 
 
 
Добавлено:
ну раздели свой скрипт на 2:
в 1 работает цикл по компам
 внутри цикла запускай 2 скрипт
т.о. у тя запустится неск экземпляров 2 срипта и тебе не надо будет ждать чего-то чтоб продолжить дальше, т.к. каждый 2 скрипт будет работать тока со своим компом, правда общая производительность компа могет сильно снизится, но тут ты сам смотри )

Всего записей: 476 | Зарегистр. 18-05-2006 | Отправлено: 08:51 19-03-2009
gbcfkf



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YNY
Хм.. да, можно попробовать.. правда в этом случае запустится целая куча экземпляров.. Надо потестировать это дело
Благодарю за идею )

Всего записей: 702 | Зарегистр. 17-10-2006 | Отправлено: 09:34 19-03-2009
YNY

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну если компов много, то мона в скрипте 1 в цикле смотреть процедурой/функцией скоко уже процессов WScript работает и не плодить новые пока их число не будет нах в допустимых пределах )

Всего записей: 476 | Зарегистр. 18-05-2006 | Отправлено: 09:39 19-03-2009 | Исправлено: YNY, 12:54 19-03-2009
AXVill



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gbcfkf
Можешь проверять компы в цикле на предмет "жив не жив" тем же пингом.

Всего записей: 320 | Зарегистр. 22-09-2005 | Отправлено: 17:22 19-03-2009
foeticide

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Такая задача:
Скриптом разлогинить локального юзера и заблокировать или отключить его учетную запись.

Всего записей: 92 | Зарегистр. 22-04-2002 | Отправлено: 18:03 25-03-2009 | Исправлено: foeticide, 18:06 25-03-2009
YNY

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
foeticide

просмотрр аккаунтов

Всего записей: 476 | Зарегистр. 18-05-2006 | Отправлено: 11:50 26-03-2009
el_verdugo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gbcfkf
Делаешь список компов, скриптом пингуешь по списку - создаешь новый список, после чего обрабатываешь полученный список. имхо самый быстрый вариант...
 
foeticide
Чтобы разлогинить юзера можно использовать wmi: класс Win32_OperatingSystem, метод Win32Shutdown, параметр Flags = 0;
пример:

Код:
wmic /node:@"c:\complist.txt" /FAILFAST:ON  Path "Win32_OperatingSystem.Locale='0409' OR Locale='0419'" CALL Win32Shutdown 0 /NoInteractive

 
0 - LogOff
6 - Перезагрузка
12 - Выключение
PS ping быстрее чем FailFast

Всего записей: 121 | Зарегистр. 10-02-2006 | Отправлено: 02:43 27-03-2009
YNY

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
foeticide

Цитата:
отключить его учетную запись.

strComputer = "."
Set objUser = GetObject("WinNT://" & strComputer & "/Guest")
 
objUser.AccountDisabled = True
objUser.SetInfo
 
 
Добавлено:
Supported Platforms
 
Windows Server 2003  Yes
 
Windows XP  Yes
 
Windows 2000  Yes
 
Windows NT 4.0  Yes
   
Windows 98  No
 

Всего записей: 476 | Зарегистр. 18-05-2006 | Отправлено: 06:03 27-03-2009
DiZka



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите доработать скриптик напильником.
Скрипт удаляет файлы старше N Дней....
 

Код:
 
' ----------
' Начало основной секции. Отсюда начнется выполнение при запуске скрипта.
Set FSO = CreateObject("Scripting.FileSystemObject")
' директория, где будут храниться бэкапы.
sDir = "E:\Backup\Srvexchmain_Acronics"
Set objDir = GetFolder(sDir)
DeleteOlderFiles(objDir)
 
' ---------- Секция функций
 
' Получить файл
Function GetFile(sFile)
On Error Resume Next
 
Set FSO = CreateObject("Scripting.FileSystemObject")
Set GetFile = FSO.GetFile(sFile)
if err.number <> 0 then
WScript.Echo "Error Opening file " & sFile & VBlf & "["&Err.Description&"]"
Wscript.Quit Err.number
end if
End Function
 
' Получить папку
Function GetFolder (sFolder)
On Error Resume Next
 
Set GetFolder = FSO.GetFolder(sFolder)
if err.number <> 0 then
WScript.Echo "Error Opening folder " & sFolder & VBlf & "["&Err.Description&"]"
Wscript.Quit Err.number
end if
End Function
 
' удалить один файл (имя файла передается в sFile)
Sub DeleteFile(sFile)
On Error Resume Next
 
FSO.DeleteFile sFile, True
if err.number <> 0 then
WScript.Echo "Error Deleteing file " & sFile & VBlf & "["&Err.Description&"]"
Wscript.Quit Err.number
end if
End Sub
 
' Удалить файлы старше N дней
Sub DeleteOlderFiles(objDir)
    ' просматриваем все файлы в директории
for each efile in objDir.Files
' используем DateLastModified, а не DateCreated, поскольку
' DateCreated не всегда возвращает правильную дату
FileDate = efile.DateLastModified
Age = DateDiff("d",Now,FileDate)
' в данном случае возраст файла не больше N дней
If Abs(Age)>2 Then
DeleteFile(efile)
End If
next
End Sub
 

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

Всего записей: 374 | Зарегистр. 16-08-2005 | Отправлено: 13:47 03-04-2009 | Исправлено: DiZka, 13:48 03-04-2009
YNY

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
DiZka

нет никакова смысла по 100 раз генерить Set FSO = CreateObject("Scripting.FileSystemObject")
Если ты знаешь имена файлов, то попроуй так:
 
'до запуска процедуры/функции удаления  
 
dim ArrFN=array("FN1","FN2","FN2")
numF=0
for  i=0 to 2  
numF=numF+GetFile(ArrFN(i))
next
if numF=3 then
'понеслось твое удаление
end if
 
Добавлено:
Лучше свои функции не называть так же как называются внутренние ф-ции VBScript, иначе мог быть касяки
 
Добавлено:
обычно в конце функции ее имени присваивается (нужный) результат ее работы, иначе конструкции типа numF=numF+GetFile(ArrFN(i)) работать не будут!!!
 
Добавлено:
используя свою конструкцию for each efile in objDir.Files (перед началом удалений) и счетчик находишь число файлов и если все ок, то удаляешь

Всего записей: 476 | Зарегистр. 18-05-2006 | Отправлено: 13:42 06-04-2009 | Исправлено: YNY, 14:06 06-04-2009
DiZka



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YNY
Скрипт не мой да и в скриптописании я не силен )
Имена файлов я знаю... но там в имени файла генерится дата.... File_name(date).tib
 
Можешь подправить скрипт сам?

Всего записей: 374 | Зарегистр. 16-08-2005 | Отправлено: 13:51 09-04-2009 | Исправлено: DiZka, 13:53 09-04-2009
YNY

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
DiZka

по скоку как я понял тебя интересует количество файлов в папке то тогда вот так:
 
Function MapWorkFolder(NFtoMp)
    KolFilesInMpF=0
 for each efile in NFtoMp.Files
     KolFilesInMpF=KolFilesInMpF+1
 next    
'msgbox  "В рабочей папке содержится" & KolFilesInMpF & "файлов"
MapWorkFolder=KolFilesInMpF
end Function
 
' Удалить файлы старше N дней  
SUB DeleteOlderFiles(objDir)  
    ' просматриваем все файлы в директории
if MapWorkFolder(objDir)<> 3 then  
' если файлов, например не 3, то выходим из процедуры DeleteOlderFiles  
  exit sub
else
'- *** тут твое удаление
for each efile in objDir.Files  
' используем DateLastModified, а не DateCreated, поскольку  
' DateCreated не всегда возвращает правильную дату  
FileDate = efile.DateLastModified  
Age = DateDiff("d",Now,FileDate)  
' в данном случае возраст файла не больше N дней  
If Abs(Age)>2 Then  
DeleteFile(efile)  
End If  
next
'- ***  
end if
End SUB

Всего записей: 476 | Зарегистр. 18-05-2006 | Отправлено: 08:04 10-04-2009
Laki7a



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ есть такая задача:
 
Все файлы, время ДОСТУПА (последнее обращение, открыие) к которым, старше хх.хх.хххх, переместить в папку yyyy, сохраняя все пути?
 
ПРИМЕР:
Входные данные:
Файл                            Время доступа
d:\folder1\file1              09.04.2009
d:\folder1\file2              01.01.2009
d:\folder1\folder2\file3   09.04.2009
d:\folder1\folder2\file4   01.01.2009
 
 
Выходные данные( условие время доступа больше 3 месяцев):
Файл                                   Время доступа
d:\yyy\folder1\file2               01.01.2009
d:\yyy\folder1\folder2\file4    01.01.2009
 
d:\folder1\file1              09.04.2009
d:\folder1\folder2\file3   09.04.2009
 
 
Если есть возможность перед перемещением ОЦЕНИТЬ РАЗМЕР перемещаемых данных (если это будет переноситься на другой или сетевой диск)?

Всего записей: 146 | Зарегистр. 08-08-2005 | Отправлено: 08:20 10-04-2009 | Исправлено: Laki7a, 08:22 10-04-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Автоматизация администрирования. Часть 2
ShriEkeR (23-05-2011 23:06): Автоматизация администрирования. Часть 3


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru