Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Открыть новую тему     Написать ответ в эту тему

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Старые и смежные темы: по CMD и в Программах | по PowerShell | В помощь системному администратору | Прикладное программирование

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?
Книги в PDF
Cheat Sheets
 

Cmd
Для перекодирования кириллицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы
 
Готовые решения и частые вопросы
 
Описания работы команд и символов участниками темы:
setlocal enabledelayedexpansion и переменные окружения
символы & и && в командной строке
Переменная %0
 
Полезные ссылки и утилиты

WSH (VBScript, JScript)
Программирование "удобняшек" на VBScript

Примечания:
• Большие куски кода заключайте в тэг [ more ]
• Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте код без пробелов иначе сценарий может работать неправильно. Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

Всего записей: 11113 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KLASS

Цитата:
Не понял, как в $subj отправить новый IP

ну, дык:

Код:
$sabj = $new_ip

 

Цитата:
Потом, когда выполняется команда mail-send вылазит окно авторизации.

так, пароль-то надо ему давать:

Код:
mail-send $new_ip $new_ip 'login@mail.ru' 'this_is_password'

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 19:39 25-11-2019
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2

Цитата:
$sabj = $new_ip

Ставил, а он мне присылал $new_ip в $subj
перегрузил Powershell ISE и на те вам, пришел IP
Сейчас попробую все это собрать, сенкс.

Всего записей: 11113 | Зарегистр. 12-10-2001 | Отправлено: 19:48 25-11-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KLASS

Цитата:
перегрузил Powershell ISE

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

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 19:52 25-11-2019
HENDELF

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа, напишите как сделать, чтоб каждый час копировался файлик  на на другой диск в определенную папку?

Всего записей: 416 | Зарегистр. 22-02-2006 | Отправлено: 20:37 25-11-2019
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2

Цитата:
эту гадость поддерживать перестали

А как тогда отладку производить?
Вопросы:
1. зачем два раза login\pass в самой функции и в mail-send
2. вставил mail-send $new_ip $new_ip 'from@bk.ru' 'password'
запускаю сценарий (посмотри, пожалуйста) из планировщика - письма нет.
Если в Powershell ISE, то вообще перестал понимать mail-send пишет

Цитата:
mail-send : Имя "mail-send" не распознано как имя командлета, функции, файла сценария или выполняемой программы

 
 
Добавлено:
Мля, убрал
Цитата:
$new_ip $new_ip 'from@bk.ru' 'password'
теперь не матерится, что
это не командлет в Powershell ISE, но тогда снова окно авторизации и письмо приходит в теме с IP

Всего записей: 11113 | Зарегистр. 12-10-2001 | Отправлено: 20:37 25-11-2019 | Исправлено: KLASS, 20:44 25-11-2019
sniffspb



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Bat в PowerShell.  
Спасибо, шикарно получилось!
Но сценарий немного изменился, нужно проверить существование 4х файлов с различными расширениями.
Если существуют все 4 то выполнить 4.txt.
Если какого либо файла нет, то удалить те которые существуют.
В bat я вижу это так -  
 
@echo off
cd "C:\Program Files\test"
if not exist 1.jpg goto 1
if not exist 2.mp3 goto 1
if not exist 3.png goto 1
if not exist 4.txt goto 1
start 4.txt
exit
:1
del 1.jpg
del 2.mp3
del 3.png
del 4.txt
exit

Всего записей: 24 | Зарегистр. 09-05-2007 | Отправлено: 21:02 25-11-2019
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
HENDELF

Цитата:
чтоб каждый час копировался файлик  

В планировщике заданий указать на батник в одну строку
copy /Y C:\test.txt D:\test\test.txt
/Y-параметр, чтобы не было запроса на перезапись файла на диске D
В задании вкладка Триггеры

Всего записей: 11113 | Зарегистр. 12-10-2001 | Отправлено: 21:06 25-11-2019 | Исправлено: KLASS, 21:12 25-11-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KLASS

Цитата:
А как тогда отладку производить?

VS Code, сам PS умеет дебажить...
 

Цитата:
1. зачем два раза login\pass в самой функции и в mail-send  

Внутри функции - задаются значения параметров по умолчанию, их может и не быть...
Снаружи, при вызове функции, можем задавать другие значения.
 

Цитата:
запускаю сценарий

Должно быть так:

Код:
function mail-send {
    param(
        $subj = 'ALARM',
        $body = 'IP сменился'
        $login= 'from@bk.ru',
        $password = 'password'
    )
    $pass = convertto-securestring $password -aspl -force
    $cred = new-object system.management.automation.pscredential ($login, $pass)
    $from = 'from@bk.ru'
    $to = 'to@bk.ru'
    $server = 'smtp.mail.ru'
    $port = 25
    send-mailmessage -fr $from -to $to -smtps $server -port $port -subj $subj -body $body -cred $cred -usessl -enc UTF8
}
 
$ext_ip="D:\ext_ip.txt"
$def_ip="0.0.0.0"
$FileExists = Test-Path $ext_ip
If (!$FileExists) {$def_ip | Out-File $ext_ip}
 
$new_ip = (test-connection www.yandex.ru -count 1).ipv4address.ipaddresstostring
$old_ip = Get-Content -Path $ext_ip -TotalCount 1
 
If ($new_ip -ne $old_ip) {
    $new_ip | Out-File $ext_ip
    mail-send $new_ip 'Изменяем тело письма' 'from@bk.ru' 'password'
}

 

Цитата:
тогда снова окно авторизации и письмо приходит в теме с IP

Скрипт не совсем правильно составлен, потому могло быть, что угодно...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 21:56 25-11-2019 | Исправлено: YuS_2, 22:00 25-11-2019
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Так взлетело, но письмо отправляется каждый раз при выполнении задания в планировщике, независимо от того, сменился IP или нет.
 
Добавлено:
И IP выдает левые, и разные, совсем не тот, который в данный момент )

Всего записей: 11113 | Зарегистр. 12-10-2001 | Отправлено: 22:22 25-11-2019
VVL99

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21 (пост)
Цитата:
на powershell  
Это точная копия моего варианта, а нужно было сделать копию с bat.
Что и сделал YuS_2
В любом случае это всё на пользу, вообще интересно видеть разное исполнение.

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 22:27 25-11-2019
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
вернул часть кода

Цитата:
($Rout = ping -r 1 -n 1 www.yandex.ru) | Out-Null
$new_ip = ($Rout | Select-String '(\D+:\s)(\S+)').Matches.Groups.Value[2]
$old_ip=Get-Content -Path $ext_ip -TotalCount 1
 

IP-шник теперь точный, но шлет письма каждые 10 минут, независимо сменился тот IP или нет
 
Добавлено:
Вроде настроил, щаз проверю несколько раз и выложу.
 
Добавлено:
Сценарий PowerShell для отслеживания внешнего, динамического IP роутера и отсылки письма, если IP изменился.

Всего записей: 11113 | Зарегистр. 12-10-2001 | Отправлено: 22:38 25-11-2019 | Исправлено: KLASS, 01:18 26-11-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KLASS

Цитата:
И IP выдает левые, и разные, совсем не тот, который в данный момент

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

Цитата:
IP-шник теперь точный

Не критично, но, всё же, я бы изменил шаблон на такой:

Код:
($Rout = ping -r 1 -n 1 www.yandex.ru) | Out-Null  
$new_ip = (sls -inp $rout -patt '(?<=:\s+)[\d.]+').matches.value  
$old_ip = Get-Content -Path $ext_ip -TotalCount 1

 

Цитата:
но шлет письма каждые 10 минут, независимо сменился тот IP или нет

Значит где-то чего-то недоделано. По условию, при выполнении скрипта, почта будет уходить, только если выполнится условный блок:

Код:
if ($new_ip -ne $old_ip){...}

то бишь если $new_ip -ne $old_ip - истина, т.е. они не совпадают...
 
Добавлено:

Цитата:
mail-send $new_ip 'IP сменился' 'from@bk.ru' 'password'

Кстати, эту строку можно и так записать:

Код:
mail-send -sabj $new_ip -body 'IP сменился' -login 'from@bk.ru' -password 'password'

или так, учитывая то, что параметры имеют уже значения:

Код:
mail-send -sabj $new_ip -pass 'password'

либо вообще без значений вызывать:

Код:
mail-send

но параметры можно опускать, только если эти параметры имеют соответствующие значения по умолчанию в описании самой функции. Если параметры указываются не по порядку или какие-либо параметры не указываются, то необходимо обязательно указывать имена аргументов (например -pass, можно с сокращениями)

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 00:32 26-11-2019 | Исправлено: YuS_2, 00:35 26-11-2019
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2

Цитата:
но, всё же, я бы изменил шаблон на такой:  

Проверил-работает.

Цитата:
либо вообще без значений вызывать:  

Тоже работает, хотя ты чуть ранее говорил )

Цитата:
так, пароль-то надо ему давать:  
 
Код:
mail-send $new_ip $new_ip 'login@mail.ru' 'this_is_password'

Стало-быть давать пароль не обязательно, я так и пробовал вначале, но т.к. скрипт
был еще сырой, то окно авторизации видно и вылазило.
Внес эти поправки в пост со сценарием.

Всего записей: 11113 | Зарегистр. 12-10-2001 | Отправлено: 01:22 26-11-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KLASS
Цитата:
Так взлетело

Это странно ибо Send-MailMessage использует всё тот же System.Net.Mail.SmtpClient

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 06:49 26-11-2019
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KLASS
Не корысти ради, а факта для : ваши чудные пошики не работают на Windows 7 / 2008 Server. Понимаю, что эти ОС ныне уже палеатив, но всё же. А скрипт, который использую я, в том числе с добавкой, позволяет получить "белый адрес" для последующего прямого подключения тем же Radmin'ом, например ...

Всего записей: 1101 | Зарегистр. 16-01-2013 | Отправлено: 07:52 26-11-2019
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Еще раз перепроверил, сначала сразу через планировщик (хотя, потому и в тему пришел с вопросом, что работать перестало)-не взлетает. После в PowerShell ISE посмотрел, чего скажет:

Цитата:
Исключение при вызове "Send" с "4" аргументами: "Неправильная последовательность команд. Отклик сервера: Administrative prohibition -- auth orization required.  Users in your domain are not allowed to send email without authorization.

vasyosuol_24
Там, потому как флейм.
 
 
 

Всего записей: 11113 | Зарегистр. 12-10-2001 | Отправлено: 08:24 26-11-2019 | Исправлено: KLASS, 08:50 26-11-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KLASS

Цитата:
я так и пробовал вначале

Так, да не так... ты скопировать-то скопировал, но изменения внес неправильно:
 25-11-2019

Цитата:
$cred = new-object system.management.automation.pscredential ($login, $password)

а у меня было:
 25-11-2019

Цитата:
$cred = new-object system.management.automation.pscredential ($login, $pass)

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

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 08:40 26-11-2019
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2

Цитата:
($login, $pass)

Да, это я пропечатал ($login, $password), каюсь.

Всего записей: 11113 | Зарегистр. 12-10-2001 | Отправлено: 08:41 26-11-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
и функцию ты впихнул внутрь условного блока, а так быть не должно... конечно, это не критично, в данном случае, но не совсем правильно.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 08:42 26-11-2019 | Исправлено: YuS_2, 08:44 26-11-2019
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2

Цитата:
конечно, это не критично, в данном случае, но не совсем правильно.

Разумеется, потому и попросил тебя глянуть, заведомо зная, что "правильно" я точно не напишу. )

Всего записей: 11113 | Зарегистр. 12-10-2001 | Отправлено: 08:49 26-11-2019
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru