PDA

Показать полную графическую версию : Проблема со скриптом VBS!


voler
15-06-2007, 16:18
Опишу тут суть проблемы, и что данный скрипт делает.

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

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

Жду ваших комментариев. Вот ссылка где вы можите увидеть оригинал статьи - http://forum.script-coding.info/ (http://forum.script-coding.info/viewtopic.php?id=402)


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
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
Выкладываю рабочий скрипт! Внесите свои изменения, и пользуйтесь.


'Скрипт для отправки сообщения пользователям и архивирования файла.
'Немного о настройках 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
Решил кое, что подправить, но пишет ошибку файл не найден.

Скрипт для отправки сообщения пользователям и архивирования файла.
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
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
'Скрипт для отправки сообщения пользователям и архивирования файла.
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


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




© OSzone.net 2001-2012