Показать полную графическую версию : создание скриншота и его моментальная отправка на почтовый ящик
DJ Mogarych
02-09-2019, 14:02
.\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
ISE подгружает её автоматически для себя. Я помнил, что, при работе в чистой консоли, System.Windows.Forms надо подгружать самостоятельно, но с какого-то перепуга решил, что уже сделал это (попутал с наличествующей в коде System.Drawing).
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
Я помнил, что, при работе в чистой консоли, System.Windows.Forms надо подгружать самостоятельно»
add-type -assembly system.windows.forms
v79italya
07-10-2019, 14:52
Iska, здравствуйте. моя тема закрыта. скорее всего из за схожести с этой темы. потому пишу сюда.
не устанавливая никаких программ, запустил скрипт из сообщения #13. на почту пришло то что на скрине. .пнг не открывается(она как ссылка).
вопросы: какие программы еще надо установить? как настроить периодичность в полчаса?
.пнг не открывается(она как ссылка). »
Открывается. Именно так выглядят вложения в web-интерфейсе мобильной версии почты Mail.RU.
на почту пришло то что на скрине. »
Всё правильно. Почему web-интерфейс мобильной версии почты Mail.RU неправильно понимает юникод в теле сообщения — не могу сказать. В обычном клиенте Mozilla Thunderbird — всё нормально:
https://i.imgur.com/9Tg8oQ4.png
какие программы еще надо установить? »
Коль работает — то никакие.
как настроить периодичность в полчаса? »
Попробуйте использовать Планировщик заданий.
v79italya
07-10-2019, 17:52
Открывается » я скачал этот пнг. размер 1 кб. может, скриншот как то по другому делать?
использовать Планировщик заданий » лучше опять же макросом в Excel задам периодичность.
Iska, вопрос не по теме. Вы пишите в html, css, js, php?
я скачал этот пнг. размер 1 кб. может, скриншот как то по другому делать? »
Хмм. Да, что-то я не подумал. 1 Кб явно маловато будет. Добавьте сразу после:
$oBitmap.Save($oMemoryStream, [System.Drawing.Imaging.ImageFormat]::Png)
тупо запись в конкретный файл (путь Ваш будет, конечно):
$oBitmap.Save('C:\Мои проекты\0279\0001.png')
и посмотрите, что там будет.
лучше опять же макросом в Excel задам периодичность. »
Не вижу в этом смысла.
Вы пишите в html, css »
Да.
js, php? »
Нет.
v79italya
07-10-2019, 19:03
что там будет » пусто и на почту опять килобайтный .png пришел
так сделал и папку abcabc создал
$oMemoryStream = [System.IO.MemoryStream]::new()
$oBitmap.Save($oMemoryStream, [System.Drawing.Imaging.ImageFormat]::Png)
$oBitmap.Save('C:\abcabc\0001.png')
v79italya, если попробовать выполнить данный скрипт .ps1 в консоли PowerShell — там будут какие-нибудь сообщения об ошибках, скажем?
v79italya
07-10-2019, 20:11
Iska, в консоли PS работает! и в папку сохраняет и на почту приходит нормальный скрин.png.
сохранил под другим именем.ps1. думал теперь будет работать. а нет, и в папке ничего не сохранилось и на почту килобайт пришел.
v79italya, так. Теперь рассказывайте, откуда и как именно Вы его запускаете, когда происходит:
и в папке ничего не сохранилось и на почту килобайт пришел. »
v79italya
07-10-2019, 21:19
откуда и как именно Вы его запускаете » на скрине и файл и как запускаю
У меня и так отрабатывает корректно. А у Вас — нет?
Давайте добавим в самый конец ожидание ввода:
Read-Host 'Press Enter to continue' | Out-Null
и посмотрим. Что-нибудь, кроме «Press Enter to continue:», появится в окне консоли?
P.S. Зачем Вы делаете всё в корне системного раздела? Создайте себе какой-нибудь каталог, в нём отдельные каталоги под отдельные проекты, и там трудитесь.
DJ Mogarych
07-10-2019, 22:15
На Реддите есть рабочее решение:
[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/comments/9y9689/take_a_screenshot_with_powershell/
Ну, а дальше прикрутить Send-MailMessage.
DJ Mogarych, к сожалению, оно настолько же рабочее, как и .SendKeys() WSH, то есть — очень и очень местами, увы.
v79italya
08-10-2019, 04:59
Что-нибудь, кроме «Press Enter to continue:», появится в окне консоли? »
вот
через час на работу
v79italya, скопируйте всё содержимое окна консоли в виде текста и выложите сюда под спойлером.
v79italya
08-10-2019, 14:35
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:
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.