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

» Автоматизация администрирования

Автор: kastilio
Дата сообщения: 10.08.2005 08:03

Цитата:
Нужно проверить станции в сетке, какая стоит ОС, и в зависимости от этого запустить на них sp4w2k.exe, если w2k или sp1xp.exe, если xp.

А не проще ли использовать WSUS?
Автор: FormatM
Дата сообщения: 10.08.2005 11:07
AlexSSS
В Explorer есть такая фича как скрыть расшаренный диск, в ScriptLogic нужно отметить галочку Hiden, отсюда и вопрос как это сделать средствами VBS?
Автор: AlexSSS
Дата сообщения: 10.08.2005 12:48
спасибо, понял. Сам раньше никогда не пользовался. Сейчас проверил - TweakUI именно скрывает диск в эксплорере, при этом переход на, напр, T: работает (хотя диск скрыт)
Поищу, это должно делаться достаточно просто
Автор: Ge0rge
Дата сообщения: 10.08.2005 14:18
Люди!!!
Использую exec.vbs из Resource Kit'a, но на удаленных машинах все программы запускаются в виде неинтерактивных процессов, которые не делают то что нужно! В чем может быть проблема?
Автор: urel
Дата сообщения: 12.08.2005 13:45

Цитата:
В Explorer есть такая фича как скрыть расшаренный диск, в ScriptLogic нужно отметить галочку Hiden, отсюда и вопрос как это сделать средствами VBS?


в реестре
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NODRIVES

Последние 26 бит определяют буквы дисков от A до Z. Диск виден при установленном 0 и скрыт если установлена 1.

Диск A представлен последней правой цифрой при двоичном представлении.

например 00000000000000000000010101(0x7h)

Здесь скрыты диски A, C, и E

Диски скрытые таким образом (с помощью NODRIVES) не доступны из Explorer, окна My Computer и диалоговых окон File Open\Save 32bit Windows приложенй. На File Manager и командную строку эти установки не влияют.

Но диски остаются видны из тоталкомандера и ему подобных.
Автор: AlexSSS
Дата сообщения: 12.08.2005 14:43
Ge0rge
попробуй PsExec из PsTools
www.sysinternals.com
запускает процесс на удаленной машине, один из ее ключей как раз отвечает за то, чтобы интерфейс выводился на экран удаленной машины
Автор: FreemanRU
Дата сообщения: 22.08.2005 15:40
[more=Скрипт, позволяющий посмотреть ключ (CD-KEY) от XP или 2003]
GetXPKey.js

Код:
var WshShell = WScript.CreateObject("WScript.Shell");
var bTempKey = VBArray(WshShell.RegRead("HKLM\\SOFTWARE\\MICROSOFT\\Windows NT\\CurrentVersion\\DigitalProductId"));
var bKey = new Array
bKey = bTempKey.toArray();

var KeyBase = new Array('B', 'C', 'D', 'F', 'G', 'H', 'J','K', 'M', 'P', 'Q', 'R', 'T', 'V', 'W', 'X', 'Y', '2', '3', '4', '6', '7', '8', '9');
var dLen = 29;
var sLen = 15;
var Dst = new Array(dLen);
var StartOffset = 0x34;
var EndOffset = 0x34 + 15
var Src = new Array(15);

for (var i = StartOffset; i<=EndOffset; i++)
{
Src[i-StartOffset] = bKey[i]
}
for (var i = dLen - 1; i>=0; i--)
{
if (((i + 1) % 6) == 0)
{
Dst[i] = '-';
}
else
{
var HN = 0;
for (var n = sLen - 1; n>=0; n--)
{
var Value = (HN << 8) | Src[n];
Src[n] = Value / 24;
HN = Value % 24;
}
Dst[i] = KeyBase[HN];
}
}
var str = "";
for (i = 0; i<=dLen-1; i++)
{
str += Dst[i];
}

WScript.Echo(str)

// (c) FreemanRU. ru-board
Автор: AlexSSS
Дата сообщения: 23.08.2005 08:23
FreemanRU, спасибо за скрипт, пока использовали внешние утилиты для доставания SN, но засунуть все в логон скрипты - это будет здорово
Автор: FreemanRU
Дата сообщения: 23.08.2005 12:59
Вот и я наступил на грабли различий между 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
Автор: AlexSSS
Дата сообщения: 23.08.2005 15:15
а ты не пробовал в качестве битовых операций использовать обычный AND или OR?
не помню, где именно, на VBS или VBA, но это работало

коственно на это указывает и
http://mavweb.net/javascript_and_vbscript_operators.asp
правда сдвига вроде нет все равно
Автор: FreemanRU
Дата сообщения: 23.08.2005 15:32
AlexSSS

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

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


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

пробовал. не то. возращает 1 или 0. Что логично
Автор: AlexSSS
Дата сообщения: 23.08.2005 16:06
set WshShell = WScript.CreateObject("WScript.Shell")
a="101"
b="011"
str = a or b
WScript.Echo(str)

возвращает точно не 0 или 1 ;o)
Автор: FreemanRU
Дата сообщения: 23.08.2005 16:07
AlexSSS

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

Это ж строковй тип.. а у мне числа нужны... причем даже не целые..
Автор: AlexSSS
Дата сообщения: 23.08.2005 16:16
ты будешь смеяться, но если убрать кавычки (присвоить переменным цифровые значения), результат не изменится ;o)
Автор: FreemanRU
Дата сообщения: 23.08.2005 16:25
AlexSSS
дествительно. Но факт остается фактом - не работало в VBS вот эта часть:

Код:
for (var n = sLen - 1; n>=0; n--)
{
var Value = (HN << 8) | Src[n];
Src[n] = Value / 24;
HN = Value % 24;
}
Автор: AlexSSS
Дата сообщения: 24.08.2005 08:11
вспомнил, где использовал побитовый AND
скрипт на VBS достает данные по пользователям из ADSI. Заблокирован пользователь или нет, иожно узнать по второму биту в userAccountControl. Соответственно код выглядит примерно так
IF сobjUser.userAccountControl And 2...
Автор: GTHack
Дата сообщения: 24.08.2005 10:33
Господ и дамы, помогите плс скрипт написать который мне выдаст список всем компов в домене следующего содержания
IP компа - Сетевое имя
Автор: FreemanRU
Дата сообщения: 24.08.2005 10:42
GTHack

[more=Список компов с IP, VBS]
Список компов с IP

Код:
Const ADS_SCOPE_SUBTREE = 2
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=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
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
strIp=""
strComputer = objRecordSet.Fields("Name").Value
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colAdapters = objWMIService.ExecQuery _
("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objAdapter in colAdapters
If Not IsNull(objAdapter.IPAddress) Then
For i = 0 To UBound(objAdapter.IPAddress)
strIp = strIp & " " & objAdapter.IPAddress(i)
Next
End If
Next

Wscript.Echo strIP " - " & objRecordSet.Fields("Name").Value

objRecordSet.MoveNext
Loop
Автор: AlexSSS
Дата сообщения: 24.08.2005 11:57
GTHack
FreemanRU привел работающий скрипт. Единственное, что я рекомендую делать для для подобных скриптов (получение какого-то списка) своего же удобства - засовывать подобные скрипты в эксель (visual basic editor) и запускать оттуда, выводя данные на экселевский лист - тогда у тебя получается нормальный список

Экселевский VBA практически полностью совместим с VBS, поэтому никаких изменений в коде делать не надо. За исключением вывода ;o)
Автор: FreemanRU
Дата сообщения: 24.08.2005 12:13
AlexSSS

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

Или делать вывод в файл .csv. РАзделители обычно в таком случае - ";"
Автор: AlexSSS
Дата сообщения: 24.08.2005 12:59
в эселешном (или другом) visual basic editor-е удобнее отладка, чем просто в текстовом файле. Впрочем, это уже дело вкуса
Автор: distance
Дата сообщения: 24.08.2005 15:07
FreemanRU

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

неправда


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

можно пример такого запроса, а то у меня сильное подозрение что см. выше
Автор: FreemanRU
Дата сообщения: 24.08.2005 20:14
distance

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

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


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

что именно? ЧТо Microsoft придерживается VBS? Ну найди в TechNET хоть один пример для JS.
Автор: distance
Дата сообщения: 24.08.2005 21:17
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();
}
Автор: Smitis
Дата сообщения: 24.08.2005 23:47
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")
Автор: GTHack
Дата сообщения: 25.08.2005 05:50
как добавить проверку на включенность компьютера в vbs ?
как запустиь вышеприведенный js скрипт ? (запуск файла с расширением js ничего не дал)
Автор: FreemanRU
Дата сообщения: 25.08.2005 14:53
distance
Smitis
респект
По свободе отредактирую пост.


Цитата:
по поводу точки с запятой

а вот тут что-то странное, т.к. у меня постоянно ругался на ";"
Да и лучше его ставить. Лишним не будет.


Цитата:
иногда можно не соблюдать!

именно что иногда. Лучше всегда соблюдать. Ибо это исключение.

GTHack

Цитата:
как добавить проверку на включенность компьютера в vbs ?

добавить в начало
on error resume next
тогда просто не будут обрабатывать недоступные компы.
Автор: GTHack
Дата сообщения: 26.08.2005 11:16
в общем из-за winmgmts очень тяжело скрипт идёт (кстати это что за служба такая?)
и не все IP определяет, вот думаю скриптом можно как нить не у конкретной машинки, а у сервера спрашивать IP назначенный определенному компьютеру.
Автор: distance
Дата сообщения: 26.08.2005 14:24
GTHack

Цитата:
в общем из-за winmgmts очень тяжело скрипт идёт

попробуй сначала определить что комп в дауне чем-нибудь полегче, например так:

Код:
var ENABLE_SAMPLE = false;

function CheckHostInLocalNetwork(sHost)
{
this.socket = WScript.CreateObject("MSWinsock.Winsock", "CheckHostInLocalNetwork_Event_");
this.socket.Protocol = 0; // TCP
this.socket.RemoteHost = sHost;
this.socket.RemotePort = 139; // netbios-ssn

// socket states
this.sckClosed = 0;

this.Check = function(timeout)
{
if (timeout == undefined) // set default timeout
timeout = 3000;

// cleanup
CheckHostInLocalNetwork.success = false;
CheckHostInLocalNetwork.errorCode = 0;
if (this.socket.State != this.sckClosed)
this.socket.Close();

// try connect...
this.socket.Connect();
timeout *= 10;
while(!CheckHostInLocalNetwork.success && !CheckHostInLocalNetwork.errorCode && timeout > 0)
{
WScript.Sleep(100);
timeout -= 100;
}

return (CheckHostInLocalNetwork.success && !CheckHostInLocalNetwork.errorCode);
}
}


function CheckHostInLocalNetwork_Event_Error(Number, Description, Scode)
{
CheckHostInLocalNetwork.errorCode = Number;
}

function CheckHostInLocalNetwork_Event_Connect()
{
CheckHostInLocalNetwork.success = true;
}

function CheckHostInLocalNetwork_Event_Close()
{
}


if (ENABLE_SAMPLE)
{
var host = "myhost";
var chk = new CheckHostInLocalNetwork(host);
WScript.Echo("host: " + host + " = " + (chk.Check(1000) ? "present" : "not present"));
WScript.Quit(0);
}

Автор: Rol155
Дата сообщения: 05.09.2005 07:51
Доброго времени суток всем!
У меня возник вопрос. Он обсуждался уже но касался vbs а нужно на js.
Задача в том чтобы удалить файлы старше сегодняшней даты на 4 дня.
В vbs работает функция DateDiff а если что нибудь подобное в js?

Заранее благодарю

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Зеркалирование дисков Win2000


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