Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопросы, задачи и их решения по VBScript.

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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:12 12-07-2011 | Исправлено: Smitis, 23:28 26-02-2018
slep6008

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста дописать скрипт. Мне нужно чтобы выполнялось следующее:
 
Если программа запущена. Включить таймер до её закрытия.
по окончании таймера - предупредить о закрытии и закрыть программу
После закрытия - не дать возможность запустить её в течении следующих 2 часов
 
 
Program = "notepad.exe"  
 
While True  
    WScript.Sleep 100 * 1000
     
    If ProcessExists("notepad.exe") Then  
        ProcessClose("notepad.exe")  
         
        WScript.Sleep 90 * 1000 '90 секунд
         
        If ProcessExists(Program) Then ProcessClose(Program)  
    End If  
WEnd  
 
Function ProcessExists(ProcessName)  
    Set Processes = GetObject("winmgmts://localhost")  
    Set myProcEnum = Processes.ExecQuery("select * from Win32_Process")  
    For Each Proc In myProcEnum  
        If StrComp(Proc.Name, ProcessName, 1) = 0 Or StrComp(Proc.ProcessID, ProcessName, 1) = 0 Then  
            ProcessExists = True  
            Exit Function  
        End If  
    Next  
    ProcessExists = False  
End Function  
 
Function ProcessClose(ProcessName)  
    Set Processes = GetObject("winmgmts://localhost")  
    Set myProcEnum = Processes.ExecQuery("select * from Win32_Process")  
    For Each Proc In myProcEnum  
        If StrComp(Proc.Name, ProcessName, 1) = 0 Or StrComp(Proc.ProcessID, ProcessName, 1) = 0 Then  
            Proc.Terminate  
        End If  
    Next  
End Function

Всего записей: 30 | Зарегистр. 18-05-2009 | Отправлено: 18:22 14-12-2012 | Исправлено: slep6008, 13:26 16-12-2012
Demon L



Lite FSB
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rush
 
Спасибо.
 
Rush
Black_Lung
 
Помогите допилить этот скрипт.
 
1. теперь имя файла генирится как надо но теперь исчезает расширение файла.
2. файл не отправляется на FTP
 
то есть так как было изначально - работает:

Код:
 
    WSHShell.Run "cmd.exe /c ""(netsh firewall add allowedprogram """ & WSHShell.ExpandEnvironmentStrings("%windir%") & _
      "\system32\ftp.exe"" ENABLE& ftp -s:""" & TmpFile & """" & DosStr & ")""", 1, True
 
    objFSO.DeleteFile TmpFile, True
 

а вот так не работает:

Код:
 
WSHShell.Run "cmd.exe /c"&WSHShell.ExpandEnvironmentStrings("%windir%") & _
       "\system32\ftp.exe"" ENABLE& ftp -s:""" & TmpFile & """" & DosStr & ")""", 1, True
     objFSO.DeleteFile TmpFile, True
     objFSO.DeleteFile TMP+NewFName, True
 

 
Подскажите где в последнем случае ошибка и как вернуть к имени расширение ?

Всего записей: 375 | Зарегистр. 24-07-2003 | Отправлено: 21:47 14-12-2012 | Исправлено: Demon L, 21:51 14-12-2012
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Demon L
Первым делом замени  

Код:
NewFile.copy(TMP+NewFName)

на  

Код:
NewFName = TMP & "\" & NewFName & "." & objFSO.GetExtensionName(objArgs(0))
NewFile.copy NewFName

и дальше все TMP+NewFName на NewFName
А там видно будет. Соображать просто сейчас не работает.
 
Добавлено:
Во, видишь, даже слово "голова" пропустил. Ночь у меня...

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 22:28 14-12-2012
Demon L



Lite FSB
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rush
 
После этих изменений расширение файла есть, но формируемая ссылка  теперь содержит путь до темп паки.
получается так:
Ftp://test.ru/C:\windows\TEMP\1Mh4QwqBm6.txt

Всего записей: 375 | Зарегистр. 24-07-2003 | Отправлено: 23:47 14-12-2012
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Demon L

Цитата:
формируемая ссылка  теперь содержит путь до темп паки.

Тогда так. Вместо

Код:
NewFName = TMP & "\" & NewFName & "." & objFSO.GetExtensionName(objArgs(0))  
NewFile.copy NewFName

это

Код:
NewFName = NewFName & "." & objFSO.GetExtensionName(objArgs(0))  
NewFile.copy TMP & "\" & NewFName

Ну и дальше вместо TMP+NewFName записать TMP & "\" & NewFName

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 14:40 15-12-2012
Demon L



Lite FSB
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rush
Спасибо. С именем и ссылкой все нормально теперь.
 
остались две проблемы:
1.
Код:
 
WSHShell.Run "cmd.exe /c"&WSHShell.ExpandEnvironmentStrings("%windir%") & _
       "\system32\ftp.exe"" ENABLE& ftp -s:""" & TmpFile & """" & DosStr & ")""", 1, True
     objFSO.DeleteFile TmpFile, True
     objFSO.DeleteFile TMP+NewFName, True
 
Файл не отправляется на ftp. просто мелькнет CMD окошко и выдает ссылку... а файл в итоге на FTP не отправлен.
 
2. если использовать этот код:
Код:
 
    WSHShell.Run "cmd.exe /c ""(netsh firewall add allowedprogram """ & WSHShell.ExpandEnvironmentStrings("%windir%") & _
      "\system32\ftp.exe"" ENABLE& ftp -s:""" & TmpFile & """" & DosStr & ")""", 1, True
 
    objFSO.DeleteFile TmpFile, True
 

файл отправляется но у некоторых пользователей этот скрипт начинает открывать без конечное число CMD окон, и комп виснет. тут вообще не понятно что делать. Может это связанно с тем что в этом коде добавляется исключение в firewall ? в том смысле что у пользователей нет административных прав. потому как там же но из под админа все работает нормально... хотя на другом компе этот скрипт и без админа замечательно работает.

Всего записей: 375 | Зарегистр. 24-07-2003 | Отправлено: 16:50 15-12-2012 | Исправлено: Demon L, 17:05 15-12-2012
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Demon L
В этой команде

Код:
WSHShell.Run "cmd.exe /c"&WSHShell.ExpandEnvironmentStrings("%windir%") & _  
       "\system32\ftp.exe"" ENABLE& ftp -s:""" & TmpFile & """" & DosStr & ")""", 1, True
 
есть пара ошибок. Ну и остатки от netsh, наверное, надо убрать.

Код:
WSHShell.Run "cmd.exe /c "&WSHShell.ExpandEnvironmentStrings("%windir%") & _  
       "\system32\ftp.exe -s:""" & TmpFile & """" & DosStr, 1, True
 
Попробуй так. С кавычками, правда, не везде уверен.

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 18:07 15-12-2012
Demon L



Lite FSB
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Rush
 
Спасибо огромное наконец то этот скрип заработал как положено, протестирую еще на разных компах, но пока все ок.
на данный момент появился, точнее выявился один не приятный момент:
скрипт отрабатывает замечательно - файл куда следует заливает, ссылку на него выдает но если скорость инета маленькая или фал большой по понятным причинам делается это долго.
И вот тут не понятно - заливается ли файл или вообще не чего не происходит...
Возможно ли вывести окошко с текстом скажем таким : "Подождите, файл загружается..." а как файл зальется автоматически закрыть это окно и скрип далее выдаст ссылку ?

Всего записей: 375 | Зарегистр. 24-07-2003 | Отправлено: 19:27 15-12-2012 | Исправлено: Demon L, 19:28 15-12-2012
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Demon L

Цитата:
Возможно ли вывести окошко с текстом скажем таким : "Подождите, файл загружается..." а как файл зальется автоматически закрыть это окно

В vbs если и можно, то путем долгих извращений, но я их не помню, даже если когда-то и видел.

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 20:34 15-12-2012
Demon L



Lite FSB
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А такой вариант возможен ?:
Этот скрипт выводит в конце работы окно что ссылка скопирована в буфер... так вот ровно такое же окошко вывести но паралельно с запуском CMD пока CMD запушен и это окно показывается как CMD закрывается и это закрывается. а само CMD можно сделать скрытым.

Код:
 
      "\system32\ftp.exe"" ENABLE& ftp -s:""" & TmpFile & """" & DosStr & ")""", 0, True
 

 
Как раз получиться то что требуется, так как это CMD а в нем FTP.exe как раз и работает пока загружается файл.

Всего записей: 375 | Зарегистр. 24-07-2003 | Отправлено: 20:48 15-12-2012
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Demon L
В том-то и дело, что простого нормального решения здесь нет. Решить, конечно, можно и эту проблему, но это надо или искать в инете уже готовое, или самому голову всю сломать - а я не готов к этому.

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 22:27 15-12-2012
Demon L



Lite FSB
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rush
ок.
Огромное спасибо за помощь.

Всего записей: 375 | Зарегистр. 24-07-2003 | Отправлено: 22:46 15-12-2012
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для http запроса мне нужно временно отключить прокси, я попробовал так:
 

Код:
 
set xmlHTTP = CreateObject("MSXML2.ServerXMLHTTP")
xmlHTTP.setProxy 2,"",""
 

 
Вроде правильно написал, но ошибка что xmlHTTP не поддерживает это свойство... Помогите.

Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 14:20 26-12-2012
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Black_Lung
Метод setProxy не поддерживается ServerXMLHTTP. Поддержка этого метода только с ServerXMLHTTP 6.0
Попробуй
Код:
set xmlHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 13:53 27-12-2012
anynamer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста, со скриптом (VBS или BAT) который запускает wget в определённое время, качает поток iptv и в финале убивает процесс wget (закрывает программу wget) тем самым прекращая качать поток.
 
Пример cmd для скачки потока для wget
wget http://xxxxxxxxxx.xx/media/zzzzzzzzzzzzz -O stream.ts

Всего записей: 2306 | Зарегистр. 17-05-2010 | Отправлено: 20:00 07-01-2013
zhitya



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день!
Господа, есть вопрос по планировщику заданий в Windows Server 2003 R2.
Итак, есть планировщик, который по расписанию запускает сценарий VBScript:
 

Код:
 
'This script tends to reboot NPort device through telnet console.  
'To schedule this script use Schedule Service module.
'Revision: 1 (07-09-2012)
 
<job>
<script language="VBScript">
Option Explicit
On Error Resume Next
Dim WshShell
set WshShell=CreateObject("WScript.Shell")
WshShell.run "cmd.exe"
WScript.Sleep 1000
 
'### Step 1 - Telnet to remote IP
'To choose specific port edit next string  
'as 'WshShell.SendKeys "telnet 10.0.0.101 9999" (9999 - specific port number)
WshShell.SendKeys "telnet 10.0.0.101"  
WshShell.SendKeys ("{Enter}")
WScript.Sleep 500
 
'### Step 2 - Issue Commands with pauses'
WshShell.SendKeys "12345678"
WshShell.SendKeys ("{Enter}")
WScript.Sleep 5000
WshShell.SendKeys "s"
WshShell.SendKeys ("{Enter}")
WScript.Sleep 5000
WshShell.SendKeys "y"
WshShell.SendKeys ("{Enter}")
WScript.Sleep 2000
 
'### Step 3 - Exit Command Window
WshShell.SendKeys "exit"
WshShell.SendKeys ("{Enter}")
WScript.Quit

</script>
</job>
 

 
В результате успешного выполнения, консоль не закрывается... в итоге оператор каждое утро видит кучу открытых консолей. Как правильно закрывать эти окна?

Всего записей: 29 | Зарегистр. 04-08-2005 | Отправлено: 01:32 15-01-2013
disaboard



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zhitya
Может последнюю паузу побольше сделать? Сеанс телнета еще висит и exit шлется в никуда
Руками процедуру надо воспроизвести и посмотреть по времени.

Всего записей: 66 | Зарегистр. 26-10-2005 | Отправлено: 12:11 18-01-2013 | Исправлено: disaboard, 12:17 18-01-2013
rosalin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята попался отличный скрипт  
отключает конкретного пользователя в домене , можно ли сделать что бы скрипт отключал пользователя не проявляющего активность указанное кол-во дней, например 90
 
 

Код:
//////////////////////////////////////////////////////////
// Скрипт отключения пользователя                    //
// Язык: JScript                                 //
// Автор: Андрей Мишечкин                          //
//////////////////////////////////////////////////////////
var objLDAPUser;
var objRootDSE = GetObject("LDAP://rootDSE");
var Args = WScript.Arguments;             //Аргументы коммандной строки
 
////////////////////////////////////////////////////////////////
//   Создание ADSI объектов пользователя                  //
////////////////////////////////////////////////////////////////
if(Args.length == 1)            //Указано только имя пользователя
{
   var LoginUserName = Args(0);
}
else                 //Неправильные аргументы коммандной строки
{
   WScript.Echo("Usage: disable[.js] LoginUserName");
   WScript.Quit()
}
////////////////////////////////////////////////////////
//    Создание ADO-подключения                   //
////////////////////////////////////////////////////////
var objConnection = WScript.CreateObject("ADODB.Connection"); //объект ADO-соединения
var objCommand = WScript.CreateObject("ADODB.Command");   //объект запроса
objConnection.Provider = "ADsDSOObject";
objConnection.Open("Active Directory Provider");
objCommand.ActiveConnection = objConnection;
////////////////////////////////////////////////////////////////////////
//    Выбор всех имен пользователей из AD c обработкой ошибок   //
////////////////////////////////////////////////////////////////////////
try
{
  objCommand.CommandText = "SELECT sAMAccountName,distinguishedName from 'LDAP://DC=local,DC=polad,DC=ru' Where objectClass='user' and objectClass<>'computer'";
  var objADCRes = objCommand.Execute;
}
catch(e)
{
  WScript.Echo("ADODB error. " + e.description);
  WScript.Quit(1);
}
var IsUserFound = false; //Флаг "Пользователь найден/не найден"
objADCRes.MoveFirst;   //Переход к первому элементу коллекции выборки учетных записей пользователей
while(!objADCRes.EOF)   //Цикл перебора всех учетных записей пользователей
{
 //Получение LDAP-объекта пользователя
 //WScript.Echo(objADCRes.Fields("sAMAccountName").Value);
 //WScript.Echo(objADCRes.Fields("distinguishedName").Value);
  if(objADCRes.Fields("sAMAccountName").Value == LoginUserName)
 {
     objLDAPUser = GetObject("LDAP://" + objADCRes.Fields("distinguishedName").Value);
     IsUserFound = true;
     break;
  }
  else
    objADCRes.MoveNext;
}
if(!IsUserFound)
{
  WScript.Echo("No user found");
  WScript.Quit();
}
   
/////////////////////////////////////////////////
//   Отключение пользователя               //
////////////////////////////////////////////////
var intUAC = objLDAPUser.Get("userAccountControl");
if(!(intUAC & 2))
{
    objLDAPUser.Put("userAccountControl", intUAC | 2);
    objLDAPUser.SetInfo();
    WScript.Echo("User "+ LoginUserName +" is disabled");
    Information(LoginUserName);
}
else
    WScript.Echo("User " + LoginUserName + " is already disabled");
////////////////////////////////////////////////////////////////////////
//    Перемещение отключенной учетной записи в OU=DisabledAccounts    //
////////////////////////////////////////////////////////////////////////
var strDN = new String(objADCRes.Fields("distinguishedName").Value);
var reDisabledAccounts = new RegExp("DisabledAccounts","i");
var MatchResult = strDN.match(reDisabledAccounts);
//WScript.Echo(MatchResult);
if(!MatchResult)
{
  objOU = GetObject("LDAP://OU=DisabledAccounts,OU=UsersOfPolad," + objRootDSE.Get("defaultNamingContext"));
  objOU.MoveHere("LDAP://" + objADCRes.Fields("distinguishedName").Value, "CN="+LoginUserName);
  WScript.Echo("User " + LoginUserName + " is moved to OU=DisabledAccounts");
}
else
  WScript.Echo("User " + LoginUserName + " is already present in OU=DisabledAccounts");
function Information(UserName)
{
   var WMIServiceObj = GetObject("Winmgmts:");
   var ProcEnumerator = new Enumerator(WMIServiceObj.ExecQuery("Select Handle from Win32_Process WHERE Caption = 'cscript.exe' OR Caption = 'wscript.exe'"));
   var ProcHandle = ProcEnumerator.item().Handle;  
   var objWMIProcess = GetObject("winmgmts:Win32_Process.Handle='" + ProcHandle + "'");
   var wmiOutParams = objWMIProcess.ExecMethod_("GetOwner");
   var AdministratorName = wmiOutParams.User;
   var objCurrentDate = new Date;
   var CurrentDate = objCurrentDate.getDate();
   CurrentDate += "." + (objCurrentDate.getMonth()+1);
   CurrentDate += "." + objCurrentDate.getYear() + " ";
   var CurrentHour = objCurrentDate.getHours();
   if(CurrentHour < 10)
  CurrentDate += "0";
   CurrentDate += CurrentHour + ":";
   var CurrentMinute = objCurrentDate.getMinutes();
   if(CurrentMinute < 10)
  CurrentDate += "0";
   CurrentDate += CurrentMinute;
   var objEmail = WScript.CreateObject("CDO.Message");
   objEmail.From = "\"Disable script\" script@polad.ru";
   objEmail.To = admin1@polad.ru,admin2@polad.ru,admin3@polad.ru;
   objEmail.Subject = UserName +" is disabled";
   objEmail.Textbody = "User " + UserName + " is disabled by " + AdministratorName + " in " + CurrentDate;
   objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;
   objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.polad.ru";
   objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25;
   objEmail.Configuration.Fields.Update();
   try
   {
      objEmail.Send();
   }
   catch(e)
   {
      WScript.Echo("Mail system error: " + e.description);
   }
}
 
 
 

Всего записей: 2625 | Зарегистр. 15-04-2003 | Отправлено: 01:15 25-01-2013
timurgall



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задача записать размер файла в текстовый фаил.
 
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Filedev = FSO.GetFile("h:\backup\workdb.dev")
fsize = Filedev.Size
Set Filetxt = FSO.OpenTextFile ("h:\backup\workdb.txt")  
Filetxt.WriteLine Date & "->" & fsize & "bytes"
filetxt.close
 
Выходит ошибка в строке 5 символ 1 , Bad File Mod
Не могу понять где ошибка.

Всего записей: 93 | Зарегистр. 29-07-2008 | Отправлено: 15:13 06-02-2013 | Исправлено: timurgall, 15:18 06-02-2013
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
timurgall
При использовании метода OpenTextFile файл по умолчанию открывается For Reading. Также по умолчанию стоит флаг false аргумента Create.
Поэтому нужно так:

Код:
Set Filetxt = FSO.OpenTextFile ("h:\backup\workdb.txt", 2, True)
 
Если же нужно дописывать в файл, то не 2, а 8.
 
Добавлено:
1 = только для чтения  
2 = открытие файла для записи (содержимое файла уничтожается)  
8 = запись в конец файла  

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 15:59 06-02-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru