Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   создание скриншота и его моментальная отправка на почтовый ящик (http://forum.oszone.net/showthread.php?t=342008)

kontox 30-08-2019 16:43 2886040

создание скриншота и его моментальная отправка на почтовый ящик
 
Подскажите, как создать .bat (не PowerShell скрипт!!! на моей системе его нет)
чтобы он делал скриншоты когда сработает планировщик задач и отправлял их на почту. (моя почта@моя почту.ру)
т.е. батник будет запускаться через планировщик задач . Время в планировщике наступило и он заскриншотил и отправил мне на почту
Все решения что нашел в инете или платные или не рабочие.

Busla 30-08-2019 18:29 2886047

kontox, никак
по большому счёту возможности bat ограничиваются элементарными операциями с файлами
для всего остального нужно запускать внешние (сторонние) приложения

без установки дополнительного ПО вы задачу не решите, но это противоречит вашей позиции: "на моей системе его нет"

DJ Mogarych 30-08-2019 19:22 2886050

Цитата:

Цитата kontox
на моей системе его нет »

что за система?

Вариант - использовать сторонние утилиты, управляемые из командной строки: ImageMagick для снятия скринштов, Blat для отправки писем.

Iska 30-08-2019 21:34 2886065

Цитата:

Цитата DJ Mogarych
ImageMagick для снятия скринштов »

Сильно толстое оно для таких целей, как по мне. nircmd.exe/nircmdc.exe () — проще будет.

Код:

nircmd.exe savescreenshot "scr~$currdate.MM_dd_yyyy$-~$currtime.HH_mm_ss$.png"
Цитата:

Цитата kontox
не PowerShell скрипт!!! на моей системе его нет »

Устанавливайте его на свою систему.

DJ Mogarych 30-08-2019 22:27 2886074

Да, nirsoft - великий человек, для чего он только утилит не понаписал.

Интересно, что это за система такая, Powershell стоит везде, начиная с Windows XP.

Iska 30-08-2019 22:49 2886077

Цитата:

Цитата DJ Mogarych
Да, nirsoft - великий человек, для чего он только утилит не понаписал. »

Хе-хе, Nir Sofer — человек и пароход ;).

Цитата:

Цитата DJ Mogarych
Powershell стоит везде, начиная с Windows XP. »

Не, с Vista. На Windows XP нужно «ручками» загружать и разворачивать.

kontox 31-08-2019 12:55 2886122

Busla, Ну я не так категорично настроен, Я могу PS поставить.
Iska, эту утилитку я видел, но где она отправляет на меил?
Busla, Если я у себя поставлю PS можно будет делать скрин и на меил отправлять?

greg zakharov 31-08-2019 13:34 2886132

kontox, если на PS можно эксплойты ваять, то как по вашему, можно ли с его помощью делать скрины, отправлять на почту?
DJ Mogarych, Nir Sofer никакой не великий человек, ровно как и реверсер из него аховый. Если вы пошукаете различные площадки для реверсеров, можете в этом убедиться лично. А то, что он наговнокодил по большей части бесполезно. Другое дело авторы WinDbg, IDA или покойного ныне SoftIce, - вот это действительно башковитые люди.

Iska 31-08-2019 13:52 2886135

Цитата:

Цитата kontox
Iska, эту утилитку я видел, но где она отправляет на меил? »

Нигде. Только создание скриншота. Для отправки потребуется что-то ещё — например, вышеупомянутый blat, або MailSend. Именно потому рекомендуют PowerShell.

Iska 31-08-2019 14:09 2886140

Цитата:

Цитата greg zakharov
А то, что он наговнокодил по большей части бесполезно. »

А народ-то не знает. И пользует :).

greg zakharov 31-08-2019 15:01 2886146

Цитата:

Цитата Iska
А народ-то не знает. И пользует.

Чувство стадности оно такое.

Цитата:

Цитата Iska
Нигде. Только создание скриншота. Для отправки потребуется что-то ещё — например, вышеупомянутый blat, або MailSend. Именно потому рекомендуют PowerShell.

Можно и curl'ом слать мессаги.

Iska 31-08-2019 15:19 2886149

Цитата:

Цитата greg zakharov
Чувство стадности оно такое. »

Да, да — «Миллионы мух не могут ошибаться», я в курсе применения этого тезиса к месту и не к месту. Я с удовольствием посмотрю неговённую замену InsideClipboard, NirCmd, USBDeview и всякого прочего.

Цитата:

Цитата greg zakharov
Можно и curl'ом слать мессаги. »

Можно и микроскопом гвозди забивать. Но молотком выйдет всё же лучше, не?

Iska 31-08-2019 15:57 2886156

kontox, у меня получилось примерно так (на примере Яндекса, скриншот делается с первого монитора):
Скрытый текст
Код:

[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null

Start-Sleep -Milliseconds 250

$oRectangle = ([System.Windows.Forms.Screen]::AllScreens)[0].Bounds
$oBitmap    = [System.Drawing.Bitmap]::new($oRectangle.Width, $oRectangle.Height)
$oGraphics  = [System.Drawing.Graphics]::FromImage($oBitmap)
$oGraphics.CopyFromScreen($oRectangle.Location, [System.Drawing.Point]::Empty, $oRectangle.Size)
$oMemoryStream = [System.IO.MemoryStream]::new()
$oBitmap.Save($oMemoryStream, [System.Drawing.Imaging.ImageFormat]::Png)
$oMemoryStream.Seek(0, [System.IO.SeekOrigin]::Begin) | Out-Null

$oMailMessage = New-Object -TypeName 'Net.Mail.MailMessage'
$oMailMessage.From = 'ОтКого@yandex.ru'
$oMailMessage.To.Add('Кому@mail.ru')
$oMailMessage.SubjectEncoding = [System.Text.Encoding]::Unicode
$oMailMessage.Subject = "Screenshot at $(Get-Date)"
$oMailMessage.IsBodyHTML      = $true 
$oMailMessage.BodyEncoding    = [System.Text.Encoding]::Unicode
$oMailMessage.Body = "<h2>Hello World!</h2></br>Screenshot at $(Get-Date) here."

$oContentType = New-Object -TypeName 'Net.Mime.ContentType' -Property @{
    MediaType = "image/png"
    Name      = "Screenshot at $(Get-Date).png"
}
$oAttachment = New-Object -TypeName 'Net.Mail.Attachment' -ArgumentList $oMemoryStream, $oContentType
$oMailMessage.Attachments.Add($oAttachment)

$oSmtpClient = New-Object -TypeName 'Net.Mail.SmtpClient' -ArgumentList 'smtp.yandex.ru', 587 #465
$oSmtpClient.EnableSsl = $true
$oSmtpClient.Credentials = New-Object -TypeName 'System.Net.NetworkCredential' -ArgumentList 'ОтКого@yandex.ru', 'Пароль'
$oSmtpClient.Send($oMailMessage)

$oMemoryStream.Close()
$oMemoryStream.Dispose()
$oGraphics.Dispose()
$oBitmap.Dispose()
$oAttachment.Dispose()
$oMailMessage.Dispose()
$oSmtpClient.Dispose()


greg zakharov 31-08-2019 17:29 2886162

Цитата:

Цитата Iska
Я с удовольствием посмотрю неговённую замену InsideClipboard, NirCmd, USBDeview и всякого прочего.

Ваши слова даже на аргумент не тянут. Дело в том, что Нир фигачит все путем тупого копипаста, чем, собственно, и объясняется несчетное количество багов в его высерах, пожатых к тому же UPX. Неудивительно, что весь этот кал детектируется большинством антивирусов и все причитания Нира о ложных срабатываниях аверов доставляют.
Цитата:

Цитата Iska
Можно и микроскопом гвозди забивать. Но молотком выйдет всё же лучше, не?

То есть для вас задница то же, что и лицо?

Iska 31-08-2019 19:16 2886166

Цитата:

Цитата greg zakharov
Ваши слова даже на аргумент не тянут. »

Вы спорите с чем-то своим. Если аргумент собеседника неудобен — просто отбросим его.

Цитата:

Цитата greg zakharov
Дело в том, что Нир фигачит все путем тупого копипаста, чем, собственно, и объясняется несчетное количество багов в его высерах, пожатых к тому же UPX. Неудивительно, что весь этот кал детектируется большинством антивирусов и все причитания Нира о ложных срабатываниях аверов доставляют. »

Предположим, что фигачит. Предположим, что копипастом. Предположим, что есть несчётное количество багов. Предположим, что UPX — это вселенское зло. Но каким макаром отсюда должны следовать срабатывания антивирусов — я не понимаю. И Вам следует перечитать-таки его причитания, ибо Вы не поняли, о чём именно они были.

Цитата:

Цитата greg zakharov
То есть для вас задница то же, что и лицо? »

Поясните.

kontox 01-09-2019 15:47 2886257

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? или оно должно быть другим?

kontox 01-09-2019 15:49 2886258

Вложений: 1
если что вот мой файлик с моими мейлами

kontox 01-09-2019 15:51 2886259

яндекс, у меня настроен через outlook. работает прием отправка

Iska 01-09-2019 16:30 2886264

Цитата:

Цитата kontox
Я правильно сделал расширение .ps? или оно должно быть другим? »

Попробуйте «.ps1».

kontox 02-09-2019 13:25 2886346

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>

DJ Mogarych 02-09-2019 14:02 2886351

.\screen.ps1

kontox 02-09-2019 15:01 2886361

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>

Iska 02-09-2019 17:25 2886384

kontox, моя вина. Добавьте второй строкой:
Код:

[Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null
ISE подгружает её автоматически для себя. Я помнил, что, при работе в чистой консоли, System.Windows.Forms надо подгружать самостоятельно, но с какого-то перепуга решил, что уже сделал это (попутал с наличествующей в коде System.Drawing).

kontox 04-09-2019 14:29 2886625

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

YuS_2 04-09-2019 15:20 2886636

Цитата:

Цитата Iska
Я помнил, что, при работе в чистой консоли, System.Windows.Forms надо подгружать самостоятельно»

Код:

add-type -assembly system.windows.forms

v79italya 07-10-2019 14:52 2891058

Iska, здравствуйте. моя тема закрыта. скорее всего из за схожести с этой темы. потому пишу сюда.
не устанавливая никаких программ, запустил скрипт из сообщения #13. на почту пришло то что на скрине. .пнг не открывается(она как ссылка).
вопросы: какие программы еще надо установить? как настроить периодичность в полчаса?

Iska 07-10-2019 17:37 2891098

Цитата:

Цитата v79italya
.пнг не открывается(она как ссылка). »

Открывается. Именно так выглядят вложения в web-интерфейсе мобильной версии почты Mail.RU.

Цитата:

Цитата v79italya
на почту пришло то что на скрине. »

Всё правильно. Почему web-интерфейс мобильной версии почты Mail.RU неправильно понимает юникод в теле сообщения — не могу сказать. В обычном клиенте Mozilla Thunderbird — всё нормально:
Скрытый текст


Цитата:

Цитата v79italya
какие программы еще надо установить? »

Коль работает — то никакие.

Цитата:

Цитата v79italya
как настроить периодичность в полчаса? »

Попробуйте использовать Планировщик заданий.

v79italya 07-10-2019 17:52 2891102

Цитата:

Цитата Iska
Открывается »

я скачал этот пнг. размер 1 кб. может, скриншот как то по другому делать?
Цитата:

Цитата Iska
использовать Планировщик заданий »

лучше опять же макросом в Excel задам периодичность.

Iska, вопрос не по теме. Вы пишите в html, css, js, php?

Iska 07-10-2019 18:28 2891109

Цитата:

Цитата v79italya
я скачал этот пнг. размер 1 кб. может, скриншот как то по другому делать? »

Хмм. Да, что-то я не подумал. 1 Кб явно маловато будет. Добавьте сразу после:
Код:

$oBitmap.Save($oMemoryStream, [System.Drawing.Imaging.ImageFormat]::Png)
тупо запись в конкретный файл (путь Ваш будет, конечно):
Код:

$oBitmap.Save('C:\Мои проекты\0279\0001.png')
и посмотрите, что там будет.

Цитата:

Цитата v79italya
лучше опять же макросом в Excel задам периодичность. »

Не вижу в этом смысла.

Цитата:

Цитата v79italya
Вы пишите в html, css »

Да.

Цитата:

Цитата v79italya
js, php? »

Нет.

v79italya 07-10-2019 19:03 2891114

Цитата:

Цитата Iska
что там будет »

пусто и на почту опять килобайтный .png пришел
так сделал и папку abcabc создал
HTML код:

$oMemoryStream = [System.IO.MemoryStream]::new()
$oBitmap.Save($oMemoryStream, [System.Drawing.Imaging.ImageFormat]::Png)
$oBitmap.Save('C:\abcabc\0001.png')


Iska 07-10-2019 19:32 2891118

v79italya, если попробовать выполнить данный скрипт .ps1 в консоли PowerShell — там будут какие-нибудь сообщения об ошибках, скажем?

v79italya 07-10-2019 20:11 2891123

Iska, в консоли PS работает! и в папку сохраняет и на почту приходит нормальный скрин.png.
сохранил под другим именем.ps1. думал теперь будет работать. а нет, и в папке ничего не сохранилось и на почту килобайт пришел.

Iska 07-10-2019 20:41 2891125

v79italya, так. Теперь рассказывайте, откуда и как именно Вы его запускаете, когда происходит:
Цитата:

Цитата v79italya
и в папке ничего не сохранилось и на почту килобайт пришел. »


v79italya 07-10-2019 21:19 2891131

Цитата:

Цитата Iska
откуда и как именно Вы его запускаете »

на скрине и файл и как запускаю

Iska 07-10-2019 22:09 2891140

У меня и так отрабатывает корректно. А у Вас — нет?

Давайте добавим в самый конец ожидание ввода:
Код:

Read-Host 'Press Enter to continue' | Out-Null
и посмотрим. Что-нибудь, кроме «Press Enter to continue:», появится в окне консоли?

P.S. Зачем Вы делаете всё в корне системного раздела? Создайте себе какой-нибудь каталог, в нём отдельные каталоги под отдельные проекты, и там трудитесь.

DJ Mogarych 07-10-2019 22:15 2891143

На Реддите есть рабочее решение:
Код:

[void][reflection.assembly]::loadwithpartialname("system.windows.forms")
[system.windows.forms.sendkeys]::sendwait('{PRTSC}')
Get-Clipboard -Format Image | ForEach-Object -MemberName Save -ArgumentList "c:\temp\screenshot.png"

https://www.reddit.com/r/PowerShell/...th_powershell/

Ну, а дальше прикрутить Send-MailMessage.

Iska 07-10-2019 22:44 2891153

DJ Mogarych, к сожалению, оно настолько же рабочее, как и .SendKeys() WSH, то есть — очень и очень местами, увы.

v79italya 08-10-2019 04:59 2891168

Цитата:

Цитата Iska
Что-нибудь, кроме «Press Enter to continue:», появится в окне консоли? »

вот
через час на работу

Iska 08-10-2019 05:57 2891171

v79italya, скопируйте всё содержимое окна консоли в виде текста и выложите сюда под спойлером.

v79italya 08-10-2019 14:35 2891209

Скрытый текст
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:

Iska 08-10-2019 17:01 2891228

v79italya, я даже уже и не знаю…

Давайте попробуем заменить в начале:
Код:

[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null
[Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null

на:
Код:

Add-Type -AssemblyName 'System.Drawing'
Add-Type -AssemblyName 'System.Windows.Forms'

А так-то идей нет.

v79italya 08-10-2019 18:20 2891239

Iska, Вы не парьтесь много. Помощь - дело добровольное. Если в итоге ничего не получится - я не расстроюсь.
Можно попробовать по другому: скриншоты я как нибудь сделаю сторонними программами. А возможно отправлять на почту вложение из папки? то вложение, у которого дата создания или дата изменения были позже всех.

v79italya 08-10-2019 18:42 2891242

Iska, во первых, спасибо за код и за то что нашли причину.
смотрите. попробовал с этими строками:
HTML код:

Add-Type -AssemblyName 'System.Drawing'
Add-Type -AssemblyName 'System.Windows.Forms'

все отработало правильно. Потом попробовал с этими строками:
HTML код:

[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null
[Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null

тоже все отработало правильно. только в коде из сообщения 13 только одна строка
HTML код:

[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null
. Наверное поэтому и не работало.
Только сейчас тоже есть проблема. Возможно ли запускать скрипт в фоне или в трее? Иначе черное окошко PShell(как cmd) виднеется на скриншоте.

Iska 08-10-2019 19:22 2891251

В общем — не знаю. У меня работает и с [Reflection.Assembly]::LoadWithPartialName() и с Add-Type. Почему у Вас местами не работало с одним из них — нужно ждать мнения коллег-специалистов, коим я не являюсь.

Цитата:

Цитата v79italya
Возможно ли запускать скрипт в фоне или в трее? »

В трее вообще ничего нельзя «запустить». В принципе.

Создайте задание в Планировщике заданий. На вкладке «Действия» создайте действие «Запуск программы». В группе «Параметры» в поле «Программа или сценарий» укажите:
Код:

"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"
В поле «Добавить аргументы (необязательно)» укажите:
Код:

-NoLogo -WindowStyle Hidden -ExecutionPolicy RemoteSigned -File "C:\Мои проекты\0279\0001.ps1"
где вместо выделенного укажите путь к Вашему файлу.

Настройте расписание на вкладке триггеры — начало выполнения задания, повтор и продолжительность.

Окно консоли PowerShell всё равно будет появляться (потому что, как я понял, сначала создаётся окно консоли, а затем уже, в процессе выполнения, к нему применяется сокрытие), но на скриншотах его не будет (если всё равно будет — попробуйте немного увеличить паузу в:
Код:

Start-Sleep -Milliseconds 250
). Если Вам надо радикально — чтобы вообще даже не светилось окно в принципе, то можно будет ещё поиграться.

v79italya 08-10-2019 19:29 2891254

Iska, ok. Сделаю как советуете. Спасибо Вам большое!

v79italya 08-10-2019 20:57 2891263

Цитата:

Цитата Iska
Почему у Вас местами не работало с одним из них »

не работал в таком виде:
HTML код:

[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null

Start-Sleep -Milliseconds 250

$oRectangle = ([System.Windows.Forms.Screen]::AllScreens)[0].Bounds
$oBitmap    = [System.Drawing.Bitmap]::new($oRectangle.Width, $oRectangle.Height)
$oGraphics  = [System.Drawing.Graphics]::FromImage($oBitmap)

если же первую строку заменить на две строки любого из двух предложенных Вами вариантов:
HTML код:

[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null
[Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null


Add-Type -AssemblyName 'System.Drawing'
Add-Type -AssemblyName 'System.Windows.Forms'

то все работает. Может, причина не в этом

Iska 08-10-2019 21:07 2891266

Цитата:

Цитата v79italya
сли же первую строку заменить на две строки любого из двух предложенных Вами вариантов … то все работает. »

А… То бишь, Вы изначально просто не дочитали всю тему до конца. Ясно, разобрались.

v79italya 08-10-2019 21:17 2891267

Цитата:

Цитата Iska
изначально просто не дочитали всю тему до конца »

моя вина) Не вчитался в сообщение #23. Прошу извинить за то что помучил

denis19 10-05-2023 21:14 3008812

Цитата:

Цитата Iska
nircmd.exe savescreenshot "scr~$currdate.MM_dd_yyyy$-~$currtime.HH_mm_ss$.png" »

А не подскажете, как в команде скрину увеличить размер, чтоб качество и чёткость лучше было?

rafka 12-05-2023 15:26 3008920

прочёл выше сказанное и создал screen.ps1


Код:

[Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null
[Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null


Add-Type -AssemblyName 'System.Drawing'
Add-Type -AssemblyName 'System.Windows.Forms'
$oGraphics.CopyFromScreen($oRectangle.Location, [System.Drawing.Point]::Empty, $oRectangle.Size)
$oMemoryStream = [System.IO.MemoryStream]::new()
$oBitmap.Save($oMemoryStream, [System.Drawing.Imaging.ImageFormat]::Png)
$oBitmap.Save('C:\abcabc\0001.png')
$oMemoryStream.Seek(0, [System.IO.SeekOrigin]::Begin) | Out-Null

$oMailMessage = New-Object -TypeName 'Net.Mail.MailMessage'
$oMailMessage.From = 'from@mail.com'
$oMailMessage.To.Add('to@mail.com')
$oMailMessage.SubjectEncoding = [System.Text.Encoding]::Unicode
$oMailMessage.Subject = "Screenshot at $(Get-Date)"
$oMailMessage.IsBodyHTML      = $true 
$oMailMessage.BodyEncoding    = [System.Text.Encoding]::Unicode
$oMailMessage.Body = "<h2>Hello World!</h2></br>Screenshot at $(Get-Date) here."

$oContentType = New-Object -TypeName 'Net.Mime.ContentType' -Property @{
    MediaType = "image/png"
    Name      = "Screenshot at $(Get-Date).png"
}
$oAttachment = New-Object -TypeName 'Net.Mail.Attachment' -ArgumentList $oMemoryStream, $oContentType
$oMailMessage.Attachments.Add($oAttachment)

$oSmtpClient = New-Object -TypeName 'Net.Mail.SmtpClient' -ArgumentList 'mail.mail.com', 465 #465
$oSmtpClient.EnableSsl = $true
$oSmtpClient.Credentials = New-Object -TypeName 'System.Net.NetworkCredential' -ArgumentList 'from@mail.com', '123456'
$oSmtpClient.Send($oMailMessage)

Когда запускаю нифига не происходить. как будто и ничего не запускал. Windows 11

DJ Mogarych 12-05-2023 17:25 3008923

Цитата:

Цитата rafka
Когда запускаю нифига не происходить »

Оно и к лучшему.

Код:

$t = get-date
$scr = "$env:temp\$($t.ToString("yyyy-MM-dd-HH-mm-ss"))-screenshot.png"

[void][reflection.assembly]::loadwithpartialname("system.windows.forms")
[system.windows.forms.sendkeys]::sendwait('{PRTSC}')
Get-Clipboard -Format Image | ForEach-Object -MemberName Save -ArgumentList $scr

Send-MailMessage -SmtpServer mail.example.com `
-From 'vasya@example.com' `
-To 'kolya@example.com' `
-Attachments $scr `
-Subject "Screenshot from Vasya $($t.ToString())"

Send-MailMessage настраивайте по ситуации.

dmitryst 12-05-2023 18:08 3008925

Цитата:

Цитата DJ Mogarych
Send-MailMessage настраивайте по ситуации. »

у вас в примере open-relay без авторизации, а с авторизацией как?
Используя
Цитата:

$cred = Get-Credential
Send-MailMessage ... -Credential $cred
,
появляется окно стандартного запроса юзер/пароль, а как скормить эту пару из файла, например, или прямым текстом?

DJ Mogarych 12-05-2023 18:12 3008926

На эту тему написаны километры текста.

dmitryst 12-05-2023 18:59 3008932

DJ Mogarych, собственно, да
Цитата:

$cred = New-Object System.Management.Automation.PSCredential ("username", $secpasswd)
чё-то я тупанул :(


Время: 19:02.

Время: 19:02.
© OSzone.net 2001-