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

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

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

emx (13-12-2006 21:07): http://forum.ru-board.com/topic.cgi?forum=8&topic=19088#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

ooptimum



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

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


Часть 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 подобный скриптовый язык с исходниками

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

 
>>HOW -  TO:
Создается по материалам данного топа

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

 

Всего записей: 2898 | Зарегистр. 30-05-2002 | Отправлено: 08:55 13-12-2002 | Исправлено: FreemanRU, 17:29 11-12-2006
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Скрипт, позволяющий посмотреть ключ (CD-KEY) от XP или 2003
 
После небольшой переделки позволяет также смотреть ключи Office XP и 2003.
Ключ в реестре:
HKLM\SOFTWARE\MICROSOFT\Office\XX.0\Registration\'GUID'\DigitalProductId
где:
 XX - 10 для Office XP или 11 для Office 2003
 'GUID' - индетификатор продукта. Чтобы узнать все ключи, надо делть enumerate
 
Узнать имя продукта можно из HKLM\SOFTWARE\MICROSOFT\Office\XX.0\Registration\'GUID'\ProductName
 
Принимаются предложения.
 
PS В VBScript похоже реализовать это нельзя, т.к. в нем нет функции "битовое OR"
Если кто знает, как можно реализовать "битовое OR" в VBScript - напишите. Буду очень признателен.


----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3799 | Зарегистр. 16-07-2004 | Отправлено: 16:40 22-08-2005 | Исправлено: FreemanRU, 17:01 22-08-2005
AlexSSS

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FreemanRU, спасибо за скрипт, пока использовали внешние утилиты для доставания SN, но засунуть все в логон скрипты - это будет здорово

Всего записей: 747 | Зарегистр. 26-06-2004 | Отправлено: 09:23 23-08-2005
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот и я наступил на грабли различий между VBScript (далее VBS) и Jscript (далее JS). Первый, как понятно, имеет в своей основе Visual Basic, а соотвественно крайне скудный запас типов данных. В основном используется Variant, т.е. общий тип данных. Jscript основан на Java, который в свою очередь основан на C. Это дает более гибкий инструмент для манипуляции различными типами данных, но при этом теряется удобство общих типов данных.  
Первое на что надо обратить внимание - JS чувствителен к регистру и каждая строка должна завершаться ";" (точкой с запятой)
Очень сильно отличаются массивы. В VBS маccив - это любой набор данных, тогда как в JS есть два типа массива - Array и VBArray. Первый - это массив любых данных, создается стандартными средствами:

Код:
 
var Arr1 = new Array                   //  
var Arr2 = new Array('1','2','3');    // это массив типа char
var Arr3 = new Array("1","2","3"); // это массив типа string
var Arr2 = new Array(2,2);        // это двухмерный массив 2х2
 

VBArray служит для совместимости с массивами из VBS и создается только так:

Код:
 
var Arr2 = new VBArray(VBarr1);
 

где VBarr1 - это уже заполненный массив VBarray.  
Пример использования
Что еще можно отметиь про работу с массивами - так это определение длины.
 
Также, как было отмечено выше, в VBS напрочь отсутвуют функции работы с бинарными операторами (битовое OR, AND и пр.)
 
Но проблема в том, что Microsoft выбрала основой для себя именно VBS (что вобщем-то не удивительно). Н-р все функции работы с реестром, возращаюищие массив значений работают только с VBS. Многие запросы WMI также работают только с VBS.
Вопрос - что делать. Ответ очень простой. С версии WSH (Windows Script Host) 2 поддерживаются мультизадачьнуе (multy job) файлы. Такие файлы имеют расширение .wsf и следующий общий синтаксис
 
Исходя из всего вышеизложенного удобнее писать основной текст на VBS, и использовать функции, написанные на JS.
Вот пример, показывающий все вышеизложенные способы. Данный скрипт стоит у меня как login для пользователей и записывает информацию в БД MSSQL. Коментарии отсутвуют, но думаю и так все понятно. Если не понятно - спрашивайте в топике.
Пример скрипта
 


----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3799 | Зарегистр. 16-07-2004 | Отправлено: 13:59 23-08-2005 | Исправлено: FreemanRU, 14:02 23-08-2005
AlexSSS

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а ты не пробовал в качестве битовых операций использовать обычный AND или OR?
не помню, где именно, на VBS или VBA, но это работало
 
коственно на это указывает и
http://mavweb.net/javascript_and_vbscript_operators.asp
правда сдвига вроде нет все равно

Всего записей: 747 | Зарегистр. 26-06-2004 | Отправлено: 16:15 23-08-2005 | Исправлено: AlexSSS, 16:29 23-08-2005
FreemanRU



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

Цитата:
не легче ли из VBS вызвать js c параметром и получить ответ  

я так и сделал. см. выше.
 

Цитата:
а ты не пробовал в качестве битовых операций использовать обычный AND или OR?

пробовал. не то. возращает 1 или 0. Что логично

----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3799 | Зарегистр. 16-07-2004 | Отправлено: 16:32 23-08-2005
AlexSSS

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
set WshShell = WScript.CreateObject("WScript.Shell")
a="101"
b="011"
str = a or b
WScript.Echo(str)
 
возвращает точно не 0 или 1 ;o)

Всего записей: 747 | Зарегистр. 26-06-2004 | Отправлено: 17:06 23-08-2005
FreemanRU



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

Цитата:
a="101"  
b="011"  

Это ж строковй тип.. а у мне числа нужны... причем даже не целые..  


----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3799 | Зарегистр. 16-07-2004 | Отправлено: 17:07 23-08-2005
AlexSSS

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ты будешь смеяться, но если убрать кавычки (присвоить переменным цифровые значения), результат не изменится ;o)

Всего записей: 747 | Зарегистр. 26-06-2004 | Отправлено: 17:16 23-08-2005
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
AlexSSS
дествительно. Но факт остается фактом - не работало в VBS вот эта часть:

Код:
 
for (var n = sLen - 1; n>=0; n--)  
{  
var Value = (HN << 8) | Src[n];  
Src[n] = Value / 24;  
HN = Value % 24;  
}  
 

А сдвиг реализуется просто.
влево:
val = val * (2^bit)
вправо
val = val / (2^bit)


----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3799 | Зарегистр. 16-07-2004 | Отправлено: 17:25 23-08-2005
AlexSSS

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вспомнил, где использовал побитовый AND
скрипт на VBS достает данные по пользователям из ADSI. Заблокирован пользователь или нет, иожно узнать по второму биту в userAccountControl. Соответственно код выглядит примерно так
IF сobjUser.userAccountControl And 2...

Всего записей: 747 | Зарегистр. 26-06-2004 | Отправлено: 09:11 24-08-2005
GTHack



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Господ и дамы, помогите плс скрипт написать который мне выдаст список всем компов в домене следующего содержания
IP компа - Сетевое имя

Всего записей: 560 | Зарегистр. 03-03-2003 | Отправлено: 11:33 24-08-2005
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
GTHack
 
Список компов с IP, VBS
Тока запускать лучше из командной строки.
cscript name_of_file.vbs

----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3799 | Зарегистр. 16-07-2004 | Отправлено: 11:42 24-08-2005
AlexSSS

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GTHack
FreemanRU привел работающий скрипт. Единственное, что я рекомендую делать для для подобных скриптов (получение какого-то списка) своего же удобства - засовывать подобные скрипты в эксель (visual basic editor) и запускать оттуда, выводя данные на экселевский лист - тогда у тебя получается нормальный список
 
Экселевский VBA практически полностью совместим с VBS, поэтому никаких изменений в коде делать не надо. За исключением вывода ;o)

Всего записей: 747 | Зарегистр. 26-06-2004 | Отправлено: 12:57 24-08-2005
FreemanRU



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

Цитата:
своего же удобства

Или делать вывод в файл .csv. РАзделители обычно в таком случае - ";"

----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3799 | Зарегистр. 16-07-2004 | Отправлено: 13:13 24-08-2005
AlexSSS

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в эселешном (или другом) visual basic editor-е удобнее отладка, чем просто в текстовом файле. Впрочем, это уже дело вкуса

Всего записей: 747 | Зарегистр. 26-06-2004 | Отправлено: 13:59 24-08-2005 | Исправлено: AlexSSS, 16:10 24-08-2005
distance

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

Цитата:
Но проблема в том, что Microsoft выбрала основой для себя именно VBS (что вобщем-то не удивительно). Н-р все функции работы с реестром, возращаюищие массив значений работают только с VBS.

неправда
 

Цитата:
Многие запросы WMI также работают только с VBS.

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

Всего записей: 878 | Зарегистр. 28-03-2004 | Отправлено: 16:07 24-08-2005
FreemanRU



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

Цитата:
можно пример такого запроса, а то у меня сильное подозрение что см. выше

Предлагаю портировать в  JS скрипт, предложенный мною для GTHack.
Также предлагаю портировать любой скрипт, который работает с реестром через WMI (bc[исходник на VBS есть в Script Repository).
Если у тебя это получиться - честь тебе и хвала, и я уберу эти строки.
 

Цитата:
неправда

что именно? ЧТо Microsoft придерживается VBS? Ну найди в TechNET хоть один пример для JS.

----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3799 | Зарегистр. 16-07-2004 | Отправлено: 21:14 24-08-2005
distance

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FreemanRU
Хы. Да пожалуйста
Лови. Потратил минут 15, из них 5 нинут исправлял синтаскис vbs на js, 5 минут разбирался что такое IPAddress, и 5 минул на отлов и исправление твоих ошибок (несовпадающий регистр переменных - это кстати тоже из-за чего я не люблю vbs, т.к. он допускает подобную неряшливость в действиях программиста)
Также исправил один недостаток в оригинальном скрипте - если комп выключен, то скрипт вылетал
Второй недостаток - то что скрипт ломится, в WMI под текущим аккаунтом, и если ты - не доменный админ, то  можешь расслабиться, списка IP тебе не видать как своих ушей.
Если по уму, то необходимо имперсонизироваться, ну да ладно, для примера и так сойдет
 

Код:
 
var ADS_SCOPE_SUBTREE = 2;
var objConnection = new ActiveXObject("ADODB.Connection");
var objCommand = new ActiveXObject("ADODB.Command");
objConnection.Provider = "ADsDSOObject";
objConnection.Open("Active Directory Provider");
objCommand.ActiveConnection = objConnection;
objCommand.CommandText = "Select Name, Location from 'LDAP://DC=fabrikam,DC=com' where objectClass='computer'";
objCommand.Properties("Page Size") = 1000;
objCommand.Properties("Timeout") = 30;
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE;
objCommand.Properties("Cache Results") = false;
var objRecordSet = objCommand.Execute();
objRecordSet.MoveFirst();
 
while (!objRecordSet.EOF)
{
    var strIp = "";
    var strComputer = objRecordSet.Fields("Name").Value;
 
    try
    {
        var objWMIService = GetObject("winmgmts:\\\\" + strComputer + "\\root\\cimv2");
        var colAdapters = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True");
 
        var e = new Enumerator(colAdapters);
        for ( ; !e.atEnd(); e.moveNext())
        {
            var objAdapter = e.item();
            var ips = (new VBArray(objAdapter.IPAddress)).toArray();
            for(var i = 0; i<ips.length; i++)
                strIp = strIp + " " + ips[i];
        }
 
        WScript.Echo(strIp + " - " + strComputer);  
    }
 
    catch(err)
    {
        WScript.Echo("<< DOWN >> - " + strComputer + " [" + err.message + "]");
    }
 
    objRecordSet.MoveNext();
}
 

 

Цитата:

Цитата:
неправда
что именно?

то, что на js нельзя работать с реестром вообще, и получать бинарные данные в частности.

Всего записей: 878 | Зарегистр. 28-03-2004 | Отправлено: 22:17 24-08-2005 | Исправлено: distance, 22:22 24-08-2005
Smitis



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

Цитата:
Ну найди в TechNET хоть один пример для JS

http://www.microsoft.com/technet/scriptcenter/scripts/jscript/default.mspx
Кстати, есть ещё примеры для других языков
http://www.microsoft.com/technet/scriptcenter/scripts/language.mspx
 
И ещё, по поводу точки с запятой

Цитата:
Первое на что надо обратить внимание - JS чувствителен к регистру и каждая строка должна завершаться ";"

Во-первых, не строка, а оператор.
Во-вторых, не всегда обязательно:

Код:
 
WScript.Echo("aaaa")
WScript.Echo("bbbb")
WScript.Echo("cccc")
 

Собственно, точку с запятой можно использовать только как разделитель операторов в одной строке.
В-третьих, и регистр иногда можно не соблюдать! (В именах методов и свойств объектов). Например, тот же пример:

Код:
 
WScript.echo("aaaa")
WScript.echo("bbbb")
WScript.echo("cccc")
 

echo - в другом регистре.

Всего записей: 3771 | Зарегистр. 09-02-2003 | Отправлено: 00:47 25-08-2005 | Исправлено: Smitis, 00:53 25-08-2005
GTHack



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
как добавить проверку на включенность компьютера в vbs ?
как запустиь вышеприведенный js скрипт ? (запуск файла с расширением js ничего не дал)

Всего записей: 560 | Зарегистр. 03-03-2003 | Отправлено: 06:50 25-08-2005
   

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Автоматизация администрирования
emx (13-12-2006 21:07): http://forum.ru-board.com/topic.cgi?forum=8&topic=19088#1


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru