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

» Программирование "удобняшек" на VBScript

Автор: DreamDok
Дата сообщения: 09.03.2011 05:42
Ребята, подскажите.Есть скриптик для отправки мыла.Работает исправно только при наличии указанного аттача.А в моём случае скрипт запускаться на разных машинах и бывает что на какой то системе нет этого файла, в таком случае выдаётся ошибка и отправка не происходит.Как сделать чтобы он слал на почту независимо от того есть прикреплённый файл или нет?


Код: Const EmailFrom = "login@yandex.ru"
Const EmailPassword = "pass"
Const strSmtpServer = "smtp.yandex.ru"
Const EmailTo = "login.mail.ru"
Set objEmail = CreateObject("CDO.Message")

objEmail.From = EmailFrom
objEmail.To = EmailTo
objEmail.AddAttachment "C:\Windows\test.zip"
objEmail.Subject = "test"
objEmail.Textbody = "test"
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") = EmailFrom
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = EmailPassword
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSmtpServer
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
objEmail.Configuration.Fields.Update
objEmail.Send
WScript.Quit
Автор: Rush
Дата сообщения: 09.03.2011 06:35
DreamDok

Цитата:
Каким образом в vb скриптах вызвать переменную?к примеру "C:\Windows\test.zip" в том же батнике было бы %systemroot%\test.zip
Читал про ExpandEnvironmentStrings и ничерта не понял как оно работает.

1) Создается объект

Код: Set WshShell = CreateObject("WScript.Shell")
Автор: DreamDok
Дата сообщения: 09.03.2011 07:07
Благодарю за развёрнутый ответ, теперь всё встало на свои места.Вот только как в переменной выставить текущую директорию(то место откуда запускается скрипт).%DIR% не срабатывает (
Автор: Rush
Дата сообщения: 09.03.2011 07:31
DreamDok

Цитата:
Благодарю за развёрнутый ответ, теперь всё встало на свои места.Вот только как в переменной выставить текущую директорию(то место откуда запускается скрипт).%DIR% не срабатывает (

Папка в которой находится скрипт

Код: Set fso = CreateObject("Scripting.FileSystemObject")
ScriptFolderPath = fso.GetParentFolderName(WScript.ScriptFullName)
Автор: DreamDok
Дата сообщения: 09.03.2011 07:40
Всё работает.Спасибо ещё раз
Автор: ComradG
Дата сообщения: 11.03.2011 21:58
Free_Soft
скажу честно, запарился я с реализацией твоего вопроса на vbs'ках (причина - массивы). но зато переписал код на PoSh'е. прощу прощения, что не смог таки помочь, однако это не значит, что я целиком отказался от данной затеи.
Автор: Rush
Дата сообщения: 12.03.2011 01:44
ComradG
Free_Soft
Это не то, что вы хотите?
http://forum.script-coding.com/viewtopic.php?id=522
http://forum.script-coding.com/viewtopic.php?id=5197
Автор: Free_Soft
Дата сообщения: 12.03.2011 07:35
ComradG
ключ офиса у меня не показывает....
Rush
Да, пасиб, то, что нужно. Один только вопрос: можно ли здесь добавить проверку на существование параметра DigitalProductID в проверке Office? Просто проблема с адресом возникает на х64 машине с х86 офисом. В этом случае параметр этот живет уже здесь:

Код: HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Registration\{90140000-003B-0000-0000-0000000FF1CE}\DigitalProductID
Автор: Rush
Дата сообщения: 12.03.2011 09:53
Free_Soft

Цитата:
можно в скрипте как-то сделать перенаправление?

Попробуй заменить строку

Код: DigitalProductIdOffice = MicroSoft & "\Office\" & word.Version & "\Registration\" & _
word.ProductCode & "\DigitalProductId"
Автор: Free_Soft
Дата сообщения: 12.03.2011 10:14
Rush
немного уточнил:

Код: If IsError (WshShell.RegRead("HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Registration\" & _
word.ProductCode & "\DigitalProductId")) Then
DigitalProductIdOffice = "HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Registration\" & _
word.ProductCode & "\DigitalProductId"
Err.Clear
Else
DigitalProductIdOffice = "HKLM\SOFTWARE\Microsoft\Office\14.0\Registration\" & _
word.ProductCode & "\DigitalProductId"
End If
Автор: Rush
Дата сообщения: 12.03.2011 10:28
Free_Soft
А зачем переменную DigitalProductIdOffice местами поменял?
Автор: Free_Soft
Дата сообщения: 12.03.2011 10:29
Rush
ну а как? если есть Wow6432Node ищем ней, else ищем в "нормальном" пути...
Автор: Rush
Дата сообщения: 12.03.2011 10:33
Free_Soft

Цитата:
ну а как? если есть Wow6432Node ищем ней, else ищем в "нормальном" пути...

Там стоит IsError - это значит, что если такого ключа нет - берем после Then, если есть - Else.
Автор: Free_Soft
Дата сообщения: 12.03.2011 10:36
Rush
поменял. теперь, если нет Wow6432Node, все ок (например, на Win XP), а если есть - пустое значение
Автор: Rush
Дата сообщения: 12.03.2011 10:41
Free_Soft
А по тому пути точно есть ключ? Можешь привести значение этого параметра?
И, вообще, полный путь - как он есть.
Автор: Free_Soft
Дата сообщения: 12.03.2011 11:23
Rush
Хм.. сейчас попробовал на Win7 x86 все, как ты сказал - ключ показывает, правда, тот, о котором я выше писал - но это уже другой вопрос. Раньше пробовал все это на Win7 x64 - были траблы, описанные выше. Вечером до той системы доберусь - отпишусь тогда
Автор: ComradG
Дата сообщения: 12.03.2011 13:42
Rush
за ссылки спасибо, но мне оные скрипты ни к чему. да и относительно выуживания ключа офиса я уже постил.

Free_Soft
слово внимательность нам не знакомо? я ж в пошевском скрипте специально ветви вынес отдельно, а потому тебе оставалось забить нужные ветки семерки. пошевский скрипт заточен под ХР, но подставляя нужные значения реестра работает и в семерке (проверял под виртуалями).
Автор: Rush
Дата сообщения: 12.03.2011 13:54
ComradG

Цитата:
за ссылки спасибо, но мне оные скрипты ни к чему.

Ты ведь писал, что запарился на vbs реализовать. Ну и подумал, что тебе интересно будет.
Не сердись - мир, дружба, жвачка.
Автор: ComradG
Дата сообщения: 12.03.2011 14:18
Rush
да, запарился! но я же не примянул сказать СПАСИБО!!! а реализовать хотелось самому. но раз уж за меня все сделано, то я и заморачиваться наверное не буду.
и не сержусь я вовсе!!! напротив, спасибо за дельные советы и ссылки!!!
Автор: Accessor
Дата сообщения: 12.03.2011 15:15
Камрады, нашёл в Инете вот такой код:
Цитата:
'On Error Resume NextConst ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = "SELECT Name FROM 'LDAP://dc=my,dc=domain' WHERE objectCategory='computer'"
Set objRecordSet = objCommand.Execute

Wscript.Echo objRecordSet.RecordCount
но он упрямо показывает мне 0.
Кто подскажет, как вычитать доменные компьютеры или пользователей?
Автор: Rush
Дата сообщения: 12.03.2011 15:41
Accessor

Цитата:
'On Error Resume NextConst ADS_SCOPE_SUBTREE = 2

Тут константа закомментирована. Попробуй на другую строку перенести.

Код: Const ADS_SCOPE_SUBTREE = 2
Автор: Free_Soft
Дата сообщения: 13.03.2011 14:06
Rush
ComradG
спасибо за помощь. Но в случае с офисом 2010 он все равно какой-то странный ключ из параметра читает. Буду разбираться дальше
Автор: ComradG
Дата сообщения: 13.03.2011 17:07
Free_Soft

Цитата:
Но в случае с офисом 2010 он все равно какой-то странный ключ из параметра читает.
я бы проверил, если бы сам пользовался офисом, а так - извиняй.
Автор: Accessor
Дата сообщения: 15.03.2011 14:06
Rush

Цитата:
Попробуй на другую строку перенести.

Заработало
Я не силён в vbs, поясните, плиз, смысл обеих строк:
1.On Error Resume NextConst ADS_SCOPE_SUBTREE = 2
2. Const ADS_SCOPE_SUBTREE = 2
весь остальной код мне, вроде как, понятен.

Добавлено:
Опа, разобрался. Короче ситуация следующая. Пример скрипта я взял здесь. Но там ошибка в первой строке, поэтому я её закомментировал и зазал вопрос в топике.
И только сейчас я понял, что там не одна, а две строки. Должно быть так

Код: On Error Resume Next
Const ADS_SCOPE_SUBTREE = 2
Автор: cin
Дата сообщения: 16.03.2011 16:41
Помогите написать скрипт считывающий все значения определенной ветки реестра
например
HKEY_USERS\S-1-5-21-121545-12154-564-454\Software\1C\1Cv7\7.7\Titles

Это пути до баз 1С, как считать все значения которые хранятся в этой ветке? Проблема в том, что Name и Data мне заранее не известны Type REG_SZ

Значения могут быть такие
Name c:\1c
Data база1
Автор: AndVGri
Дата сообщения: 17.03.2011 03:46
cin

Код:
Set Sh = CreateObject("WScript.Shell")
key = "HKEY_USERS\S-1-5-21-121545-12154-564-454\Software\1C\1Cv7\7.7\Titles\"
WScript.Echo Sh.RegRead(key & "Name")
Автор: cin
Дата сообщения: 17.03.2011 14:24
Проблема в том что ssid мне заранее не знаком, а скрипт запускается с системными правами на всех компьютерах сети
Автор: AndVGri
Дата сообщения: 18.03.2011 03:08
cin
А SID чей тогда? Если по account, ищи

Код:
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Account",,48)

For Each objItem in colItems
    WScript.Echo "Caption: " & objItem.Caption
    WScript.Echo "Description: " & objItem.Description
    WScript.Echo "Domain: " & objItem.Domain
    WScript.Echo "InstallDate: " & objItem.InstallDate
    WScript.Echo "LocalAccount: " & objItem.LocalAccount
    WScript.Echo "Name: " & objItem.Name
    WScript.Echo "SID: " & objItem.SID
    WScript.Echo "SIDType: " & objItem.SIDType
    WScript.Echo "Status: " & objItem.Status
    WScript.Echo ""
Next
Автор: Weinaum
Дата сообщения: 19.03.2011 13:02
посмотрите, плз,
есть скрипт, с помощью которого таскменеджер под виста - вин 7 всегда запускается с опцией
"показывать процессы всех пользователей"
Брал здесь
Все работало нормально, на вин 7 х64, но в последние дни в связи с установкой сп1 не запускается в таком режиме. Если откатить изменения в реестре - то запускается, и по нажатию на кнопку "показывать процессы всех пользователей" тоже..
Интересно, что на другой машине, точно такой же вин 7 х64, где сначала был установлен сп1 а потом использован данный vbs, все нормально, работает...
В общем, если кому не сложно, посмотрите, что можно сделать, чтобы таскменеджер гарантированно запускался с данной опцией.
Автор: Cancer_to_Shanghai
Дата сообщения: 20.03.2011 11:02
Для одной невменяемой мини-игры, был сделан такой скрипт: Set WshShell=WScript.CreateObject("WScript.Shell")
WScript.Sleep(1500)
For i=1 to 99
WshShell.SendKeys("{LEFT}")
WshShell.SendKeys("{RIGHT}")
Next


Всего-то и надо - тупо долбить по стрелкам. Причём, судя по всему - неограниченное время


Запускаю в ком. строке: cscript.exe C: 123.vbs

А оно сразу же:

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

F:\Documents and Settings\Администратор>cscript.exe C: 123.vbs
Сервер сценариев Windows (Microsoft R) версия 5.7
c Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.

Ошибка CScript: Ошибка при выполнении сервера сценариев Windows. (Недостаточно п
амяти для завершения операции. )

Запускал сразу же после загрузки винды, ЦП=35, Память загружена на 39%
Более шоколадных параметров не добиться.

А ему всё памяти мало


Чего и как неправильно в моих действиях!?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

Предыдущая тема: Работа в Delphi c CryptoApi


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