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

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

Автор: yazzi
Дата сообщения: 04.03.2009 14:31
И еще вопросик можно ли средствами VBS закрывать приложение корректно, а не убивать?
Автор: el_verdugo
Дата сообщения: 05.03.2009 03:26
yazzi
можно, примерно таким способом

Код: Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
Set oSelQ = oWMI.ExecQuery("SELECT ProcessID FROM Win32_Process WHERE Caption='notepad.exe'")
Set sh = CreateObject("WScript.Shell")

For Each oItem In oSelQ
PID = oItem.ProcessID
Proga = sh.AppActivate(PID)
WScript.Sleep(100)
sh.SendKeys("%{f4}")
' следующие 4 строки кода нужны для закрытия без сохранения
' в случае, если они были, иначе последует ввод текста в
' какое-либо окно или запуск чего-либо
WScript.Sleep(100)
sh.SendKeys("{RIGHT}")
WScript.Sleep(100)
sh.SendKeys("{ENTER}")
Next

Set oSelQ = Nothing
Set oWMI = Nothing
Set sh = Nothing
Автор: graydevil
Дата сообщения: 05.03.2009 07:44
Господа, а как переименовать текущего залогиненого юзера, хочу получить такой cmd -

1. переименовываем текущего в "myuser"
2. net user "myuser" "pass" /add /passwordchg:no /passwordreq:yes
Автор: EnMan
Дата сообщения: 05.03.2009 08:03
Приветствую присутствующих. В общем была такая собственно нетривиальная (как мне казалось) задача. Раздать пользователям домена файл обмена личной информацией (сертификат). Т.е. импортировать его в личное хранилище сертификатов. Для работы скрипта, выполняющего импорт нужна зарегистрированная в системе библиотека capicom.dll. Было в муках сваяно следующее:

Код: Set objShell = WScript.CreateObject("WScript.Shell")

USERPROFILE = objShell.ExpandEnvironmentStrings("%USERPROFILE%" & "\")

strResult = copyFiles("\\dc\Cert\capicom.dll", USERPROFILE ,"True")
strResult = copyFiles("\\dc\Cert\CStore.vbs", USERPROFILE ,"True")
strResult = copyFiles("\\dc\Cert\Managers\client.p12", USERPROFILE ,"True")
strResult = copyFiles("\\dc\Cert\ImportCert.cmd", USERPROFILE ,"True")

'MsgBox ("regsvr32.exe /s """&USERPROFILE&"CAPICOM.dll""")
objShell.Run "regsvr32.exe /s """&USERPROFILE&"CAPICOM.dll"""

'MsgBox ( """"&USERPROFILE&"ImportCert.cmd""" )
objShell.Run """"&USERPROFILE&"ImportCert.cmd"""

Function copyFiles(strSrc,strDst,strOverwriteExisting)
' Const OverwriteExisting = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile strSrc , strDst , strOverwriteExisting
End Function
Автор: graydevil
Дата сообщения: 05.03.2009 09:23
Помогите решить проблему, есть команда

control userpasswords2

где выбираем юзера для автологина, вводим пароль...

Можно реализовать все эти опрации из коммандной строки,
вот юзер, вот пароль, ему сделать автовход.
Автор: yazzi
Дата сообщения: 05.03.2009 13:01
el_verdugo
Не особо работает. Закрывает текущее окно, если нет такого то выключает комп. Мне надо закрыть Outlook, а он висит в трее .
Еще идеи

Добавлено:
Возник еще один вопросик

Код:
intRes = objReg.EnumKey(HKEY_CURRENT_USER, strKey, sNames)
If intRes <> 0 Then
WScript.Echo intRes & ": не удалось прочитать подразделы ""HKEY_CURRENT_USER\" & strKey & """"
end if
Автор: el_verdugo
Дата сообщения: 06.03.2009 04:01
yazzi
Если он висит в трее, то скриптом его вряд ли закрыть правильно... имхо только убить...
можно проверить, в трее он или нет, и в зависимости от этого выполнять какие-либо действия... просто чуть-чуть изменить код

Код: Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
Set oSelQ = oWMI.ExecQuery("SELECT ProcessID FROM Win32_Process WHERE Caption='notepad.exe'")

' проверка количества процессов и выход, если 0
If oSelQ.Count = 0 Then WScript.Quit

Set sh = CreateObject("WScript.Shell")

For Each oItem In oSelQ
PID = oItem.ProcessID
Proga = sh.AppActivate(PID)
If Proga Then ' выполняем действия, если окно активировалось (не в трее)
WScript.Sleep(100)
sh.SendKeys("%{F4}")
Else ' приложение в трее, убиваем (или еще чего делаем...)
oItem.Terminate
End If
Next
Автор: YNY
Дата сообщения: 06.03.2009 05:55

Цитата:
yazzi WScript.Echo intRes

вообще-то строка открывается и закрывается [ " ] проверяй количество кавычек
пример: "any word" & "any word"


Добавлено:

Цитата:
graydevil

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

Добавлено:

Цитата:
EnMan

если в полном имени файла есть пробелы, то либо это место, либо все должно быть в кавычках кроме *.dll и усе у вас запашет

Добавлено:
и мона пользователей сделать опытными и они сами смогут (эслив не обшибаюсь) сами установить сертификат
Автор: graydevil
Дата сообщения: 06.03.2009 06:50
el_verdugo

Забыл /add убрать.

Еще стороняя тулза так делает -

chcp 1251
renuser %USERNAME% "newuser"

Добавлено:
А можно ли с батника vbs скрипт пускать?

типа идет батник
.
.
.
кусок vbs скрипта


Или надо код в батнике копировать в vbs файл ( как это сделать?) и вызывать его потом?
Автор: YNY
Дата сообщения: 06.03.2009 08:41

Цитата:
graydevil

Цитата:
А можно ли с батника vbs скрипт пускать?

Цитата:
graydevil

а мож тебе шапку по внимательней почитать???
Автор: yazzi
Дата сообщения: 06.03.2009 08:41
el_verdugo
Спасибо. Придется убивать
YNY
Да это понятно. Что это за ошибки при чтении регистра под номерами 1 и 2.
Автор: YNY
Дата сообщения: 06.03.2009 08:48
весь скрипт в тэге MORE приведи пжалста для начала

Добавлено:

Цитата:
yazzi ошибки при чтении регистра


[more=пример чтения из реестра блин]
The following VBScript example shows how to use the EnumKey method to enumerate the services listed as subkeys in the registry key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

You can save the script as a file with a .vbs extension and send the output to a file by executing the command line in the folder that contains the script:
cscript Filename.vbs > output.txt


const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\"&_
strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Services"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
WScript.Echo "Subkeys under " _
& "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services"
For Each subkey In arrSubKeys
WScript.Echo subkey
Next


In scripting or Visual Basic, the method returns an integer that is 0 (zero) if successful. If the function fails, the return value is a nonzero error code that you can look up in WbemErrorEnum - переменная.

[/more]
Автор: yazzi
Дата сообщения: 06.03.2009 13:32
YNY

Цитата:

In scripting or Visual Basic, the method returns an integer that is 0 (zero) if successful. If the function fails, the return value is a nonzero error code that you can look up in WbemErrorEnum

вот мне возвращает 1 и 2 на разных удаленных компьютерах.Как я понял их можно посмотреть в объекте WbemErrorEnum, но как это сделать.
Автор: EnMan
Дата сообщения: 07.03.2009 20:53
Ребята, нет ни у кого скрипта, котрый бы посчитал кол-во перезагрузок энного хоста за энный промежуток времени? Нигде не могу найти. А предыдущий опыть написания скрипта был несколько неудачен
Автор: el_verdugo
Дата сообщения: 11.03.2009 07:36
EnMan

Цитата:
Ребята, нет ни у кого скрипта, котрый бы посчитал кол-во перезагрузок энного хоста за энный промежуток времени? Нигде не могу найти.

Хоста - локального компьютера(компьютера домена)? Если да, то ставь скрипт на выключение компьютера(в политиках присутствует) и пиши куда-нибудь в лог дату/время(имя компа, если надо), а потом другим скриптом обрабатывай инфу...
Автор: klimusu
Дата сообщения: 11.03.2009 08:07
Создал скрипт для выключение компьютеров

shutdown -s -m \\192.168.1.1 -t 300 -c "Shutdown"
shutdown -s -m \\192.168.1.2 -t 300 -c "Shutdown"
shutdown -s -m \\192.168.1.3 -t 300 -c "Shutdown"

Можно как-то дать возможность отменить выключение компьютера, если пользователь работает за этим компьютером?

Хочется после выполнения скрипта отправить письмо, в котором список выключенных компьютеров. Т.е. разделить те, которые уже были выключены и остальные.
Автор: el_verdugo
Дата сообщения: 11.03.2009 08:12
klimusu

Цитата:
Можно как-то дать возможность отменить выключение компьютера, если пользователь работает за этим компьютером?

Можно с помощью команды
Код: shutdown -a
Автор: trobadore
Дата сообщения: 11.03.2009 11:18
всем привет. Вопрос таков, есть машина в домене, входит в домен нормально, входит ко всем машинам и серверам по сети.Через некоторое время, теряет "доверие" и ее перестают пускать на машины по всей сети, требуют логин и пароль.Как лечить?
Автор: Real Root
Дата сообщения: 11.03.2009 11:33
el_verdugo

Цитата:
Можно с помощью команды

Код: shutdown -a

, только комп работать после этого практически не будет...
Автор: klimusu
Дата сообщения: 11.03.2009 18:46

Цитата:
shutdown -a


заставить всех пользователей выучить эту команду? есть проще способ, может как-то можно сделать кнопку "отмена" !?
Автор: Vby
Дата сообщения: 11.03.2009 23:43
klimusu

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

ярлык на рабочий стол или батник
Автор: el_verdugo
Дата сообщения: 12.03.2009 05:16
Real Root

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

Дело в том, что винда после команды shutdown уже инициирует выгрузку себя, иначе говоря, частично себя выгружает из памяти, и работа после команды
Код: shutdown -a
Автор: graydevil
Дата сообщения: 12.03.2009 09:27
Развертывание Windows...

Такая мысль пришла для автоматизации установки,

1. Ставим винды, получаем ip через DHCP сервер.

2. Пускаем скрипт пишуший юзер пасс и прочее..

Вопрос можно ли через DHCP сервер, сказать выполнить для этой станции
с таким-то ip такой-то батник, т.е. опция в DHCP может есть хитрая...

Или может есть решение попроще, типа прописать в установку виндов батник,
получаем ип, пускаем с сервака батник, который по текущему ип пропишет все настройки...
Автор: el_verdugo
Дата сообщения: 13.03.2009 02:35
graydevil

Цитата:
Развертывание Windows...

Такая мысль пришла для автоматизации установки,

1. Ставим винды, получаем ip через DHCP сервер.

2. Пускаем скрипт пишуший юзер пасс и прочее..

Вопрос можно ли через DHCP сервер, сказать выполнить для этой станции
с таким-то ip такой-то батник, т.е. опция в DHCP может есть хитрая...

Или может есть решение попроще, типа прописать в установку виндов батник,
получаем ип, пускаем с сервака батник, который по текущему ип пропишет все настройки...

Обрабатывай скрипт при подключении клиента. В реестре клиента создай собственный ключ/параметр и читай его. После переустановки винды параметр будет отсутствовать, а после внесения настроек ты его запишешь...
Автор: ShafMAN
Дата сообщения: 15.03.2009 10:27
Как прочитать заголовок (title) запущенной программы?
Автор: el_verdugo
Дата сообщения: 16.03.2009 03:02
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
Автор: gbcfkf
Дата сообщения: 19.03.2009 08:18
День добрый
Такая ситуация:
Есть vbs скрипт, цикл, который пробегается по компам из списка.
Для каждого компьютера выполняю:


Код:
Set grp = GetObject("WinNT://" & strNextLine & "/" & groupName & ",group")
Автор: YNY
Дата сообщения: 19.03.2009 08:51

Цитата:
gbcfkf

попробуй
просто игнорировать ошибку
On Error Resume Next
или поматреть че за
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear ' Clear the error.



Добавлено:
ну раздели свой скрипт на 2:
в 1 работает цикл по компам
внутри цикла запускай 2 скрипт
т.о. у тя запустится неск экземпляров 2 срипта и тебе не надо будет ждать чего-то чтоб продолжить дальше, т.к. каждый 2 скрипт будет работать тока со своим компом, правда общая производительность компа могет сильно снизится, но тут ты сам смотри )
Автор: gbcfkf
Дата сообщения: 19.03.2009 09:34
YNY
Хм.. да, можно попробовать.. правда в этом случае запустится целая куча экземпляров.. Надо потестировать это дело
Благодарю за идею )
Автор: YNY
Дата сообщения: 19.03.2009 09:39
ну если компов много, то мона в скрипте 1 в цикле смотреть процедурой/функцией скоко уже процессов WScript работает и не плодить новые пока их число не будет нах в допустимых пределах )

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

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


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