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

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

Автор: LingWillOk
Дата сообщения: 06.03.2013 12:12
[more] Здравствуйте, товарищи!
Появилась такая проблема. Провожу инвентаризацию железа, работая эникейщиком.
Мне необходимо дополнить нижеприведенный код таким образом, чтобы в поле операционной системы вставлялась строка с лиц. ключом винды.
Собственно, код сборщика информации. На основе всех данных генерируется .csv файл

Код:
'Инвентаризация компьютеров средствами WMI и VBScript (29.07.2009)

'== НАСТРОЙКИ

'режим работы
Const SILENT = False 'тихий режим отключен, будет запрошено имя компьютера
'Const SILENT = True 'режим отчета о локальном компьютере без вывода диалогов

'где сохранять отчет
Const DATA_DIR = "" 'локальный каталог + "\" в конце
'Const DATA_DIR = "\\10.xxx.xxx.xxx\Report$\Invent\comp\" 'сетевой ресурс + "\" в конце

'прочее
Const TITLE = "Инвентаризация компьютеров" 'заголовок диалоговых окон
Const DATA_EXT = ".csv" 'расширение файла отчета
Const HEAD_LINE = True 'выводить заголовки в первой строке CSV-файла

'не завершать скрипт аварийно
'закомментировать на время отладки
On Error Resume Next

'== ВЫПОЛНЕНИЕ

'объект для доступа к файловой системе
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

'объект WMI
Dim wmio

'файл отчета
Dim tf

'узнать имя локального компьютера
Dim nwo, comp
Set nwo = CreateObject("WScript.Network")
comp = LCase(nwo.ComputerName)

'запросить имя удаленного компьютера
If Not SILENT Then
    comp = InputBox("Введите имя компьютера:", TITLE, comp)
    'проверить доступность компьютера
    If Unavailable(comp) Then
        MsgBox "Компьютер недоступен:" & vbCrLf & comp, vbExclamation, TITLE
        comp = ""
    End If
End If

'провести инвентаризацию
If Len(comp) > 0 Then InventComp(comp)

'если ошибка
If Len(Err.Description) > 0 Then _
    If Not SILENT Then MsgBox comp & vbCrLf & "Ошибка:" & vbCrLf & Err.Description, vbExclamation, TITLE

'== ПОДПРОГРАММЫ

'инвентаризация компьютера, заданного сетевым именем или IP-адресом
'сохранение отчета с указанным именем
Sub InventComp(compname)

    Set wmio = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\" & compname & "\Root\CIMV2")

    'некоторые WMI-классы поддерживаются не во всех версиях Windows
    Dim build
    build = BuildVersion()

    'файл отчета
    Set tf = fso.CreateTextFile(DATA_DIR & compname & DATA_EXT, True)

    'первая строка - заголовки
    If HEAD_LINE Then tf.WriteLine "Секция отчета;Параметр;Номер экземпляра;Значение"

    'дата проверки
    tf.WriteLine "Компьютер;Дата проверки;1;" & Now

'    Log "Win32_ComputerSystemProduct", _
'        "UUID", "", _
'        "Компьютер", _
'        "UUID"

    Log "Win32_ComputerSystem", _
        "Name,Domain,UserName", "", _
        "Компьютер", _
        "Сетевое имя,Домен,Текущий пользователь"

    Log "Win32_OperatingSystem", _
        "Caption,Version,CSDVersion,Description,RegisteredUser,Organization,InstallDate", "", _
        "Операционная система", _
        "Наименование,Версия,Обновление,ТутНуженЛицензионныйКлюч, Описание,Зарегистрированный пользователь,Организация,Дата установки"

    Log "Win32_OperatingSystem", _
        "Win8ProductKey", "", _
        "Лицензионный ключ"
    
    Log "Win32_BaseBoard", _
        "Manufacturer,Product,Version,SerialNumber", "", _
        "Материнская плата", _
        "Производитель,Наименование,Версия,Серийный номер"

    Log "Win32_BIOS", _
        "Manufacturer,Name,SMBIOSBIOSVersion,SerialNumber", "", _
        "BIOS", _
        "Производитель,Наименование,Версия,Серийный номер"

    'не определяется Core 2 в XP SP2, см. http://support.microsoft.com/kb/953955
    Log "Win32_Processor", _
        "Name,Caption,CurrentClockSpeed,ExtClock,L2CacheSize,SocketDesignation,UniqueId", "", _
        "Процессор", _
        "Наименование,Описание,Частота (МГц),Частота FSB (МГц),Размер L2-кеша (кб),Разъем,UID"

    Log "Win32_PhysicalMemory", _
        "Capacity,Speed,DeviceLocator", "", _
        "Модуль памяти", _
        "Размер (Мб),Частота,Размещение"

    'пропускаются USB-диски
    Log "Win32_DiskDrive", _
        "Model,Size,InterfaceType", "InterfaceType <> 'USB'", _
        "Диск", _
        "Наименование,Размер (Гб),Интерфейс"

    'только локальные диски
    'пропускаются USB-диски, размер которых обычно NULL
    Log "Win32_LogicalDisk", _
        "Name,FileSystem,Size,FreeSpace,VolumeSerialNumber", "DriveType = 3 AND Size IS NOT NULL", _
        "Логический диск", _
        "Наименование,Файловая система,Размер (Гб),Свободно (Гб),Серийный номер"

    Log "Win32_CDROMDrive", _
        "Name", "", _
        "CD-привод", _
        "Наименование"

    'только для XP/2003 и выше
    'пропускаются "двойники", имеющие в названии слово "Secondary"
    If build >= 2600 Then
        Log "Win32_VideoController", _
        "Name,AdapterRAM,VideoProcessor,VideoModeDescription,DriverDate,DriverVersion", "NOT (Name LIKE '%Secondary')", _
        "Видеоконтроллер", _
        "Наименование,Объем памяти (Мб),Видеопроцессор,Режим работы,Дата драйвера,Версия драйвера"
    Else 'для Windows 2000
        Log "Win32_VideoController", _
        "Name,AdapterRAM,VideoProcessor,VideoModeDescription,DriverDate,DriverVersion", "", _
        "Видеоконтроллер", _
        "Наименование,Объем памяти (Мб),Видеопроцессор,Режим работы,Дата драйвера,Версия драйвера"
    End If


    'только для XP/2003 и выше
    'пропускаются отключенные сетевые адаптеры, в том числе минипорты
    'пропускаются виртуальные адаптеры VMware
    If build >= 2600 Then
        Log "Win32_NetworkAdapter", _
        "Name,AdapterType,PermanentAddress,MACAddress", "NetConnectionStatus > 0 AND NOT (Name LIKE 'VMware%')", _
        "Сетевой адаптер", _
        "Наименование,Тип,IP-адрес,MAC-адрес"
    Else 'для Windows 2000
        Log "Win32_NetworkAdapter", _
        "Name,PermanentAddress,MACAddress", "", _
        "Сетевой адаптер", _
        "Наименование,IP-адрес,MAC-адрес"
    End If

    Log "Win32_SoundDevice", _
        "Name", "", _
        "Звуковое устройство", _
        "Наименование"

    Log "Win32_SCSIController", _
        "Name", "", _
        "SCSI контроллер", _
        "Наименование"

    'только для XP/2003 и выше
    'пропускаются сетевые принтеры
    'условия "Local = True Or Network = False" недостаточно для принт-серверов, поэтому проверяется порт
    If build >= 2600 Then
        Log "Win32_Printer", _
        "Name,PortName,ShareName", "(Local = True OR Network = False) AND (PortName LIKE '%USB%' OR PortName LIKE '%LPT%')", _
        "Принтер", _
        "Наименование,Порт,Сетевое имя"
    End If

    Log "Win32_PortConnector", _
        "ExternalReferenceDesignator,InternalReferenceDesignator", "", _
        "Разъем порта", _
        "Внешний,Внутренний"

    Log "Win32_Keyboard", _
        "Name,Description", "", _
        "Клавиатура", _
        "Наименование,Описание"

    Log "Win32_PointingDevice", _
        "Name", "", _
        "Мышь", _
        "Наименование"

    'закрыть файл
    tf.Close
    If Not SILENT Then MsgBox "Отчет сохранен в файл:" & vbCrLf & DATA_DIR & compname & DATA_EXT, vbInformation, TITLE

End Sub

'составить WQL-запрос, выполнить и записать строку в CSV-файл
'входные параметры:
'from - класс WMI
'sel - свойства WMI, через запятую
'where - условие отбора или пустая строка
'sect - соответствующая секция отчета
'param - соответствующие параметры внутри секции отчета, через запятую
'для отображения в кратных единицах, нужно их указать в скобках
Sub Log(from, sel, where, sect, param)

    Const RETURN_IMMEDIATELY = 16
    Const FORWARD_ONLY = 32

    Dim query, cls, item, prop
    query = "Select " & sel & " From " & from

    If Len(where) > 0 Then query = query & " Where " & where
    Set cls = wmio.ExecQuery(query,, RETURN_IMMEDIATELY + FORWARD_ONLY)

    Dim props, names, num, value
    props = Split(sel, ",")
    names = Split(param, ",")

    num = 1 'номер экземпляра
    For Each item In cls
        For i = 0 To UBound(props)

            'взять значение
            Set prop = item.Properties_(props(i))
            value = prop.Value

            'без проверки на Null возможнен вылет с ошибкой
            If IsNull(value) Then
                value = ""

            'если тип данных - массив, собрать в строку
            ElseIf IsArray(value) Then
                value = Join(value,",")

            'если указана кратная единица измерения, перевести значение
            ElseIf Right(names(i), 4) = "(Мб)" Then
                value = CStr(Round(value / 1024 ^ 2))
            ElseIf Right(names(i), 4) = "(Гб)" Then
                value = CStr(Round(value / 1024 ^ 3))

            'если тип данных - дата, преобразовать в читаемый вид
            ElseIf prop.CIMType = 101 Then
                value = ReadableDate(value)
            End If

            'вывести в файл непустое значение, заменить спецсимвол ";"
            value = Trim(Replace(value, ";", "_"))
            If Len(value) > 0 Then tf.WriteLine sect & ";" & names(i) & ";" & num & ";" & value

        Next 'i

        'перейти к следующему экземпляру
        num = num + 1
    Next 'item

End Sub

'преобразование даты формата DMTF в читаемый вид (ДД.ММ.ГГГГ)
'http://msdn.microsoft.com/en-us/library/aa389802.aspx
Function ReadableDate(str)
'объект недоступен в Windows 2000, поэтому см. далее
'    Dim dto
'    Set dto = CreateObject("WbemScripting.SWbemDateTime")
'    dto.Value = str
'    ReadableDate = dto.GetVarDate(True)
    ReadableDate = Mid(str, 7, 2) & "." & Mid(str, 5, 2) & "." & Left(str, 4)
End Function

'узнать версию (билд) WMI-сервера
'вернуть целое число
Function BuildVersion()
    Dim cls, item
    Set cls = wmio.ExecQuery("Select BuildVersion From Win32_WMISetting")
    For Each item In cls
        BuildVersion = CInt(Left(item.BuildVersion, 4))
    Next
End Function

'проверить доступность компьютера в сети
'вернуть True, если адрес недоступен
Function Unavailable(addr)
    Dim wmio, ping, p
    Set wmio = GetObject("WinMgmts:{impersonationLevel=impersonate}")
    Set ping = wmio.ExecQuery("SELECT StatusCode FROM Win32_PingStatus WHERE Address = '" & addr & "'")
    For Each p In ping
        If IsNull(p.StatusCode) Then
            Unavailable = True
        Else
            Unavailable = (p.StatusCode <> 0)
        End If
    Next
End Function
Автор: SLasH
Дата сообщения: 09.03.2013 15:44
Приветствую всех!
Есть такой скрипт:
[more=Код]
Код: Option Explicit
Dim ScriptName
ScriptName = WScript.ScriptName
If WScript.Arguments.Count = 0 Then
    Call ShowMsg("Usage: " & ScriptName & " <web-document>", "error", ScriptName)
    WScript.Quit
End If

Dim FSO, Path
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Path = WScript.Arguments(0)
If Not FSO.FileExists(Path) Then
    Call ShowMsg("Path: " & Path & CRLF & "not found!", "error", ScriptName)
    WScript.Quit
End If

Dim IEObject, itm, res
'Загружаем Internet Explorer
Set IEObject = WScript.CreateObject("InternetExplorer.Application")
'Определяем разрешение экрана
Set itm = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_DesktopMonitor")
For Each res In itm
Exit For
Next
With IEObject
    'Прячем меню, панели инструментов и строку состояния
     .Left = 0
     .Top = 0
     .Width = res.ScreenWidth
     .Height = res.ScreenHeight - 54
     .MenuBar = 0
     .ToolBar = 0
     .StatusBar = 0
End With
'Открываем страничку
IEObject.Navigate(Path)
Do While (IEObject.Busy)
WScript.Sleep(200)
Loop
'Отображаем окно IE
IEObject.Visible = 1


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'==[ Functions ]================================================================
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub ShowMsg(msg, msgType, caption)
    msgType = UCase(msgType)
    Select Case msgType
        Case "ERROR"
            msgType = vbCritical
            caption = "[ERROR] " & caption
        Case "WARNING"
            msgType = vbQuestion
            caption = "[Warning] " & caption
        Case "INFO"
            msgType = vbInformation
            caption = "[Info] " & caption
    End Select
    MsgBox msg, vbOKOnly + msgType, caption
End Sub
Автор: mrCrowley
Дата сообщения: 12.03.2013 14:44
Приветствую

Помогите, пожалуйста реализовать такой скрипт:

Проверяется с заданным интервалом определенная страница в браузере: http://mypage.mydomain на наличие в ней текста: "текст1, текст2, текст3... текстN" Если искомый текст обнаружен - отправляется сообщение на заданый e-mail: mymail@mydomain: "текстN - обнаружен"
Автор: Antonj
Дата сообщения: 21.03.2013 13:23
Спасибо решение нашел!
Google рулит!
Автор: NtX1700
Дата сообщения: 23.03.2013 17:04
Приветсвую всех!

Появилась задача - запуск программы без окна с измененным приоритетом. Добросоветсно ползал по интернету. В частности и по нашему сайту. По отдельности было изначально как все делается. А вместе - никак )))

Запускаю программу так:

Цитата:
On Error Resume Next
Set WshShell = WScript.CreateObject("WScript.Shell")
cmd="c:\prog.exe -scuko"
WshShell.Run(cmd),0

Окна нет, но приортет нормальный.

С приоритетом по жизни игрался через start. Делаю так:

Цитата:
On Error Resume Next
Set WshShell = WScript.CreateObject("WScript.Shell")
cmd="%comspec% /c start /low c:\prog.exe -scuko"
WshShell.Run(cmd),0

И ничего и не выходит, ибо WshShell.Run запустит без окна интерпретатор, тот запустит в свою очередь start, а он запускает prog.exe отдельным процессом, которое радостно показывает консольку. можно добавить к интерпретатору /c/q, то не прокатывает.

Мож кто подскажет что? В VBS-то я особо не силен...
Windows 7 стоит в качестве подопытного.
Автор: Alex_Piggy
Дата сообщения: 23.03.2013 17:38
Добрый день, NtX1700
Не VBS - решение - добавьте /b к start
cmd="%comspec% /c start /b /low c:\prog.exe -scuko"
Автор: NtX1700
Дата сообщения: 23.03.2013 18:09
Alex_Piggy
Все гениальное просто!
Спасибо!
Автор: Sharer01
Дата сообщения: 28.03.2013 21:20
Здравствуйте! WinXP SP3. Возникает ошибка при выполнении скриптов: "ERROR CODE: 429. ERROR DESCRIPTION: Невозможно создание объекта контейнером ActiveX". Как решить эту проблему? Заранее благодарю за помощь!

Как выснилось, проблема не была связана непосредственно с ошибками в работе VBScript, а заключалась в неправильных разрешениях на разделы реестра, которые послужили причиной его некорректной работы. Поэтому этот пост просьба удалить как непрофильный в данной теме.

Автор: msmih
Дата сообщения: 03.04.2013 19:33
Помогите чайнику.
Как реализовать отправку почты, чтобы адреса подцеплялись из файла с адресами. Обычную отправку делать получается.
1. Есть текстовый файл Adress.txt со строками
"Почта_1@домен.ru" <Почта_1@домен.ru>
"Почта_2@домен.ru" <Почта_2@домен.ru>

2. Как сделать в цикле чтение из файла и передачу адреса на автомате в эту конструкцию:
iMsg.To = "Почта_1@домен.ru"
iMsg.Send

Буду признателен за подсказку и кусок кода

ps и еще буду признателен за возможность визуализации отправки в цикле. Типа счетчика или сообщения "Отправлено X Из XX"
Автор: dvs2009
Дата сообщения: 04.04.2013 18:31
Доброе время суток!
Подскажите, как реализовать в VBS переключение языковой раскладки?

То есть у меня рабочий VBS с выбором запуска двух программ. Для одной нужно писать по-английски, для другой - по-русски. Надо вставить код переключения раскладки языка (или как это правильно называется - ХЗ...)

Добавлено:
Думал как корректно это организовать.
1) считываем с реестра необходимые ветки. -> сохраняем их.
2) заносим в реестр такую конструкцию:
- смена раскладки по Контрол+Шифт
- назначение русской раскладки на сочетание клавиш 1
- назначение английской раскладки на сочетание клавиш 2
3) WshShell.SendKeys и выполнение необходимых действий скрипта
4) удаление из реестра внесённых изменений и занесение в реестр сохранённых веток

Вот без ребута винды, "на лету", смена сочетаний клавиш и остальное с реестром - будет работать?

Помогите плиз со скриптом - я в VBS совсем начинающий!
Автор: kit83
Дата сообщения: 13.04.2013 20:59
Нужен скрипт для отслеживания запуска программы 1.exe если она не работает - запустить, отслеживать запуск chrom.exe и в случае запуска убить её и развернуть и сделать активным окно программы 1.exe

Спасибо
Автор: Alex_Piggy
Дата сообщения: 15.04.2013 21:38
Добрый вечер
msmih
Наверное как-то так... [more]

Код:
Set FSO = CreateObject("scripting.FileSystemObject")
Set objTextStream=FSO.GetFile("Adress.txt").OpenAsTextStream(1)
do While(Not objTextStream.AtEndOfStream)
iMsg.To = objTextStream.ReadLine
iMsg.Send
loop
Автор: msmih
Дата сообщения: 16.04.2013 18:29
Alex_Piggy
Спасибо! попробую.
Автор: inco by
Дата сообщения: 18.04.2013 14:58
Прошу прощения за чайниковский вопрос. Возможно ли средствами VBScript выполнить следующую последовательность операций:
1) запустить программу
2) кликнуть по нужной кнопке (загрузить файл) в программе
3) после чего из появившегося в виндоузном окне выбрать файл с нужным именем, нажать кнопку ОК
4) снова кликнуть по кнопке "Загрузить файл"
5) сменить каталог из которого выбрать другой файл с таким же именем.

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

Спасибо.

Автор: korosya
Дата сообщения: 21.04.2013 23:37
Подскажите, плиз, как из VBS выводить сообщения в файл, имя которого задаётся как параметр при запуске файла VBS
Автор: Alex_Piggy
Дата сообщения: 22.04.2013 20:59
Добрый вечер
inco by
Какая программа? Она поддерживает ActiveX? Если нет, то наверное только через WshShell.SendKeys (попробуйте сначала с клавиатуры. Альт - перейти в меню, курсором - выбрать Открыть, Таб - перейти к нужному полю, ввести имя файла с путем, табом на загрузить, ввод, повторить для другого файла)

korosya

Код:
Set FSO = CreateObject("Scripting.FileSystemObject")
if WScript.Arguments.Count = 0 then Wscript.Quit (1) end if
filename=WScript.Arguments.Item(0)

if FSO.FileExists(filename) then
Set Text=FSO.OpenTextFile(filename,8)
else
Set Text=FSO.CreateTextFile(filename)
end if

Text.WriteLine("Hello World!")
Text.Close
Автор: inco by
Дата сообщения: 22.04.2013 21:20

Цитата:
inco by
Какая программа? Она поддерживает ActiveX? Если нет, то наверное только через WshShell.SendKeys (попробуйте сначала с клавиатуры. Альт - перейти в меню, курсором - выбрать Открыть, Таб - перейти к нужному полю, ввести имя файла с путем, табом на загрузить, ввод, повторить для другого файла)


Спасибо, решил пойти по пути наименьшего сопротивления, воспользовавшись программкой Autoit.
Автор: korosya
Дата сообщения: 24.04.2013 22:27
Alex_Piggy
Спасибо за помощь.
Я пытаюсь преобразовать этот скрипт для распаковки файлов MSI, чтобы он
1. Выводил свои сообщения не в окно MsgBox, а в файл, задаваемый во втором параметре комстроки. Если второго параметра нет, то в %Temp%\JSWareMSIUnpack.log
2. Распаковывал бы MSI-файл в директорию, указанную в третьем параметре. Если третьего параметра нет, то распаковывается как в оригинальном скрипте.

Я сделал следующие изменения:
В начале до
'---------------------- begin MSI class -----------------------------


[more]Dim ParFol, Boo1, LPt, MC, Arg, Logfile, Output, PathTemp, strLog
ParFol = WScript.ScriptFullName
LPt = InStrRev(ParFol, "\")
ParFol = Left(ParFol, LPt) '-- get parent folder path of this running script.

Set WshShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
PathTemp = WshShell.ExpandEnvironmentStrings( "%temp%" )
If WScript.Arguments.Count = 1 Then
Logfile = PathTemp & "\JSWareMSIUnpack.log"
Else
Logfile = WScript.Arguments.Item(1)
End If

If WScript.Arguments.Count = 3 Then
Output = WScript.Arguments(2)
End If

Arg = WScript.Arguments(0)
If Len(Arg) = 0 Then
strLog = "Drop an MSI file onto script for unpacking."
WriteData Logfile, strLog
WScript.Quit
End If

Set MC = new MSIOps
MC.CurrentFolderPath = ParFol
Boo1 = MC.ProcessMSI(Arg)
If Boo1 = False Then
strLog = "Failed to process MSI file. See the log file in " & MC.UnpackPath & " for more information."
WriteData Logfile, strLog
Else
Boo1 = MC.UnPackMSI()
If Boo1 = True Then
strLog = "Successfully unpacked to: " & vbCrLf & MC.UnpackPath & "."
WriteData Logfile, strLog
Else
strLog = "Error unpacking MSI file. See the log file in " & MC.UnpackPath & " for more information."
WriteData Logfile, strLog
End If
End If

Set MC = Nothing
WScript.Quit
[/more]

2. В середине заменил

Код:     FolPack = FolMSI & "\Unpacked"        'folder to unpack MSI data to.
    FolData = FolPack & "\MSI_Utility_Data"            ' folder For holding MSI raw data during operation.
    DescPath = FolMSI & "\Program Description.txt"    '-- Path of description file - needed later.
Автор: Alex_Piggy
Дата сообщения: 25.04.2013 01:00
Доброй ночи, korosya
1. [more]

Код:
If WScript.Arguments.Count = 1 Then
Logfile = PathTemp & "\JSWareMSIUnpack.log"
Else
Logfile = WScript.Arguments.Item(1)
End If

If WScript.Arguments.Count = 3 Then
Output = WScript.Arguments(2)
End If

Arg = WScript.Arguments(0)
If Len(Arg) = 0 Then
MsgBox "Drop an MSI file onto script for unpacking.", 64, "MSI Unpacker"
WScript.Quit
End If
Автор: korosya
Дата сообщения: 25.04.2013 06:46
Alex_Piggy
Спасибо попробую.
Оригинальный скрипт для работы требует, чтобы на него мышкой в проводнике поместили файл MSI или в комстроке задали wscript.exe оригинальный_скрипт файл.msi
Автор: dvs2009
Дата сообщения: 17.05.2013 17:56
Здравствуйте !

В VBS я новичок.
Уже всю голову сломал...

Вот такая конструкция не работает почему-то:


Код: Dim WSHShell

RU = "с:\FOLDER1\"

Set WshShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run Chr(34) & RU & file1.exe Chr(34), 2
Автор: LordHomyak
Дата сообщения: 18.05.2013 00:25
Доброй ночи, dvs2009
[more]
Цитата:
WSHShell.Run Chr(34) & RU & file1.exe Chr(34), 2

в данной строке вы вызываете метод "exe" обьекта "file1" как процедуры, с параметрами Chr(34) и 2, хотя перед вызовом стоит обьединение строк
поэтому интерпретатор ничего не может разобрать

попробуйте так:

Код: Dim WSHShell

RU = "с:\FOLDER1\"

Set WshShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run Chr(34) & RU & "file1.exe" & Chr(34), 2
Автор: dvs2009
Дата сообщения: 18.05.2013 06:28

Цитата:
Подробнее...

Огромное спасибо!

Автор: ysybarite
Дата сообщения: 18.05.2013 15:04
Ребят,
подскажите пожалуйста скрипт для проверки соединения интернет с интервалом и если отсутствует, то перезапуск устройства?

это перезапуск WiFi
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run("c:\\Dell\\DevCon\\devcon.exe restart PCI\*DEV_008A*",0);

а после перезапуска WiFi залогиниться на роутер и отправить команду http://192.168.1.1/setup.cgi?todo=reboot (на роутере нет telnet)
видимо этот параметр с использованием сторонней проги может такое выполнить, но может и на языке скрипта есть какая-то команда
curl -u “username:password” “http://192.168.1.1/setup.cgi?todo=reboot”


Спасибо.


Вот еще какой то батник, но я так и не разобрался в нем
if [ -z "$1" ]
then
echo "wag320n-hack.sh: missing remote command"
echo "usage: wag320n-hack.sh <remote command>"
echo "example: wag320n-hack.sh /bin/ls -la /usr/sbin"
echo "Note: always use full path"
echo ""
echo "wag320n-hack.sh - Ver. 1.0 - 12/09/2010"
echo "Licensed under GPL V. 3"
echo ""
exit 0
fi

# Get the command
my_command="ping_size="'$('"$@"' 1>&2)'

curl -s -G -u "$my_access" --data-urlencode 'todo=ping_test' --data-urlencode 'this_file=Diagnostics.htm' --data-urlencode 'next_file=Ping.htm' --data-urlencode 'c4_ping_ipaddr=192.168.1.1' --data-urlencode 'ping_timeout=5000' --data-urlencode 'ping_interval=1000' --data-urlencode 'ping_number=1' --data-urlencode "$my_command" http://192.168.1.1/setup.cgi | sed -e '/HTTP\/1.0 200 OK/q'
Автор: LordHomyak
Дата сообщения: 19.05.2013 08:09
доброе утро, ysybarite

Пробуйте, у меня возможности проверить нет
[more=Код VBS]
Код:
    Const cmdRestart = """C:\Dell\DevCon\devcon.exe"" restart PCI\*DEV_008A*"
    Const UrlPing = "google.com"
    Const UrlRestartRouter = "http://admin:admin@192.168.1.1/setup.cgi?todo=reboot"
    
    Const timeUpdate = 5 'minute
    
Do
    If Not Ping(UrlPing) Then            'ping
        shell_hide cmdRestart            'restart wifi
        httpGET UrlRestartRouter        'restart router
    End If
    WScript.Sleep 60000 * timeUpdate
Loop

Function Ping(pingAddr)
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& pingAddr & "'")        
        For Each objStatus In objPing
         Ping = CBool((Not IsNull(objStatus.StatusCode)) and (objStatus.StatusCode = 0))
        Next        
    Set objPing = Nothing
End Function

Sub shell_hide(cmd_name)
    Set WSHShell = WScript.CreateObject("WScript.Shell")
         WSHShell.Run cmd_name, 0, True
    Set WSHShell = Nothing
End Sub

Function httpGET(url)
    Set http = CreateObject("Msxml2.ServerXMLHTTP")
        http.Open "GET", url, False
        http.send
        httpGET = http.responseText
    Set http = Nothing
End Function
Автор: ysybarite
Дата сообщения: 19.05.2013 12:27
LordHomyak
Спасибо, попытаюсь разобраться.
Первый запуск пока все запустилось без условий или неправильно сработал возврат для условия.
Автор: zawakened
Дата сообщения: 20.05.2013 07:10
Здравствуйте, люди добрые

Подскажите такой момент: можно ли из коммандной строки вызвать процедуру в файле FILE.VBS

То есть в наличии один файл VBS
Код: Sub Test1
    msgbox "Test1"
End Sub

Sub Test2
    msgbox "Test2"
End Sub
Автор: Alex_Piggy
Дата сообщения: 20.05.2013 07:36
Добрый день, zawakened
"Аргументы командной строки VBS" - поисковик молчит?

Код:
if WScript.Arguments.Count = 0 then
    msgbox "Please use '/test1' or '/test2' arguments"
else
    if (WScript.Arguments.Named.Exists("test1")) then Test1
    if (WScript.Arguments.Named.Exists("test2")) then Test2
end if
Автор: zawakened
Дата сообщения: 20.05.2013 07:41
Alex_Piggy
Само собой аргументы коммандной строки можно обработать, и запустить необходимую процедуру при определенном аргументе, такой вариант конечно пойдет и работать будет, но вопрос был именно напрямую вызвать процедуру из файла-скрипта
Автор: LordHomyak
Дата сообщения: 20.05.2013 08:40
zawakened
Интерес чисто теоретический, или вам нельзя менять содержимое файла-скрипта?

Как вариант, вызов через скрипт-переходник:

переходник:
[more=Код VBS: adapter.vbs]

Код:
    wscript_path = Replace(WScript.ScriptFullName, "\" & WScript.ScriptName, "")
    
    Remote_script_path = wscript_path & "\" & "remote_script.vbs"
    
    If include_file(Remote_script_path) Then
        If WScript.Arguments.Count = 1 Then
            Execute WScript.Arguments(0)
        Else
            MsgBox "Bad num parameter."
        End If
    Else
        MsgBox "File is not exist: " & Remote_script_path
    End If
    
    WScript.Quit

Function include_file(file_name)
    include_file = False
    Set FSO = CreateObject("Scripting.FileSystemObject")
        If fso.FileExists(file_name) Then
            Set OTS = FSO.OpenTextFile(file_name, 1)
                promSTR = OTS.ReadAll
                OTS.Close
            Set OTS = Nothing
            If Len(promSTR) Then
                ExecuteGlobal promSTR
                include_file = True
            End If'
        End If
    Set FSO = Nothing
End Function

Страницы: 12345678910111213141516171819202122232425

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


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