создание скриншота и его моментальная отправка на почтовый ящик
Подскажите, как создать .bat (не PowerShell скрипт!!! на моей системе его нет)
чтобы он делал скриншоты когда сработает планировщик задач и отправлял их на почту. (моя почта@моя почту.ру) т.е. батник будет запускаться через планировщик задач . Время в планировщике наступило и он заскриншотил и отправил мне на почту Все решения что нашел в инете или платные или не рабочие. |
kontox, никак
по большому счёту возможности bat ограничиваются элементарными операциями с файлами для всего остального нужно запускать внешние (сторонние) приложения без установки дополнительного ПО вы задачу не решите, но это противоречит вашей позиции: "на моей системе его нет" |
Цитата:
Вариант - использовать сторонние утилиты, управляемые из командной строки: ImageMagick для снятия скринштов, Blat для отправки писем. |
Цитата:
Код:
nircmd.exe savescreenshot "scr~$currdate.MM_dd_yyyy$-~$currtime.HH_mm_ss$.png" Цитата:
|
Да, nirsoft - великий человек, для чего он только утилит не понаписал.
Интересно, что это за система такая, Powershell стоит везде, начиная с Windows XP. |
|
Busla, Ну я не так категорично настроен, Я могу PS поставить.
Iska, эту утилитку я видел, но где она отправляет на меил? Busla, Если я у себя поставлю PS можно будет делать скрин и на меил отправлять? |
kontox, если на PS можно эксплойты ваять, то как по вашему, можно ли с его помощью делать скрины, отправлять на почту?
DJ Mogarych, Nir Sofer никакой не великий человек, ровно как и реверсер из него аховый. Если вы пошукаете различные площадки для реверсеров, можете в этом убедиться лично. А то, что он наговнокодил по большей части бесполезно. Другое дело авторы WinDbg, IDA или покойного ныне SoftIce, - вот это действительно башковитые люди. |
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
kontox, у меня получилось примерно так (на примере Яндекса, скриншот делается с первого монитора):
Скрытый текст
Код:
[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null |
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Iska,
я запускаю (powershell 6 x64) получаю такую ошибку PS C:\Users\trader\Desktop> screen.ps screen.ps : The term 'screen.ps' is not recognized as the name of a cmdlet, fu tion, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the pat is correct and try again. At line:1 char:1 + screen.ps + ~~~~~~~~~ + CategoryInfo : ObjectNotFound: (screen.ps:String) [], CommandNotFou Exception + FullyQualifiedErrorId : CommandNotFoundException Suggestion [3,General]: The command screen.ps was not found, but does exist in he current location. PowerShell does not load commands from the current locati by default. If you trust this command, instead type: ".\screen.ps". See "get- lp about_Command_Precedence" for more details. PS C:\Users\trader\Desktop> Я правильно сделал расширение .ps? или оно должно быть другим? |
Вложений: 1
если что вот мой файлик с моими мейлами
|
яндекс, у меня настроен через outlook. работает прием отправка
|
Цитата:
|
Iska, сделал, что то не помогло. А что значит эта ошибка?
PowerShell 6.2.2 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/pscore6-docs Type 'help' to get help. PS C:\Users\trader> cd desktop PS C:\Users\trader\desktop> screen.ps1 screen.ps1 : The term 'screen.ps1' is not recognized as the name of a cmdlet, fu nction, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:1 + screen.ps1 + ~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (screen.ps1:String) [], CommandNotFoun dException + FullyQualifiedErrorId : CommandNotFoundException Suggestion [3,General]: The command screen.ps1 was not found, but does exist in the current location. PowerShell does not load commands from the current locatio n by default. If you trust this command, instead type: ".\screen.ps1". See "get- help about_Command_Precedence" for more details. PS C:\Users\trader\desktop> |
.\screen.ps1
|
DJ Mogarych, теперь целый ряд выполз))
PS C:\Users\trader\desktop> .\screen.ps1 Unable to find type [System.Windows.Forms.Screen]. At C:\Users\trader\desktop\screen.ps1:5 char:16 + $oRectangle = ([System.Windows.Forms.Screen]::AllScreens)[0].Bounds + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Windows.Forms.Screen:TypeNam e) [], RuntimeException + FullyQualifiedErrorId : TypeNotFound Exception calling ".ctor" with "2" argument(s): "Value cannot be null. Parameter name: stream" At C:\Users\trader\desktop\screen.ps1:6 char:1 + $oBitmap = [System.Drawing.Bitmap]::new($oRectangle.Width, $oRecta ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ArgumentNullException Exception calling "FromImage" with "1" argument(s): "Value cannot be null. Parameter name: image" At C:\Users\trader\desktop\screen.ps1:7 char:1 + $oGraphics = [System.Drawing.Graphics]::FromImage($oBitmap) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ArgumentNullException You cannot call a method on a null-valued expression. At C:\Users\trader\desktop\screen.ps1:8 char:1 + $oGraphics.CopyFromScreen($oRectangle.Location, [System.Drawing.Point ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull You cannot call a method on a null-valued expression. At C:\Users\trader\desktop\screen.ps1:10 char:1 + $oBitmap.Save($oMemoryStream, [System.Drawing.Imaging.ImageFormat]::P ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Exception calling "Send" with "1" argument(s): "Bad sequence of commands. The se rver response was: 5.5.4 Error: send AUTH command first." At C:\Users\trader\desktop\screen.ps1:32 char:1 + $oSmtpClient.Send($oMailMessage) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SmtpException You cannot call a method on a null-valued expression. At C:\Users\trader\desktop\screen.ps1:36 char:1 + $oGraphics.Dispose() + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull You cannot call a method on a null-valued expression. At C:\Users\trader\desktop\screen.ps1:37 char:1 + $oBitmap.Dispose() + ~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull PS C:\Users\trader\desktop> |
kontox, моя вина. Добавьте второй строкой:
Код:
[Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null |
Iska, я добавил, запустил
Exception calling "LoadWithPartialName" with "1" argument(s): "Could not load fi le or assembly 'System.Windows.Forms, Culture=neutral, PublicKeyToken=null'. Ope ration is not supported. (Exception from HRESULT: 0x80131515)" At C:\Users\trader\desktop\screen.ps1:2 char:1 + [Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : FileLoadException Unable to find type [System.Windows.Forms.Screen]. At C:\Users\trader\desktop\screen.ps1:5 char:16 + $oRectangle = ([System.Windows.Forms.Screen]::AllScreens)[0].Bounds + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Windows.Forms.Screen:TypeNam e) [], RuntimeException + FullyQualifiedErrorId : TypeNotFound Exception calling ".ctor" with "2" argument(s): "Value cannot be null. Parameter name: stream" At C:\Users\trader\desktop\screen.ps1:6 char:1 + $oBitmap = [System.Drawing.Bitmap]::new($oRectangle.Width, $oRecta ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ArgumentNullException Exception calling "FromImage" with "1" argument(s): "Value cannot be null. Parameter name: image" At C:\Users\trader\desktop\screen.ps1:7 char:1 + $oGraphics = [System.Drawing.Graphics]::FromImage($oBitmap) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ArgumentNullException You cannot call a method on a null-valued expression. At C:\Users\trader\desktop\screen.ps1:8 char:1 + $oGraphics.CopyFromScreen($oRectangle.Location, [System.Drawing.Point ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull You cannot call a method on a null-valued expression. At C:\Users\trader\desktop\screen.ps1:10 char:1 + $oBitmap.Save($oMemoryStream, [System.Drawing.Imaging.ImageFormat]::P ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Exception calling "Send" with "1" argument(s): "Bad sequence of commands. The se rver response was: 5.5.4 Error: send AUTH command first." At C:\Users\trader\desktop\screen.ps1:32 char:1 + $oSmtpClient.Send($oMailMessage) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SmtpException You cannot call a method on a null-valued expression. At C:\Users\trader\desktop\screen.ps1:36 char:1 + $oGraphics.Dispose() + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull You cannot call a method on a null-valued expression. At C:\Users\trader\desktop\screen.ps1:37 char:1 + $oBitmap.Dispose() + ~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull |
Цитата:
Код:
add-type -assembly system.windows.forms |
Iska, здравствуйте. моя тема закрыта. скорее всего из за схожести с этой темы. потому пишу сюда.
не устанавливая никаких программ, запустил скрипт из сообщения #13. на почту пришло то что на скрине. .пнг не открывается(она как ссылка). вопросы: какие программы еще надо установить? как настроить периодичность в полчаса? |
Цитата:
Цитата:
Скрытый текст
Цитата:
Цитата:
|
|
Цитата:
Код:
$oBitmap.Save($oMemoryStream, [System.Drawing.Imaging.ImageFormat]::Png) Код:
$oBitmap.Save('C:\Мои проекты\0279\0001.png') Цитата:
Цитата:
Цитата:
|
Цитата:
так сделал и папку abcabc создал HTML код:
$oMemoryStream = [System.IO.MemoryStream]::new() |
v79italya, если попробовать выполнить данный скрипт .ps1 в консоли PowerShell — там будут какие-нибудь сообщения об ошибках, скажем?
|
Iska, в консоли PS работает! и в папку сохраняет и на почту приходит нормальный скрин.png.
сохранил под другим именем.ps1. думал теперь будет работать. а нет, и в папке ничего не сохранилось и на почту килобайт пришел. |
v79italya, так. Теперь рассказывайте, откуда и как именно Вы его запускаете, когда происходит:
Цитата:
|
Цитата:
|
У меня и так отрабатывает корректно. А у Вас — нет?
Давайте добавим в самый конец ожидание ввода: Код:
Read-Host 'Press Enter to continue' | Out-Null P.S. Зачем Вы делаете всё в корне системного раздела? Создайте себе какой-нибудь каталог, в нём отдельные каталоги под отдельные проекты, и там трудитесь. |
На Реддите есть рабочее решение:
Код:
[void][reflection.assembly]::loadwithpartialname("system.windows.forms") Ну, а дальше прикрутить Send-MailMessage. |
DJ Mogarych, к сожалению, оно настолько же рабочее, как и .SendKeys() WSH, то есть — очень и очень местами, увы.
|
Цитата:
через час на работу |
v79italya, скопируйте всё содержимое окна консоли в виде текста и выложите сюда под спойлером.
|
Скрытый текст
Unable to find type [System.Windows.Forms.Screen].
At C:\abcabc.ps1:5 char:16 + $oRectangle = ([System.Windows.Forms.Screen]::AllScreens)[0].Bounds + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Windows.Forms.Screen:T ypeName) [], RuntimeException + FullyQualifiedErrorId : TypeNotFound Exception calling ".ctor" with "2" argument(s): "Значение 'null' недопустимо дл я 'stream'." At C:\abcabc.ps1:6 char:1 + $oBitmap = [System.Drawing.Bitmap]::new($oRectangle.Width, $oRecta ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ArgumentException Exception calling "FromImage" with "1" argument(s): "Значение не может быть нео пределенным. Имя параметра: image" At C:\abcabc.ps1:7 char:1 + $oGraphics = [System.Drawing.Graphics]::FromImage($oBitmap) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ArgumentNullException You cannot call a method on a null-valued expression. At C:\abcabc.ps1:8 char:1 + $oGraphics.CopyFromScreen($oRectangle.Location, [System.Drawing.Point ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull You cannot call a method on a null-valued expression. At C:\abcabc.ps1:10 char:1 + $oBitmap.Save($oMemoryStream, [System.Drawing.Imaging.ImageFormat]::P ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull You cannot call a method on a null-valued expression. At C:\abcabc.ps1:11 char:1 + $oBitmap.Save('C:\abcabc\0001.png') + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull You cannot call a method on a null-valued expression. At C:\abcabc.ps1:37 char:1 + $oGraphics.Dispose() + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull You cannot call a method on a null-valued expression. At C:\abcabc.ps1:38 char:1 + $oBitmap.Dispose() + ~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Press Enter to continue: |
v79italya, я даже уже и не знаю…
Давайте попробуем заменить в начале: Код:
[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null Код:
Add-Type -AssemblyName 'System.Drawing' |
Iska, Вы не парьтесь много. Помощь - дело добровольное. Если в итоге ничего не получится - я не расстроюсь.
Можно попробовать по другому: скриншоты я как нибудь сделаю сторонними программами. А возможно отправлять на почту вложение из папки? то вложение, у которого дата создания или дата изменения были позже всех. |
Iska, во первых, спасибо за код и за то что нашли причину.
смотрите. попробовал с этими строками: HTML код:
Add-Type -AssemblyName 'System.Drawing' HTML код:
[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null HTML код:
[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null Только сейчас тоже есть проблема. Возможно ли запускать скрипт в фоне или в трее? Иначе черное окошко PShell(как cmd) виднеется на скриншоте. |
В общем — не знаю. У меня работает и с [Reflection.Assembly]::LoadWithPartialName() и с Add-Type. Почему у Вас местами не работало с одним из них — нужно ждать мнения коллег-специалистов, коим я не являюсь.
Цитата:
Создайте задание в Планировщике заданий. На вкладке «Действия» создайте действие «Запуск программы». В группе «Параметры» в поле «Программа или сценарий» укажите: Код:
"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" Код:
-NoLogo -WindowStyle Hidden -ExecutionPolicy RemoteSigned -File "C:\Мои проекты\0279\0001.ps1" Настройте расписание на вкладке триггеры — начало выполнения задания, повтор и продолжительность. Окно консоли PowerShell всё равно будет появляться (потому что, как я понял, сначала создаётся окно консоли, а затем уже, в процессе выполнения, к нему применяется сокрытие), но на скриншотах его не будет (если всё равно будет — попробуйте немного увеличить паузу в: Код:
Start-Sleep -Milliseconds 250 |
Iska, ok. Сделаю как советуете. Спасибо Вам большое!
|
Цитата:
HTML код:
[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null HTML код:
[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null |
Цитата:
|
Цитата:
|
Цитата:
|
прочёл выше сказанное и создал screen.ps1
Код:
[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null |
Цитата:
Код:
$t = get-date |
Цитата:
Используя Цитата:
появляется окно стандартного запроса юзер/пароль, а как скормить эту пару из файла, например, или прямым текстом? |
На эту тему написаны километры текста.
|
DJ Mogarych, собственно, да
Цитата:
|
Время: 15:05. |
Время: 15:05.
© OSzone.net 2001-