Войти

Показать полную графическую версию : [решено] Скрипт поздравляющий с днем рождения


maxim43g
09-01-2020, 10:25
Добрый день.
Скажите возможно ли, сделать следующее.
Есть файл с датой рождения и Ф.И.О.
есть .vbs скрипт который может отправлять сообщения в домене (msg * /server:" & strComputers(intCounter) & " /time:0 " & strMessage, 0, False)
возможно ли, создать скрипт, который бы каждый день чекал даты из файлы, и если у человека день рождения, то он отправлял бы сообщение вида "Поздравляем с днем рождения + "Ф.И.О. из файла""?

megaloman
09-01-2020, 15:22
maxim43g, В чём загвоздка? Прочесть текстовый файл? Организовать цикл по каждой строке и выделить в ней дату? Сравнить день и месяц с Now? При совпадении отдать полученное в сообщалку? Полученный скрипт поместить в планировщик, чтобы он его ежедневно вызывал.
Чтобы написать функциональный скрипт, хотелось бы иметь текстовый файл, как запускается сообщение (приведенная строка не совсем понятна), смысл параметров при запуске - где сообщение, где адресат. Сообщение посылается всем или конкретному хэппибестдируемому?

Iska
09-01-2020, 17:18
Сообщение посылается всем или конкретному хэппибестдируемому? »
Судя по:
& strComputers(intCounter) & »
— каждой машине в списке.

maxim43g
10-01-2020, 11:36
maxim43g, В чём загвоздка? Прочесть текстовый файл? Организовать цикл по каждой строке и выделить в ней дату? Сравнить день и месяц с Now? При совпадении отдать полученное в сообщалку? Полученный скрипт поместить в планировщик, чтобы он его ежедневно вызывал.
Чтобы написать функциональный скрипт, хотелось бы иметь текстовый файл, как запускается сообщение (приведенная строка не совсем понятна), смысл параметров при запуске - где сообщение, где адресат. Сообщение посылается всем или конкретному хэппибестдируемому? »
всем в домене
приложил полностью. скрипт

maxim43g
10-01-2020, 11:37
вот

megaloman
10-01-2020, 17:55
maxim43g, Изменения отметил красным цветом
Пропишите свой путь к файлу с списком дней рождения
Отладочную выдачу надо удалить
Полностью Ваш скрипт не тестировал - только кусок
...................................
...................................
...................................
Option Explicit
Const ADS_SCOPE_SUBTREE = 2
...................................
...................................
...................................
strMessage = GetBirthDay("Z:\Box_In\birthday.txt")
If strMessage = "" Then Wscript.Quit

MsgBox "Отладка !!!!" + vbcrlf + strMessage

On Error Resume Next
...................................
...................................
...................................

'''''''''' 'Asks the user to type the message

''''''''''strMessage = InputBox("Type the message to be sent to network computer(s)","Messenger Service", strMessage)
''''''''''If strMessage = "" Then
'''''''''' Wscript.Echo "Operation canceled by the user"
'''''''''' Wscript.Quit
''''''''''End If

...................................
...................................
...................................
End Function

Function GetBirthDay(FileIn)
Dim arrAlls
Dim strBirth
Dim intSpace
Dim datBirth

GetBirthDay = ""
On Error Resume Next

With CreateObject("Scripting.FileSystemObject").OpenTextFile(FileIn, 1, False)
If Err.Number <> 0 Then
Wscript.Echo "File " + FileIn + vbCrLf + Err.Description + "(" + CStr(Err.Number) + ")"
On Error GoTo 0
Exit Function
End If
On Error GoTo 0
arrAlls = Split(.ReadAll, vbCrLf)
.Close
End With
For Each strBirth In arrAlls
strBirth = Trim(strBirth)
If strBirth <> "" Then
intSpace = InStr(1, strBirth, " ")
If intSpace > 0 Then
datBirth = Left(strBirth, intSpace - 1)
If IsDate(datBirth) Then
datBirth = CDate(datBirth)
If Month(Date) = Month(datBirth) And Day(Date) = Day(datBirth) Then
' GetBirthDay = GetBirthDay + vbCrLf + Mid(strBirth, intSpace + 1)
GetBirthDay = GetBirthDay + vbCrLf + strBirth
End If
End If
End If
End If
Next
If GetBirthDay <> "" Then GetBirthDay = "С днём рождения!" + GetBirthDay
End Function
15.06.1955 Василий Иванович Пендилюкин

10/01/1900 Дмитрий Донской
jasgjsahg sajaskh lkjsaljl

7.10.1952 Путин Владимир Владимирович
10.01.1600 Чингиз Хан
14.06.1946 Трамп Дональд Фредерикович


Не знаю, как команда msg отреагирует на наличие символов CrLf dв сообщении - я их сделал, чтобы выделить каждого поздравляемого отдельной строкой при совпадении дат дней рождения. При проблемах - заменить
strMessage
на, например,
Replace(strMessage,vbCrLf," === ")
при написании метода Run,
либо при вызове функции
strMessage = Replace(GetBirthDay("Z:\Box_In\birthday.txt"),vbCrLf," === ")

maxim43g
14-01-2020, 12:55
почему то в вашей версии скрипта сообщения не отправляются всем ПК в домене

megaloman
14-01-2020, 15:02
maxim43g, Тестовое сообщение появляется? ("Отладка !!!!" .....)? Может, в этот день нет родившихся?
Я всего лишь заменил в вашем скрипте ручной ввод сообщения, и ничего другого я не трогал
Обязательно замените

strMessage = GetBirthDay("Z:\Box_In\birthday.txt")
на
strMessage = Replace(GetBirthDay("Z:\Box_In\birthday.txt"),vbCrLf," === ")

так как msg неправильно воспринимает символы возврат каретки и перевод строки (CrLf)

Я не стал делать аварийное сообщение, если скрипт не находит реестр с днями рождения - решил, что если помещать скрипт в назначенные задания, это сообщение будет вредно, поэтому, на этапе отладки, я вставил отладочное сообщение, чтобы оценить работу скрипта

Iska
14-01-2020, 17:02
так как msg неправильно воспринимает символы возврат каретки и перевод строки (CrLf) »
Да, в msg.exe технология, которая работала для net.exe send (http://forum.oszone.net/post-1964859.html#post1964859), не работает. Но есть обходной путь:
@echo off
(
echo Мама
echo мыла
echo раму
) | msg.exe *

exit /b 0

(к сожалению, для кириллицы пакетный файл придётся сохранять в ANSI/1251). Также работает подача на вход msg.exe содержимого внешнего текстового файла.

maxim43g
17-01-2020, 09:15
maxim43g, Тестовое сообщение появляется? ("Отладка !!!!" .....)? Может, в этот день нет родившихся?
Я всего лишь заменил в вашем скрипте ручной ввод сообщения, и ничего другого я не трогал
Обязательно замените
strMessage = GetBirthDay("Z:\Box_In\birthday.txt")
на
strMessage = Replace(GetBirthDay("Z:\Box_In\birthday.txt"),vbCrLf," === ")
так как msg неправильно воспринимает символы возврат каретки и перевод строки (CrLf)
Я не стал делать аварийное сообщение, если скрипт не находит реестр с днями рождения - решил, что если помещать скрипт в назначенные задания, это сообщение будет вредно, поэтому, на этапе отладки, я вставил отладочное сообщение, чтобы оценить работу скрипта »
все заработало, большое спасибо!




© OSzone.net 2001-2012