Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Проблема со скриптом VBS! (http://forum.oszone.net/showthread.php?t=85456)

voler 15-06-2007 16:18 599731

Проблема со скриптом VBS!
 
Опишу тут суть проблемы, и что данный скрипт делает.

Данный скрипт запускается и сидит в памяти, и как только указанный файл открывается скрипт производит архивацию, и отсылает письмо пользователю, что файл был изменен, и скрипт опять просто весит в памяти, до следующей операции над файлом.

Но вот не задача, архивация не запускается, письмо отсылается и что самое обидное скрипт завершается. В чем может быть трабла. Проверялось на Win 2003 and XP.

Жду ваших комментариев. Вот ссылка где вы можите увидеть оригинал статьи - http://forum.script-coding.info/

HTML код:

Set fs = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set f = fs.GetFile("D:\distrib\Panasonic\info.xls")
x = f.DateLastModified
While 1
    If f.DateLastModified > x Then
        sendmail
        Set oExec = WshShell.Exec("C:\Program Files\WinRAR\rar.exe a -sfx -t -m3 -r -y -dh -agDD-MMM-YY-HH-MM -ep3 D:\info.rar D:\distrib\Panasonic\info.xls")
        x = f.DateLastModified
    End If
    WScript.Sleep 1000
Wend

Sub sendmail
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "от"
objEmail.To = "кому"
objEmail.Subject = "File was Modified"
objEmail.Textbody = "File was Modified"
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "учетка"
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "пароль"
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "сервер"
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send
WScript.Quit
End sub


amel27 16-06-2007 13:11 599954

voler
Цитата:

и что самое обидное скрипт завершается. В чем может быть трабла
убери "WScript.Quit" в конце процедуры
Цитата:

архивация не запускается
пробелы нужно заключать в кавычки, используй команду
Код:

WshShell.Run("""C:\Program Files\WinRAR\rar.exe"" a -sfx -t -m3 -r -y -dh -agDD-MMM-YY-HH-MM -ep3 D:\info.rar D:\distrib\Panasonic\info.xls")

voler 18-06-2007 09:42 600610

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

HTML код:

'Скрипт для отправки сообщения пользователям и архивирования файла.
'Немного о настройках rar.
'Не должно быть пробелов, и русских шрифтов в названии файла.
'Запуск winrar для полной архивации
'Для корректной работы скрипта необходимо наличие Winrar-а в директории c:\Program Files\WinRAR\winrar.exe
'**************************************************************************************
'Команда A — добавить в архив
'Ключ -SFX[имя ] — создать самораспаковывающийся архив
'Ключ -T — протестировать файлы после архивирования
'Ключ -M<n > — выбрать метод сжатия от 1 до 5
'Ключ -R — обрабатывать вложенные папки
'Ключ - y - Если указан этот ключ, то на все запросы будет автоматически даваться ответ "Да".
'Ключ -DH — открывать совместно используемые файлы
'Ключ -AG[формат ] — добавить к имени архива текущие дату и время формат DD-MMM-YY
'Ключ -EP3 — сохранять полные пути файлов, включая букву диска
'**************************************************************************************
Set fs = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set f = fs.GetFile("")' Тут указываем за чем следим? Т.е. файл или папку!
x = f.DateLastModified
While 1
    If f.DateLastModified > x Then
        sendmail
        WshShell.Run("""C:\Program Files\WinRAR\WinRAR.exe"" a -sfx -t -m3 -r -y -dh -agDD-MMM-YY-HH-MM -ep3 С:\Имя архива и путь.rar C:\Указываем, что архивируем") ' Тут проводяться настройки архивирования.
        x = f.DateLastModified
    End If
    WScript.Sleep 1000
Wend


Sub sendmail
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "" 'Тут указываем от кого отправляются сообщения.
objEmail.To = "" 'Список или одного получателя кому отправлять сообщения. Если список, то указываем через запятую.
objEmail.Subject = "File was Modified, Файл был изменен!" 'Тема письма.
objEmail.Textbody = "File was Modified, and server was created backup. Archive will keep 30 days, after it'll be delited!!! This is message, only inform you about somebody opened the ........." 'Само письмо!
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "" 'Учетная запись.
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "" 'Пароль.
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "" 'Сервер.
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 'Порт исходящего сервера.
objEmail.Configuration.Fields.Update
objEmail.Send
'WScript.Quit 'Эта строка должна быть закоменттрованна, для того чтобы скрипт не завершал работу. А ложился баюшки, до следующего открытия файла.
End sub


voler 19-06-2007 10:14 601137

Решил кое, что подправить, но пишет ошибку файл не найден.
HTML код:

Скрипт для отправки сообщения пользователям и архивирования файла.
filePath = "D:\distrib\Panasonic\info.xls"
archPath = "D:\distrib\Panasonic\info.rar"
winRarPath = "C:\Program Files\WinRAR\WinRAR.exe"
Set fs = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set f = fs.GetFile(filePath)' Тут указываем за чем следим?
x = f.DateLastModified
While 1
    If f.DateLastModified > x Then
        sendmail
                RetCode = WshShell.Run ("""winRarPath & "" a -sfx -t -m3 -r -y -dh -agDD-MMM-YY-HH-MM -ep3" " & archPath & " " &  filePath", 0, True)
        x = f.DateLastModified
    End If
    WScript.Sleep 1000
Wend


amel27 19-06-2007 12:53 601228

voler
с кавычками надо бы разобраться ;)
Код:

winRarPath = """C:\Program Files\WinRAR\WinRAR.exe"""
'...
WshShell.Run (winRarPath & " a -sfx -t -m3 -r -y -dh -agDD-MMM-YY-HH-MM -ep3 " & archPath & " " & filePath, 0, True)


voler 19-06-2007 14:38 601287

HTML код:

'Скрипт для отправки сообщения пользователям и архивирования файла.
filePath = "D:\distrib\Panasonic\info.xls"
archPath = "D:\distrib\Panasonic\info.rar"
winRarPath = """C:\Program Files\WinRAR\WinRAR.exe"""
Set fs = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set f = fs.GetFile(filePath)' Тут указываем за чем следим?
x = f.DateLastModified
While 1
    If f.DateLastModified > x Then
        sendmail
        WshShell.Run winRarPath & " a -sfx -t -m3 -r -y -dh -agDD-MMM-YY-HH-MM -ep3 " & archPath & " " & filePath, 0, True
        x = f.DateLastModified
    End If
    WScript.Sleep 1000
Wend

Sub sendmail
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "" 'Тут указываем от кого отправляются сообщения.
objEmail.To = "" 'Список или одного получателя кому отправлять сообщения. Если список, то указываем через запятую.
objEmail.Subject = "File was Modified, Файл был изменен!" 'Тема письма.
objEmail.Textbody = "File was Modified, and server was created backup. Archive will keep 30 days, after it'll be delited!!! This is message, only inform you about somebody opened the ........." 'Само письмо!
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "" 'Учетная запись.
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "" 'Пароль.
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "" 'Сервер.
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 'Порт исходящего сервера.
objEmail.Configuration.Fields.Update
objEmail.Send
'WScript.Quit 'Эта строка должна быть закоменттрованна, для того чтобы скрипт не завершал работу. А ложился баюшки, до следующего открытия файла.
End sub

Может скажешь нужно, аналог данного скрипта, но в место отправки нужно чтобы писался лог открытия файла, конкретным пользователем в домене?


Время: 07:03.

Время: 07:03.
© OSzone.net 2001-