Как сделать захват экрана в Windows PowerShell?

Как я могу захватить экран в Windows PowerShell? Мне нужно сохранить экран на диск.

Вы также можете использовать .NET, чтобы сделать снимок экрана программным путем (что дает вам более точное управление):

[Reflection.Assembly]::LoadWithPartialName("System.Drawing") function screenshot([Drawing.Rectangle]$bounds, $path) { $bmp = New-Object Drawing.Bitmap $bounds.width, $bounds.height $graphics = [Drawing.Graphics]::FromImage($bmp) $graphics.CopyFromScreen($bounds.Location, [Drawing.Point]::Empty, $bounds.size) $bmp.Save($path) $graphics.Dispose() $bmp.Dispose() } $bounds = [Drawing.Rectangle]::FromLTRB(0, 0, 1000, 900) screenshot $bounds "C:\screenshot.png" 

Эта функция PowerShell захватит экран в PowerShell и сохранит его в файле с пронумерованной цифрой. Если используется переключатель -OfWindow, тогда будет снято текущее окно.

Это работает с использованием встроенных трюков PRINTSCREEN / CTRL-PRINTSCREEEN, и для сохранения файла на диск используется растровый кодировщик.

 function Get-ScreenCapture { param( [Switch]$OfWindow ) begin { Add-Type -AssemblyName System.Drawing $jpegCodec = [Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | Where-Object { $_.FormatDescription -eq "JPEG" } } process { Start-Sleep -Milliseconds 250 if ($OfWindow) { [Windows.Forms.Sendkeys]::SendWait("%{PrtSc}") } else { [Windows.Forms.Sendkeys]::SendWait("{PrtSc}") } Start-Sleep -Milliseconds 250 $bitmap = [Windows.Forms.Clipboard]::GetImage() $ep = New-Object Drawing.Imaging.EncoderParameters $ep.Param[0] = New-Object Drawing.Imaging.EncoderParameter ([System.Drawing.Imaging.Encoder]::Quality, [long]100) $screenCapturePathBase = "$pwd\ScreenCapture" $c = 0 while (Test-Path "${screenCapturePathBase}${c}.jpg") { $c++ } $bitmap.Save("${screenCapturePathBase}${c}.jpg", $jpegCodec, $ep) } } 

Надеюсь это поможет

Для завершения этого скрипта вы можете делать скриншоты на нескольких мониторах.

Базовый код происходит от Джереми

 [Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") function screenshot($path) { $width = 0; $height = 0; $workingAreaX = 0; $workingAreaY = 0; $screen = [System.Windows.Forms.Screen]::AllScreens; foreach ($item in $screen) { if($workingAreaX -gt $item.WorkingArea.X) { $workingAreaX = $item.WorkingArea.X; } if($workingAreaY -gt $item.WorkingArea.Y) { $workingAreaY = $item.WorkingArea.Y; } $width = $width + $item.Bounds.Width; if($item.Bounds.Height -gt $height) { $height = $item.Bounds.Height; } } $bounds = [Drawing.Rectangle]::FromLTRB($workingAreaX, $workingAreaY, $width, $height); $bmp = New-Object Drawing.Bitmap $width, $height; $graphics = [Drawing.Graphics]::FromImage($bmp); $graphics.CopyFromScreen($bounds.Location, [Drawing.Point]::Empty, $bounds.size); $bmp.Save($path); $graphics.Dispose(); $bmp.Dispose(); } 

Может вызываться с: снимок экрана «D: \ screenshot.png»

У Microsoft есть сценарий Powershell, ansible здесь:

http://gallery.technet.microsoft.com/scriptcenter/eeff544a-f690-4f6b-a586-11eea6fc5eb8

Я только что попробовал это на машине с Windows 7 и работал, используя приведенный в командной строке пример:

 Take-ScreenShot -screen -file "C:\image.png" -imagetype png 
  • Как вызвать сложный метод COM из PowerShell?
  • Linux «Top» для Windows Powershell?
  • Использование учетных данных PowerShell без запроса пароля
  • $ string.Substring Индекс / длина исключения
  • Как переустановить приложение калькулятора Windows 10?
  • Как написать сценарий PowerShell, который принимает ввод конвейера?
  • Powershell get-childitem env: путь возвращает эллипс одной строки, как что-то полезное?
  • Автоматически экспортировать историю в конце сеанса PowerShell
  • Как найти код обновления для установленного файла MSI?
  • Как настроить Windows на виртуальной машине с помощью Powershell (Hyper-V)
  • Как получить только каталоги с помощью Get-ChildItem?
  • Давайте будем гением компьютера.