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

» Программирование "удобняшек" на VBScript (Часть 2)

Автор: ShIvADeSt
Дата сообщения: 12.07.2011 03:12
Вопросы, задачи и их решения по VBScript.


Мануал (english, 600 Кб).
MS Scripting 5.6 (700 КБ), включает последнюю версию VBS. Владельцам XP/2000(?) должен быть не нужен.
Немного на wikiпедии.
Предыдущие части: 1

Смежные темы:
Задачи на bat-файлах 11
Командная строка, батники\сценарии (bat, cmd)
PowerShell
Скрипты KiXtart
Автор: smirnvlad
Дата сообщения: 12.07.2011 08:34
UnrealCiscoSys
в батнике были эхи которые писались в текстовые файлы


Код:
DateTime = Now

Set WshShell = WScript.CreateObject("WScript.Shell")
Set objEnv = WshShell.Environment("Process")

UserName = objEnv("UserName")
UserDomain = objEnv("UserDomain")
ComputerName = objEnv("ComputerName")
LogonServer = objEnv("LogonServer")

l = "logon " & UserName & " " & ComputerName & " " & DateTime

Log l, "\\srv1\logs$\logonlog\users\" & UserName & ".txt"
Log l, "\\srv1\logs$\logonlog\computers\" & ComputerName & ".txt"
Log l, "\\srv1\logs$\logonlog\!logonlog.txt"

l = UserDomain & "\" & UserName & " authenticated at " & LogonServer & " " & DateTime & " for " & ComputerName
Log l, "\\srv1\logs$\logonlog\authserver.txt"

Sub Log(str, logfilename)
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set file = fso.OpenTextFile(logfilename, 8, true)
    file.WriteLine str
    file.Close     
End Sub
Автор: UnrealCiscoSys
Дата сообщения: 12.07.2011 17:41
ща попробую

Добавлено:
Супер ... работает ... я еще сделал тоже самое на logout убрав authserver и поменяв logon на logoff ... Спасибо!!!
Автор: vova93
Дата сообщения: 13.07.2011 14:31
Cкажите пожалуйста, как с помощью ВБС получить бинарные данные из буфера обмена, например скриншот?
Автор: qwertEHOK
Дата сообщения: 18.07.2011 19:40
а можно с помощью VBS работать с изобразениями?
интересует изменение размера jpg и сохранение с 50% качества
Автор: ComradG
Дата сообщения: 20.07.2011 00:34
qwertEHOK если именно vbs, то как максимум можно извлечь данные о графическом файле; если требуется обрезка и прочее - VBA, который прикручивается к офису. по крайней мере я пока альтернативных решений не нашел.
Автор: ShIvADeSt
Дата сообщения: 20.07.2011 06:09
ComradG

Цитата:
сли именно vbs, то как максимум можно извлечь данные о графическом файле; если требуется обрезка и прочее

А если вызывать стороннее ПО (ирфанвью) которое умеет из командной строки получать параметры и менять изображения?
Автор: ComradG
Дата сообщения: 31.07.2011 14:13
ShIvADeSt

Цитата:
А если вызывать стороннее ПО (ирфанвью) которое умеет из командной строки получать параметры и менять изображения?
попробовать, в общем-то, можно, вот только встречный вопрос: а установлен ли у пользователя сабж или он ему и даром не нужен?!

полистал прошлые посты форумчан, нашел кучу примеров по (ан)зипу через системный шелл. а где можно глянуть примеры на JScript'е?
Автор: Free_Soft
Дата сообщения: 01.08.2011 07:03
Гуру, подскажите: что конкретно назначается в этой строке?

Код: Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
Автор: ComradG
Дата сообщения: 01.08.2011 11:34
Free_Soft

Цитата:
If intOccurClient <> 0 Then
означает, что если параметр intOccurClient не равен нулю, то должно выполнится некоторое действие, а во втором случае наоборот - если равен нулю.

Цитата:
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
устанавливаешь ссылку на объект WMI.
Автор: Free_Soft
Дата сообщения: 01.08.2011 11:39
ComradG

Цитата:
устанавливаешь ссылку на объект WMI.

Это я понял вот что конкретно за объекты...
Автор: Rush
Дата сообщения: 01.08.2011 11:40
Free_Soft

Цитата:
что конкретно назначается в этой строке?

Подключение к пространству имен WMI.

Цитата:
чем отличается

в первом случае не равно 0, во втором наоборот.
Автор: Free_Soft
Дата сообщения: 01.08.2011 18:50
Rush
Понятно. Еще вопрос: можно ли при запуске скрипта направлять его выхлоп в текстовый файл, а при запуске через cscript выхлоп выводить в консоль уже без создания txt-файла?
Автор: ComradG
Дата сообщения: 01.08.2011 20:13
Free_Soft
то есть, если vbs'ку планируется запускать из проводника или чего? не совсем уловил мысль. можно принудительно запускать cscript:
Код: var wsh = new ActiveXObject("WScript.Shell");

if (WScript.FullName.toLowerCase() == (WScript.Path + "\\wscript.exe").toLowerCase()) {
wsh.Run("cscript.exe //nologo " + WScript.ScriptName);
wsh.Quit();
}
Автор: Free_Soft
Дата сообщения: 01.08.2011 20:48
ComradG
Ну да, если кликом из проводника, то в текстовый файл, а если через cscript, то прямиком в консоль
Автор: ComradG
Дата сообщения: 01.08.2011 21:22
Free_Soft
см. код выше:
Код: var fso = new ActiveXObject("Scripting.FileSystemObject"),
wsh = new AcriveXObject("WScript.Shell"),
ForWriting = 2;

if (WScript.FullName.toLowerCase() == (WScript.Path + "\\wscript.exe").toLowerCase()) {
...
fso.CreateTextFile("c:\\log.txt");
fso.OpenTextFile("c:\\log.txt", ForWriting, true);
...
}
else {
...
WScript.echo(...);
...
}
Автор: Free_Soft
Дата сообщения: 04.08.2011 18:58
А чем отличается
Код: WScript.Arguments.Item
Автор: ComradG
Дата сообщения: 04.08.2011 20:09
тем, что первый является определяемым конкретно аргументом, а второй является общим обектом для всех аргументов. например:
Код: Set objArgs = WScript.Arguments
'далее можно назначать аргументы так
strName = objArgs(0)
'или так
strName = objArgs.Item(0)
Автор: Free_Soft
Дата сообщения: 05.08.2011 13:25
Всем известный сценарий создания контрольной точки восстановления:

Код: Set ObjSysRr = GetObject("winmgmts:\\.\root\default:Systemrestore")
If (ObjSysRr.CreateRestorePoint("VBS_Script", 0, 100)) = 0 Then
WScript.Quit(WScript.Echo("CREATED"))
Else
WScript.Quit(WScript.Echo("NONCREATED"))
End If
Автор: ComradG
Дата сообщения: 05.08.2011 16:26
Free_Soft
прошу прощения, но с чего ты взял, что
Цитата:
If (ObjSysRr.CreateRestorePoint("VBS_Script", 0, 100))
вообще отрабатывает? контрольная точка вообще-то создается так:
Код: Set objWNIService = GetObject("winmgmts: {impersonationLevel=impersonate}!\\.\\root\default")
Set objItem = objWMIService.Get("SystemRestore")
errResult = objItem.CreateRestorePoint("Системная контрольная точка", 7, 100)
Автор: Free_Soft
Дата сообщения: 05.08.2011 16:43
ComradG
Приведенный мной код отрабатывает, иначе бы не выкладывал. Разница в том, что он создает точку от имени "установки", а если поставить "7" - то от имени системы. Это плюс. давно искал, но найти не мог. Будет типа так?

Код: Set objWMIService = GetObject("winmgmts: {impersonationLevel=impersonate}!\\.\\root\default")
Set objItem = objWMIService.Get("SystemRestore")
If (objItem.CreateRestorePoint("Системная контрольная точка", 7, 100)) = 0 Then
WScript.Quit(WScript.Echo("CREATED"))
Else
WScript.Quit(WScript.Echo("NONCREATED"))
End If
Автор: ComradG
Дата сообщения: 05.08.2011 17:18
Free_Soft
ах, да! прости, не сразу въехал в суть, просто код твой покороче. ошибка
Цитата:
point.vbs(1, 1) (null): 0x80041021
означает, что начальный объект у табе пустой. тогда так:
Код: Set objWMIService = GetObject("winmgmts: \\.\root\default:SystemRestore")
errResult = objWMIService.CreateRestorePoint("Системная контрольная точка", 7, 100)
Автор: Free_Soft
Дата сообщения: 05.08.2011 17:42
ComradG
ну если в винде отключить "защиту системы", т.е. создание точек восстановления системы, то при попытке создать точку скриптом будет ошибка:

Код: point.vbs(2, 1) SWbemObjectEx: Указанная служба не может быть запущена,
поскольку она отключена или все связанные с ней устройства отключены.
Автор: ComradG
Дата сообщения: 05.08.2011 17:57
Free_Soft
уфф, а я гадаю, чего за система защиты... ну, если отключить возможность создания точек восстановления, то разумнее тогда создать проверку на то, отключена ли такая возможность или все же нет. вот только через создание новой точки это как-то даже... сейчас попробую чего-нибудь соорудить.
Автор: Free_Soft
Дата сообщения: 05.08.2011 17:58
ComradG
ну мне все равно, каким образом. Через создание точки, это, конечно не айс. Но по-другому я не знаю...
Автор: ComradG
Дата сообщения: 05.08.2011 19:05
Free_Soft
сказать по правде, чет невъезжаю я сегодня ни во что толком. в общем так. по всей видимости валидатора как такового не предусмотрено, однако это не значит, что я не могу ошибаться. все, что мне удалось экстрагировать, как отключть и подключить возможность создания контрольных точек:
Код: Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default")
Set objItem = objWMIService.Get("SystemRestore")
'отключает службу
errResult = objItem.Disable("")
'подключает
errResult = objItem.Enable("")

Set objItem = Nothing
Set objWMIService = Nothing
Автор: Free_Soft
Дата сообщения: 05.08.2011 19:34
ComradG
ну и фиг с ним )) objItem.Enable("") уже достаточно.
так грамотно вписать?

Код: Set ObjSysRr = GetObject("winmgmts:\\.\root\default:Systemrestore")
ObjSysRr.Enable("")
If (ObjSysRr.CreateRestorePoint("VBS_Script", 12, 100)) = 0 Then
WScript.Quit(WScript.Echo("CREATED"))
Else
WScript.Quit(WScript.Echo("NONCREATED"))
End If
Автор: ComradG
Дата сообщения: 05.08.2011 19:49
Free_Soft
в целом - да. кстати, извини, напутал малость с драйвером: там не 12, а 10! то есть если ты устанавливаешь драйвер, то:
Код: ObjSysRr.CreateRestorePoint("VBS_Script", 10, 100)
Автор: Free_Soft
Дата сообщения: 05.08.2011 19:54
ComradG
12 - то, что нужно. Точка будет от имени "системы". Кстати, если использовать "7", точка создается с именем по умолчанию; через скрипт его не задать.
Автор: ComradG
Дата сообщения: 05.08.2011 19:57
Free_Soft

Цитата:
Точка будет от имени "системы".
ну, это то мне известно. просто я поправился, что логичнее при установке драйвера десятку юзать.
Цитата:
через скрипт его не задать.
в смысле?

Страницы: 12345678910111213141516171819202122232425

Предыдущая тема: Помогите новичку в C++


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