Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Скрипт поздравляющий с днем рождения

Ответить
Настройки темы
Любой язык - [решено] Скрипт поздравляющий с днем рождения

Новый участник


Сообщения: 45
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 10:25, 09-01-2020

 

Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 15:22, 09-01-2020 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Сообщение посылается всем или конкретному хэппибестдируемому? »
Судя по:
Цитата maxim43g:
& strComputers(intCounter) & »
— каждой машине в списке.

Отправлено: 17:18, 09-01-2020 | #3


Новый участник


Сообщения: 45
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 11:36, 10-01-2020 | #4


Новый участник


Сообщения: 45
Благодарности: 1

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip netmessenger-777.zip
(1.6 Kb, 4 просмотров)

вот

Отправлено: 11:37, 10-01-2020 | #5


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar я200110_изменения.vbs.rar
(2.2 Kb, 4 просмотров)

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," === ")

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 17:55, 10-01-2020 | #6


Новый участник


Сообщения: 45
Благодарности: 1

Профиль | Отправить PM | Цитировать


почему то в вашей версии скрипта сообщения не отправляются всем ПК в домене

Отправлено: 12:55, 14-01-2020 | #7


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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

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

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

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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 14-01-2020 в 16:15.


Отправлено: 15:02, 14-01-2020 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата megaloman:
так как msg неправильно воспринимает символы возврат каретки и перевод строки (CrLf) »
Да, в msg.exe технология, которая работала для net.exe send, не работает. Но есть обходной путь:
Код: Выделить весь код
@echo off
(
	echo Мама
	echo мыла
	echo раму
) | msg.exe *

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

Отправлено: 17:02, 14-01-2020 | #9


Новый участник


Сообщения: 45
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 09:15, 17-01-2020 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Скрипт поздравляющий с днем рождения

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Поздравляем Blast aka Павел Кравченко с Днем Рождения! Baw17 Флейм 134 19-04-2019 23:03
С днем космонавтики! CyberDaemon Флейм 7 12-04-2014 22:09
Поздравления с днем Рождения 1.0 OSZone Software Новости программного обеспечения 0 02-03-2013 10:30
Поздравления с Днем энергетика. gora Флейм 2 25-12-2009 20:22




 
Переход