CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик

Ответить
 • Просмотры: 1
Аватара пользователя
Iska

Re: CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик

Сообщение Iska »

Скрытый текст

[spoiler]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:[/spoiler]
Аватара пользователя
v79italya

Re: CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик

Сообщение v79italya »

Iska, Вы не парьтесь много. Помощь - дело добровольное. Если в итоге ничего не получится - я не расстроюсь.

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

Re: CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик

Сообщение v79italya »

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

Re: CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик

Сообщение Iska »

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




Цитата v79italya:



Возможно ли запускать скрипт в фоне или в трее?
CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик




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



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



Код:

Код: Выделить всё

"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"

В поле «Добавить аргументы (необязательно)» укажите:



Код:

Код: Выделить всё

-NoLogo -WindowStyle Hidden -ExecutionPolicy RemoteSigned -File "C:\Мои проекты\0279\0001.ps1"

где вместо выделенного укажите путь к Вашему файлу.



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



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



Код:

Код: Выделить всё

Start-Sleep -Milliseconds 250

). Если Вам надо радикально — чтобы вообще даже не светилось окно в принципе, то можно будет ещё поиграться.
Аватара пользователя
v79italya

Re: CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик

Сообщение v79italya »

Цитата Iska:



Почему у Вас местами не работало с одним из них
CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик




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

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

Re: CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик

Сообщение Iska »

Цитата v79italya:



сли же первую строку заменить на две строки любого из двух предложенных Вами вариантов … то все работает.
CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик




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

Re: CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик

Сообщение v79italya »

Цитата Iska:



изначально просто не дочитали всю тему до конца
CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик




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

Re: CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик

Сообщение denis19 »

Цитата Iska:



nircmd.exe savescreenshot "scr~$currdate.MM_dd_yyyy$-~$currtime.HH_mm_ss$.png"
CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик




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

Re: CMD/BAT - создание скриншота и его моментальная отправка на почтовый ящик

Сообщение rafka »

прочёл выше сказанное и создал 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 = "Hello World!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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»