PowerShell. Снимаем скриншоты

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

Следующий скрипт захватывает изображение с экрана, вместе с курсором, и помещает в папку C:\Temp\Screenshot.

$Path = "C:\Temp\Screenshot\"
Add-Type -AssemblyName System.Windows.Forms 
$ScreenBounds = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
$Image = New-Object System.Drawing.Bitmap($screenBounds.Width, $ScreenBounds.Height) 
$CopyScreen = [System.Drawing.Graphics]::FromImage($Image)
$Point = New-Object System.Drawing.Point(0, 0)
$CopyScreen.CopyFromScreen($Point,[Drawing.Point]::Empty, $Image.Size);
$СursorBounds = New-Object System.Drawing.Rectangle([System.Windows.Forms.Cursor]::Position, [System.Windows.Forms.Cursor]::Current.Size)
[System.Windows.Forms.Cursors]::Default.Draw($CopyScreen, $СursorBounds) 
$CopyScreen.Dispose()
if(![System.IO.Directory]::Exists($Path)){ New-Item -ItemType Directory $Path }
$Image.Save( $path+ "$(get-date -f yyyy.MM.dd_h\h_m\m)"+".jpg" )
$Image.Dispose()
Для съемки экрана через заданные интервалы времени, код можно поместить в цикл while
while($true){   { SCRIPT }
   sleep(60) # Пауза в 60 секунд
}
Не захватывать курсор

Если вам не нужен курсор на изображениях, то удалите из кода следующие строки

$СursorBounds = New-Object System.Drawing.Rectangle([System.Windows.Forms.Cursor]::Position, [System.Windows.Forms.Cursor]::Current.Size) 
[System.Windows.Forms.Cursors]::Default.Draw($CopyScreen, $СursorBounds)
Возможные проблемы
Exception calling "CopyFromScreen" with "3" argument(s): "Неверный дескриптор"

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

Ошибка возникает потому, что переменная $Image не содержит значения, из-за того что вы не указываете для какого сеанса нужно выполнить код, а PowerShell не может определить монитор, с которого нужно выполнить захват изображения.
При этом в целевой папке создаются файлы с белым фоном и размером до 10кб.

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

Вместо ключа -s можно указать ключ -u и конкретизировать учетную запись, имеющую права администратора
psexec -i -s \\CompName powershell -nologo -WindowStyle hidden -inputformat none -ExecutionPolicy Bypass -file "C:\Temp\Script.ps1"

Что бы завершить выполнение удаленного процесса, выполните для целевого компьютера WMI команду:

wmic /node:CompName process where "ExecutablePath like '%power%'" delete

Добавить комментарий

Ваш адрес email не будет опубликован.