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

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

Автор: YNY
Дата сообщения: 08.04.2008 04:53

Цитата:
Roman_Mejtes

из MSDN:

Function ReadAllFromAny(oExec)

If Not oExec.StdOut.AtEndOfStream Then
ReadAllFromAny = oExec.StdOut.ReadAll
    
    Exit Function
End If

If Not oExec.StdErr.AtEndOfStream Then
ReadAllFromAny = "STDERR: " + oExec.StdErr.ReadAll
    
    Exit Function
End If

ReadAllFromAny = -1
End Function

Dim allInput, tryCount

allInput = ""
tryCount = 0

Do While True

Dim input
input = ReadAllFromAny(oExec)

If -1 = input Then
If tryCount > 10 And oExec.Status = 1 Then
Exit Do
End If
tryCount = tryCount + 1
WScript.Sleep 100
Else
allInput = allInput & input
    
tryCount = 0
End If
Loop
только потом еще гемор с перекодировкой из дос прийдется ....
Автор: Oldster
Дата сообщения: 08.04.2008 07:47
ssnvit

Цитата:
1) как определять время входа пользователя в домен - дата, часы минуты секунды
2) как определять время выхода пользователя из домена - дата часы минуты секунды

я делаю так:
в груповых политиках на логон и логофф прописываю вот такой батник:

Цитата:

SET data_time=%date:~0,2%.%date:~3,2%.%date:~6,4% - %time:~0,2%.%time:~3,2%.%time:~6,2%
echo %data_time% - logON %username% at %computername%>>\\server01\log$\logons.log

если хочешь узнать время логона в AD - то это практически не реально (если я не путаю, то в 2000 этого нет вообще), особенно если стоит 2 контроллера домена. Вот мой скрипт, он показывает то, что есть в AD, но там инфа не всегда правильная.
[more=сохрани файл Find_User.wsf]<job id="Example">
    <runtime>
        <description>
Имя: multilang.wsf
Кодировка: Windows
Описание: Использование функции InputBox в JScript-сценарии
        </description>
    </runtime>
    <script language="VBScript">
Function InputName ' Описываем функцию на языке VBScript
' Вводим имя в диалоговом окне
InputName = InputBox("Введите логин юзера:", "Окно ввода")
End Function

Function GetString (ar())
GetString = ar(0)
End Function

Function GetData (arg())

'    Set objUser = GetObject("LDAP://cn="& arg & ", cn=Users, dc=my_domain, dc=ru")
    Set objUser = GetObject("LDAP://server1/cn="& arg & ", cn=Users, dc=my_domain, dc=ru")
    Set objLastLogon = objUser.Get("lastLogon")

    Set objUser2 = GetObject("LDAP://server2/cn="& arg & ", cn=Users, dc=my_domain, dc=ru")
    Set objLastLogon2 = objUser2.Get("lastLogon")
    
    
    intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart
    intLastLogonTime2 = objLastLogon2.HighPart * (2^32) + objLastLogon2.LowPart
    
    If (intLastLogonTime2 < intLastLogonTime) Then
        intLastLogonTime = intLastLogonTime / (60 * 10000000)
        intLastLogonTime = intLastLogonTime / 1440
    Else
        intLastLogonTime = intLastLogonTime2 / (60 * 10000000)
        intLastLogonTime = intLastLogonTime / 1440
    End If
    
    GetData = intLastLogonTime + #1/1/1601#

End Function
    </script>
    <script language="JScript">
var name, temp, E, str;
var objConnection, objCommand, objCommand, objRecordSet; //Для юзеров

var FullName,
TelNumber,
login,
whenCreated,
whenChanged,
description,
office,
lastLogon,logonCount,
EMail;

name = new String (InputName()); //Вызываем функцию InputName
name = name.toLowerCase();


objConnection = WScript.CreateObject("ADODB.Connection");
objConnection.Open("Provider=ADsDSOObject;");
objCommand = WScript.CreateObject("ADODB.Command");
objCommand.ActiveConnection = objConnection
objCommand.CommandText ="SELECT lastLogonTimestamp,logonCount,cn,sAMAccountName,userAccountControl,mail,telephoneNumber,physicalDeliveryOfficeName,whenCreated,whenChanged,description FROM 'LDAP://dc=my_domain,dc=ru' WHERE objectCategory='user'";

objRecordSet = objCommand.Execute;

temp = 0;

var intLastLogonTime;

while (!objRecordSet.EOF){
//Логин
login = new String (objRecordSet.Fields("sAMAccountName"));
login = login.toLowerCase();

if (login == name){
FullName = String (objRecordSet.Fields("cn"));
TelNumber = String(objRecordSet.Fields("telephoneNumber"));
EMail = String (objRecordSet.Fields("mail"));
whenCreated = new Date (objRecordSet.Fields("whenCreated"));
whenChanged = new Date (objRecordSet.Fields("whenChanged"));
createTimeStamp = objRecordSet.Fields("userAccountControl").Value;
description = new VBArray(objRecordSet.Fields("description").Value).toArray();
office = String (objRecordSet.Fields("physicalDeliveryOfficeName"));
logonCount = String (objRecordSet.Fields("logonCount"));
lastLogon = new Date (GetData(FullName));

temp = 1;
break;
}

objRecordSet.MoveNext;
}

objConnection.Close;

if (temp == 0) WScript.Echo("Юзер не найден");
else {
    s = "Пользователь найден:\n" + login + " - " + FullName;
if (createTimeStamp & 2) s += " (User - Disabled)\n";
else s += " (User - Enabled)\n";

    s += "Телефон: " + TelNumber + "\n";
    s += "Офис: " + office + "\n";
    s += "Почта: " + EMail + "\n";
    s += "Создан: " + whenCreated.toLocaleDateString() + " ("+whenCreated.toLocaleTimeString()+")" + "\n";
    s += "Изменен: " + whenChanged.toLocaleDateString() + " ("+whenChanged.toLocaleTimeString()+")" + "\n";
    s += "Кол-во входов: " + logonCount + "\n";
    s += "Последний вход: " + lastLogon.toLocaleDateString() + " ("+lastLogon.toLocaleTimeString()+")" + "\n";
//    s += "Последний вход: " + lastLogon.toLocaleDateString() + " ("+(lastLogon.getHours()+1)+":"+lastLogon.getMinutes()+":"+lastLogon.getSeconds()+")" + "\n";
    s += "Описание: " + description + "\n";
    
WScript.Echo(s);
}
    </script>
</job>
[/more]

Добавлено:
по последнему скрипту - его надо изменять под тебя, я дал свой вариант. Если будут вопросы - спрашивай
Автор: YNY
Дата сообщения: 08.04.2008 10:09

Цитата:
alexio

Dim WshShell, oExec
nf="любой диск\любая папка\a\b\*.exe"
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec(nf)
(либо Run)

Добавлено:

Цитата:
ssnvit

поищи скрипт, есть в винде, для чтения EventLog-а там мона и дату выцепить, читать надо журнал безопасности, если конечно у тебя ведется аудит логонов

Добавлено:
http://support.microsoft.com/kb/814595

Добавлено:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" &

strComputer & "\root\cimv2")

Set colLoggedEvents = objWMIService.ExecQuery ("Select * from Win32_NTLogEvent " &

"Where Logfile = 'Security'")


For Each objEvent in colLoggedEvents
Wscript.Echo "Category: " & objEvent.Category
Wscript.Echo "Computer Name: " & objEvent.ComputerName
Wscript.Echo "Event Code: " & objEvent.EventCode
Wscript.Echo "Message: " & objEvent.Message
Wscript.Echo "Record Number: " & objEvent.RecordNumber
Wscript.Echo "Source Name: " & objEvent.SourceName
Wscript.Echo "Time Written: " & objEvent.TimeWritten
Wscript.Echo "Event Type: " & objEvent.Type
Wscript.Echo "User: " & objEvent.User
Next
Автор: ssnvit
Дата сообщения: 09.04.2008 11:59
Oldster

Цитата:
[/q]
[q]я делаю так:
в груповых политиках на логон и логофф прописываю вот такой батник:


временно остановился на этом варианте. Единственное, что перепишу наверное батник на скрипт. А вот по последнему вопросу, есть ли где флаг (признак) блокировки сеанса пользователя (компьютера)?
Автор: YNY
Дата сообщения: 10.04.2008 11:12

Цитата:
ssnvit

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

Автор: ssnvit
Дата сообщения: 10.04.2008 15:20
YNY

Цитата:
[/q]
[q]блокировку сеанса пользователя в домене -- не понял о чем речь, если об общих ресурсах, то ранеее есть примеры,


Все гораздо проще - пользователь может заблокировать свой сеанс нажав комбинацию ctrl-alt-del + Блокировка либо в групповых политиках выставлено например после 30 минут бездействия включить скринсейвер с выходм по паролю. Так вот надо определить существует ли в операционке какие-либо признаки (флаги) о данной ситуации, чтобы уже затем вывести в лог.
Автор: Stranger2000
Дата сообщения: 14.04.2008 04:10
А не подскажете скрипт, который при входе пользователя в терминальную сессию, переназначал бы ему переменные %tmp% и %temp% теминального сеанса на пути, указанные мной?
Автор: YNY
Дата сообщения: 14.04.2008 04:40

Цитата:
ssnvit

Если тебе надо смотреть когда пользователь заблокировал свой сеанс, то используй скрипт для чтения событий в журнале безопасности ID=528 точную справку ищи в микрософт)
Автор: ShafMAN
Дата сообщения: 14.04.2008 05:40
Подскажите плиз, если кто сталкивался со следующим:
Скрипт используя IExplorer заходит по указанному адресу, но по тому адресу всплывает окно броузера с запросом о подтверждении сертификата. Сертификат я установил, но это окно всё равно вылазит. Как можно это обойти? Что бы скрипт самостоятельно ходил на сайт без стороннего вмешательства.
Автор: YNY
Дата сообщения: 14.04.2008 07:33

Цитата:
ShafMAN

если ты уст сертификат и без вопросов попадаешь, набир адр и не видишь вопросов, то и скрипт должен ( по идее )
Автор: ShafMAN
Дата сообщения: 14.04.2008 07:51
YNY
Если и без скрипта набираю адрес, то окно всё-равно появляется.

Может через объектную модель броузера по событию как-нить можно управлять этим окном?
Автор: mozers
Дата сообщения: 14.04.2008 14:11
ShafMAN
Если сертификат - корневой, то скрипт работать будет. Если IE6 то - точно. (Еще помойму в настройках обозревателя все галки типа "проверять анулирование..." снимал).
Если - нет, то - нефига (во всяком случае у меня не получилось).
На крайняк есть вариант грузить страницу cURL-ом...
Автор: YNY
Дата сообщения: 16.04.2008 11:23

Цитата:
ShafMAN

тыб написал че грит тебе, т.к. обычно после уст сертификата никаких окон не вылазит если только:
1 -- сертификат не канает
2 -- надо добавлять узел в список доверенных узлов
Автор: ShafMAN
Дата сообщения: 17.04.2008 16:46
YNY
Стандартное окно "предупреждение системы безопасности", там всякая фигня про сертификан написана и три кнопки: "Да" "Нет" "Просмотр сертификата". Сертификан я устанавливал как "доверенный корневой", окно бы это и не вылазило наверное если бы он установился туда, но он не установился.
Автор: Roman_Mejtes
Дата сообщения: 24.04.2008 08:55

Код:
Dim mConnection
Set mConnection = CreateObject("ADODB.Connection")
mConnection.Open "Provider=SQLOLEDB.1;Data Source=server;Initial Catalog=database", "****", "****"
mConnection.Execute "INSERT INTO tblMain (fldGUID, fldHostName, fldDescription, fldComment, fldDefinition) VALUES ('" & GUID & "', '" & hostname & "', '" & Desc & "', '" & Comment & "', '" & Defin & "')"
Set mConnection = Nothing
Автор: Integer27h
Дата сообщения: 24.04.2008 13:41
Привет всем.
Подскажите как с помощью провайдера WinNT:// узнать, является ли компьютер членом определенной группы безопасности в домене?
Автор: aleksanchez
Дата сообщения: 24.04.2008 14:09
Roman_Mejtes
А разве нельзя снова выполнить запрос по тем данным которые ты вводишь, например,

Код: Select id from tblMain where fldGUID=GUID
Автор: YURETS777
Дата сообщения: 24.04.2008 14:34
Как при помощи VB-скрипта получить список установленного ПО на станции а так же список всех хотфиксов.
Автор: Integer27h
Дата сообщения: 28.04.2008 10:45
Вопрос.
Написал Logon скрипт. Назначается через групповые политики "User".

Но иногда возникает ошибка:
Не найден сетевой путь. Код: 80070035.
Указывает на строчку:

Set objgpunl = GetObject("WinNT://" & domain & "/" & gpu_nologon & ",group")

Причем не какой закономерности - бывает и при включении ПК и логоне, или при завершении сеанса и новом логоне пользователя.

Связь с доменом 100Mb. Проблем с сетью никаких.
Переменные domain, gpu_nologon статичные не изменяются.

Может это особенности провайдера "WinNT://",таймаут?


Все разобрался. Проблема была с DNS.

Добавлено:
Вопрос.
Опять же Logon скрипт.
Домен. Состоит из 5 контроллеров домена.

Как можно выяснить на какой из контроллеров домена логинится пользователь?


Нашел:

Set WSHShell = CreateObject("Wscript.Shell")
Set WSHProcess = WSHShell.Environment("Process")
'Determine logon server
DomainLogonServer = WSHProcess("LogonServer")
'Note: Results below will be \\Server
WScript.Echo "Login server is:"& DomainLogonServer
Автор: coolpunk
Дата сообщения: 29.04.2008 07:20
В скриптах не рублю, прошу помочь. К удаленным филиалам появился доступ. Чтобы удаленно установить что-то, надо не пустой пароль администратора, чего скорее всего нет. Пользователи работают под учеткой с полными правами, домена нет. Думаю, возможно передать скриптик, запустив который, изменит пароль встроенной учетки администратора и установит нужный софт, например, Remote Office Manager, дальше уже проще будет. Если ещё что-то обязательно для удаленной устновки, подскажите, естественно скриптом;) Жду любой помощи, спасибо.
Автор: coolpunk
Дата сообщения: 29.04.2008 09:27
А разве можно установить, если машина не в домене? Я уже начал сомневаться... тогда и смысла нет устанавливать пароль на встроенную учетку... Остается только "ручная" установка типа:
copy *.*...
ROMServer.exe /silentinstall
regedit.exe /s settings.reg
Больше никак?
Автор: YNY
Дата сообщения: 30.04.2008 08:42

Цитата:
YURETS777

ищи (ранее был) скрипт который читает из реестра ветку uninstall
Автор: YURETS777
Дата сообщения: 30.04.2008 14:22
Как вытянуть ветку реестра я знаю, с этим проблем нет, но в таком виде:


Код:
REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AddressBook]
@=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Flash Player Plugin]
"DisplayName"="Adobe Flash Player Plugin"
"DisplayVersion"="9.0.45.0"
"Publisher"="Adobe Systems Incorporated"
"URLInfoAbout"="http://www.adobe.com/go/getflashplayer"
"DisplayIcon"="C:\\WINNT\\system32\\Macromed\\Flash\\uninstall_plugin.exe"
"UninstallString"="C:\\WINNT\\system32\\Macromed\\Flash\\uninstall_plugin.exe"
"NoModify"=dword:00000001
"NoRepair"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Branding]
"QuietUninstallString"="Rundll32 IedkCS32.dll,BrandCleanInstallStubs"
"RequiresIESysFile"="100.0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Connection Manager]
"SystemComponent"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\DirectAnimation]
@=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\DirectDrawEx]
@=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\DXM_Runtime]
@=""

Автор: YNY
Дата сообщения: 04.05.2008 10:08

Цитата:
Как вытянуть ветку реестра я знаю

т.е. это так выглядит вывод результата скриптом (таким как отрывок ниже)?
___

strComputer = "."
Set StdOut = WScript.StdOut
Set oReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" &strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
strValueName = "DisplayVersion"
oReg.GetStringValue ,strKeyPath,strValueName,sValue
Автор: aChikatillo
Дата сообщения: 05.05.2008 17:02
Помогите плиз со скриптом:
Завершение существующих терминальных сессий пользователей перед архивированием
'================================================================================
WriteTextFiles VbCrLf & Now & " Завершение cуществующих терминальных сессий" & VbCrLf, strLogFile
WshShell.Run "%comspec% /u /c chcp 1251 & quser >>" & strLogFile, 0, True
WriteTextFiles VbCrLf, strLogFile
WshShell.Run "%comspec% /u /c chcp 1251 & for /f ""eol=; tokens=1 skip=2"" %i in ('quser') do qprocess %i >>" & strLogFile, 0, True
WshShell.Run "%comspec% /u /c chcp 1251 & for /f ""eol=; tokens=2 skip=1"" %i in ('quser') do if /i not ""%i""==""console"" logoff %i /v >>" & strLogFile, 0, True

WriteTextFiles VbCrLf & Now & " Проверка наличия незавершившихся терминальных сессий" & VbCrLf, strLogFile
WshShell.Run "%comspec% /u /c chcp 1251 & quser >>" & strLogFile, 0, True
WriteTextFiles VbCrLf, strLogFile

Мне нужно что бы происходило завершение всех сессий кроме одной "определенной", что нужно править в данносм скрипте?
Автор: YURETS777
Дата сообщения: 06.05.2008 08:47
YNY

Этот скрипт ничего не выводит.




Цитата:
strComputer = "."
Set StdOut = WScript.StdOut
Set oReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" &strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
strValueName = "DisplayVersion"
oReg.GetStringValue ,strKeyPath,strValueName,sValue

Автор: Bugriy
Дата сообщения: 06.05.2008 11:20
Кто-нибудь решал задачу автоматизации запроса помощи пользователем через Удалённого помощника (remote assistance)?
Хочу написать скрипт, который будет запускать remote assistance, сам вводить е-мейл службы поддержки, пароль, и прочую информацию.
Проблема в том, что, насколько я понял, wsh может слать кнопки только активному окну, значит если юзер в процессе заполнения скриптом форм уведёт фокус в другое окно, то скрипт собьётся.
Автор: mozers
Дата сообщения: 06.05.2008 16:49

Добавил в шапку ссылочку на CHM версию Учебного курса "Программирование для администраторов"
Критика по оформлению не принимается - влом было править изуродованные Word-ом html-ки с ихнего сайта.
Автор: Vetkol
Дата сообщения: 06.05.2008 17:26
Есть сетка, WPA персональный, шлюз Compex G27, кажется, но не суть важна модель, до того стоял d-link Dl-524, но тупил дико (ОЧЕНЬ МЕДЛЕННЫЕ соединения даже по локалке, а уж про открытие яндекса за 3 минуты и то неполностью - я вообще молчу), временно заменили, до приобретения Netgear, наверное.
Три ноута Acer, на всех Wi-Fi сетевухи Intel. Один из них с Vista, два с ХРенью. Насчёт апдейтов на Хренях - не уверен, что всё одинаково, да и сетевухи у ХРеновых разные.
Проблема такая - 1 Вистовый и 1 ХРеновый не хотят после перезагрузки переконнект делать к сетке, а Виста, к тому же, лезет в явно неразрешённые к подключению сети. При этом, Хреновый с таким же адаптером как у Висты, нормально вполне работает себе.
Также иногда сетка просто отваливается и обратно уже не встаёт нормально, соответственно.

Решается всё удалением контроллера в диспетчере устройств, обновлении списка, установкой заново контроллера автоматической, и вводом пароля сети.
При перевводе пароля сети без удаления контроллера ничего не происходит, как не хотел переподключаться - так и не хочет.

ЗЫ: есть ещё два компа с PCI-ными сетевухами д-линк, не знаю на каких чипах, но навряд ли интел. С ними всё в полном порядке. Также сеть прекрасно держат iMac и AirBook
Виста без SP1 глючила абсолютно также.

Скрипт для ручного удаления сетевухи, подключения заново, автоматического ввода пароля и подтверждения - это реально? Я только бат-ами умею, к сожалению, и то, наверняка, далеко не всё, а ими, кажется, это сделать нереально.

Если кто-то может подсказать другие методы решения проблемы, кроме выкидывания цраных асеров - буду очень рад увидеть решения.
Автор: Cyril Konst
Дата сообщения: 06.05.2008 18:04
Есть сложная задача.
При подключении через терминал автоматом создаётся клиентский принтер. При отключении от терминала, он автоматом удаляется.
Нужно программку, которая отслеживает создание принтера и назначает права доступа к нему.
Можно на Си через Win32 API, можно ещё как-нибудь.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

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


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