И еще вопросик можно ли средствами VBS закрывать приложение корректно, а не убивать?
» Автоматизация администрирования. Часть 2
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
можно, примерно таким способом
Код: 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
Господа, а как переименовать текущего залогиненого юзера, хочу получить такой cmd -
1. переименовываем текущего в "myuser"
2. net user "myuser" "pass" /add /passwordchg:no /passwordreq:yes
1. переименовываем текущего в "myuser"
2. net user "myuser" "pass" /add /passwordchg:no /passwordreq:yes
Приветствую присутствующих. В общем была такая собственно нетривиальная (как мне казалось) задача. Раздать пользователям домена файл обмена личной информацией (сертификат). Т.е. импортировать его в личное хранилище сертификатов. Для работы скрипта, выполняющего импорт нужна зарегистрированная в системе библиотека 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
Код: 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
Помогите решить проблему, есть команда
control userpasswords2
где выбираем юзера для автологина, вводим пароль...
Можно реализовать все эти опрации из коммандной строки,
вот юзер, вот пароль, ему сделать автовход.
control userpasswords2
где выбираем юзера для автологина, вводим пароль...
Можно реализовать все эти опрации из коммандной строки,
вот юзер, вот пароль, ему сделать автовход.
el_verdugo
Не особо работает. Закрывает текущее окно, если нет такого то выключает комп. Мне надо закрыть Outlook, а он висит в трее .
Еще идеи
Добавлено:
Возник еще один вопросик
Код:
intRes = objReg.EnumKey(HKEY_CURRENT_USER, strKey, sNames)
If intRes <> 0 Then
WScript.Echo intRes & ": не удалось прочитать подразделы ""HKEY_CURRENT_USER\" & strKey & """"
end if
Не особо работает. Закрывает текущее окно, если нет такого то выключает комп. Мне надо закрыть Outlook, а он висит в трее .
Еще идеи
Добавлено:
Возник еще один вопросик
Код:
intRes = objReg.EnumKey(HKEY_CURRENT_USER, strKey, sNames)
If intRes <> 0 Then
WScript.Echo intRes & ": не удалось прочитать подразделы ""HKEY_CURRENT_USER\" & strKey & """"
end if
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
Если он висит в трее, то скриптом его вряд ли закрыть правильно... имхо только убить...
можно проверить, в трее он или нет, и в зависимости от этого выполнять какие-либо действия... просто чуть-чуть изменить код
Код: 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
Цитата:
yazzi WScript.Echo intRes
вообще-то строка открывается и закрывается [ " ] проверяй количество кавычек
пример: "any word" & "any word"
Добавлено:
Цитата:
graydevil
из личного опыта могу сказать, что не всегда работает прямое ред реестра с приведенными ключами, надо еще вроде чего-то еще изменять )
Добавлено:
Цитата:
EnMan
если в полном имени файла есть пробелы, то либо это место, либо все должно быть в кавычках кроме *.dll и усе у вас запашет
Добавлено:
и мона пользователей сделать опытными и они сами смогут (эслив не обшибаюсь) сами установить сертификат
el_verdugo
Забыл /add убрать.
Еще стороняя тулза так делает -
chcp 1251
renuser %USERNAME% "newuser"
Добавлено:
А можно ли с батника vbs скрипт пускать?
типа идет батник
.
.
.
кусок vbs скрипта
Или надо код в батнике копировать в vbs файл ( как это сделать?) и вызывать его потом?
Забыл /add убрать.
Еще стороняя тулза так делает -
chcp 1251
renuser %USERNAME% "newuser"
Добавлено:
А можно ли с батника vbs скрипт пускать?
типа идет батник
.
.
.
кусок vbs скрипта
Или надо код в батнике копировать в vbs файл ( как это сделать?) и вызывать его потом?
Цитата:
graydevil
Цитата:
А можно ли с батника vbs скрипт пускать?
Цитата:
graydevil
а мож тебе шапку по внимательней почитать???
el_verdugo
Спасибо. Придется убивать
YNY
Да это понятно. Что это за ошибки при чтении регистра под номерами 1 и 2.
Спасибо. Придется убивать
YNY
Да это понятно. Что это за ошибки при чтении регистра под номерами 1 и 2.
весь скрипт в тэге MORE приведи пжалста для начала
Добавлено:
Цитата:
[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 ошибки при чтении регистра
[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]
YNY
Цитата:
вот мне возвращает 1 и 2 на разных удаленных компьютерах.Как я понял их можно посмотреть в объекте WbemErrorEnum, но как это сделать.
Цитата:
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
Цитата:
Хоста - локального компьютера(компьютера домена)? Если да, то ставь скрипт на выключение компьютера(в политиках присутствует) и пиши куда-нибудь в лог дату/время(имя компа, если надо), а потом другим скриптом обрабатывай инфу...
Цитата:
Ребята, нет ни у кого скрипта, котрый бы посчитал кол-во перезагрузок энного хоста за энный промежуток времени? Нигде не могу найти.
Хоста - локального компьютера(компьютера домена)? Если да, то ставь скрипт на выключение компьютера(в политиках присутствует) и пиши куда-нибудь в лог дату/время(имя компа, если надо), а потом другим скриптом обрабатывай инфу...
Создал скрипт для выключение компьютеров
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"
Можно как-то дать возможность отменить выключение компьютера, если пользователь работает за этим компьютером?
Хочется после выполнения скрипта отправить письмо, в котором список выключенных компьютеров. Т.е. разделить те, которые уже были выключены и остальные.
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"
Можно как-то дать возможность отменить выключение компьютера, если пользователь работает за этим компьютером?
Хочется после выполнения скрипта отправить письмо, в котором список выключенных компьютеров. Т.е. разделить те, которые уже были выключены и остальные.
klimusu
Цитата:
Можно с помощью команды
Код: shutdown -a
Цитата:
Можно как-то дать возможность отменить выключение компьютера, если пользователь работает за этим компьютером?
Можно с помощью команды
Код: shutdown -a
всем привет. Вопрос таков, есть машина в домене, входит в домен нормально, входит ко всем машинам и серверам по сети.Через некоторое время, теряет "доверие" и ее перестают пускать на машины по всей сети, требуют логин и пароль.Как лечить?
el_verdugo
Цитата:
, только комп работать после этого практически не будет...
Цитата:
Можно с помощью команды
Код: shutdown -a
, только комп работать после этого практически не будет...
Цитата:
shutdown -a
заставить всех пользователей выучить эту команду? есть проще способ, может как-то можно сделать кнопку "отмена" !?
klimusu
Цитата:
ярлык на рабочий стол или батник
Цитата:
может как-то можно сделать кнопку "отмена"
ярлык на рабочий стол или батник
Real Root
Цитата:
Дело в том, что винда после команды shutdown уже инициирует выгрузку себя, иначе говоря, частично себя выгружает из памяти, и работа после команды
Код: shutdown -a
Цитата:
Нормально все будет работать, это штатная отмена штатного действия. А вот если вы svchost грохните, то winlogon инициализирует shutdown -r - и во тогда отмена возможна, но как после этого будет комп работать уже не известно.
Дело в том, что винда после команды shutdown уже инициирует выгрузку себя, иначе говоря, частично себя выгружает из памяти, и работа после команды
Код: shutdown -a
Развертывание Windows...
Такая мысль пришла для автоматизации установки,
1. Ставим винды, получаем ip через DHCP сервер.
2. Пускаем скрипт пишуший юзер пасс и прочее..
Вопрос можно ли через DHCP сервер, сказать выполнить для этой станции
с таким-то ip такой-то батник, т.е. опция в DHCP может есть хитрая...
Или может есть решение попроще, типа прописать в установку виндов батник,
получаем ип, пускаем с сервака батник, который по текущему ип пропишет все настройки...
Такая мысль пришла для автоматизации установки,
1. Ставим винды, получаем ip через DHCP сервер.
2. Пускаем скрипт пишуший юзер пасс и прочее..
Вопрос можно ли через DHCP сервер, сказать выполнить для этой станции
с таким-то ip такой-то батник, т.е. опция в DHCP может есть хитрая...
Или может есть решение попроще, типа прописать в установку виндов батник,
получаем ип, пускаем с сервака батник, который по текущему ип пропишет все настройки...
graydevil
Цитата:
Обрабатывай скрипт при подключении клиента. В реестре клиента создай собственный ключ/параметр и читай его. После переустановки винды параметр будет отсутствовать, а после внесения настроек ты его запишешь...
Цитата:
Развертывание Windows...
Такая мысль пришла для автоматизации установки,
1. Ставим винды, получаем ip через DHCP сервер.
2. Пускаем скрипт пишуший юзер пасс и прочее..
Вопрос можно ли через DHCP сервер, сказать выполнить для этой станции
с таким-то ip такой-то батник, т.е. опция в DHCP может есть хитрая...
Или может есть решение попроще, типа прописать в установку виндов батник,
получаем ип, пускаем с сервака батник, который по текущему ип пропишет все настройки...
Обрабатывай скрипт при подключении клиента. В реестре клиента создай собственный ключ/параметр и читай его. После переустановки винды параметр будет отсутствовать, а после внесения настроек ты его запишешь...
Как прочитать заголовок (title) запущенной программы?
ShafMAN
Цитата:
Примерно так
Код: 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
Цитата:
Как прочитать заголовок (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
День добрый
Такая ситуация:
Есть vbs скрипт, цикл, который пробегается по компам из списка.
Для каждого компьютера выполняю:
Код:
Set grp = GetObject("WinNT://" & strNextLine & "/" & groupName & ",group")
Такая ситуация:
Есть vbs скрипт, цикл, который пробегается по компам из списка.
Для каждого компьютера выполняю:
Код:
Set grp = GetObject("WinNT://" & strNextLine & "/" & groupName & ",group")
Цитата:
gbcfkf
попробуй
просто игнорировать ошибку
On Error Resume Next
или поматреть че за
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear ' Clear the error.
Добавлено:
ну раздели свой скрипт на 2:
в 1 работает цикл по компам
внутри цикла запускай 2 скрипт
т.о. у тя запустится неск экземпляров 2 срипта и тебе не надо будет ждать чего-то чтоб продолжить дальше, т.к. каждый 2 скрипт будет работать тока со своим компом, правда общая производительность компа могет сильно снизится, но тут ты сам смотри )
YNY
Хм.. да, можно попробовать.. правда в этом случае запустится целая куча экземпляров.. Надо потестировать это дело
Благодарю за идею )
Хм.. да, можно попробовать.. правда в этом случае запустится целая куча экземпляров.. Надо потестировать это дело
Благодарю за идею )
ну если компов много, то мона в скрипте 1 в цикле смотреть процедурой/функцией скоко уже процессов WScript работает и не плодить новые пока их число не будет нах в допустимых пределах )
Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
Предыдущая тема: BackUp Win2003Serer
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.