Un equipo de soporte de HelpDesk me pidió que escribiera un script de PowerShell para obtener rápidamente una captura de pantalla del escritorio de un usuario desde una computadora remota. La condición principal es que el empleado del HelpDesk no debe conectarse a la computadora del usuario a través de herramientas gráficas de soporte remoto (SCCM, Asistencia Remota, Sombra de Sesión de Escritorio Remoto, etc.).

Contenido:

  • Captura de capturas de pantalla con PowerShell
  • ¿Cómo tomar una captura de pantalla de escritorio desde una computadora remota usando PowerShell?

Captura de capturas de pantalla con PowerShell

En primer lugar, aprendamos a tomar una captura de pantalla en una computadora local con PowerShell. Para capturar una imagen de escritorio actual, puede usar la clase .NET incorporada System.Windows.Forms. Tengo este script de PowerShell:

$Path = "C:ScreenCapture"
# Make sure that the directory to keep screenshots has been created, otherwise create it
If (!(test-path $path)) {
New-Item -ItemType Directory -Force -Path $path
}
Add-Type -AssemblyName System.Windows.Forms
$screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
# Get the current screen resolution
$image = New-Object System.Drawing.Bitmap($screen.Width, $screen.Height)
# Create a graphic object
$graphic = [System.Drawing.Graphics]::FromImage($image)
$point = New-Object System.Drawing.Point(0, 0)
$graphic.CopyFromScreen($point, $point, $image.Size);
$cursorBounds = New-Object System.Drawing.Rectangle([System.Windows.Forms.Cursor]::Position, [System.Windows.Forms.Cursor]::Current.Size)
# Get a screenshot
[System.Windows.Forms.Cursors]::Default.Draw($graphic, $cursorBounds)
$screen_file = "$Path" + $env:computername + "_" + $env:username + "_" + "$((get-date).tostring('yyyy.MM.dd-HH.mm.ss')).png"
# Save the screenshot as a PNG file
$image.Save($screen_file, [System.Drawing.Imaging.ImageFormat]::Png)

Este script de PowerShell crea un directorio para almacenar capturas de pantalla, obtiene la resolución de pantalla actual, captura una imagen del espacio de trabajo actual y la guarda como un archivo PNG. Ejecute el script de PowerShell y verifique que aparezca un archivo png en el directorio especificado (puede especificar la ruta UNC a la carpeta de red compartida) con una captura de pantalla de su escritorio. Para mayor comodidad, el nombre del archivo PNG contiene un nombre de computadora, un nombre de usuario, una fecha y hora actual.

Si desea llamar al script PS desde un archivo por lotes, use este comando (en este caso, no necesita cambiar la configuración de la Política de ejecución de PowerShell):

powershell.exe -executionpolicy bypass -file c:psCaptureLocalScreen.ps1

Puede crear un GPO para colocar un acceso directo para el script de PowerShell en los escritorios de todos los usuarios del dominio y asignar teclas de acceso rápido para llamarlo. Ahora, cuando aparece un problema o error en cualquier aplicación, el usuario puede simplemente presionar las teclas de acceso rápido asignadas. Luego, aparece una captura de pantalla del escritorio del usuario en la carpeta compartida de HelpDesk.

¿Cómo tomar una captura de pantalla de escritorio desde una computadora remota usando PowerShell?

La siguiente tarea es obtener una captura de pantalla del escritorio del usuario en la computadora remota a través de PowerShell. Puede ser una computadora independiente con Windows 10 o un servidor RDS.

Una forma preferida de conectarse al escritorio de un usuario en un servidor RDS utilizando una herramienta gráfica es la sesión Shadow RDP.

Si desea obtener una captura de pantalla de escritorio desde un servidor RDS (o un escritorio Windows, en el que se permiten múltiples conexiones RDP simultáneas), primero debe obtener una ID de sesión de usuario en la computadora remota. Especifique el nombre de un equipo / servidor remoto y una cuenta de usuario en el siguiente script de PowerShell:
$ComputerName = "nld-rds1"
$RDUserName = "h.jansen"
$quser = (((query user /server:$ComputerName) -replace '^>', '') -replace 's{2,}', ',' | ConvertFrom-Csv)
$usersess=$quser | where {$_.USERNAME -like $RDUserName -and $_.STATE -eq "Active"}
$usersessID=$usersess.ID

Si usa el script para obtener capturas de pantalla de computadoras remotas con un solo usuario, el número de sesión siempre será 1. Reemplace el bloque de consulta del servidor RDS anterior con $usersessID = 1.

Para hacerlo más conveniente, guarde el archivo de secuencia de comandos de PowerShell en una carpeta de red compartida. Luego edite el CaptureLocalScreen.ps1 archivo y cambie la ruta a:

$Path = \nld-fs01ScreenLog

Las capturas de pantalla del usuario se guardarán en esta carpeta. Otorgue permisos de escritura a la carpeta para Usuarios autenticados grupo de dominio.

Una vez que tenga una ID de sesión de usuario, puede conectarse a la sesión de usuario de forma remota utilizando PsExec herramienta y ejecute el script:

.PsExec.exe -s -i $usersessID \$ComputerName powershell.exe -executionpolicy bypass -WindowStyle Hidden -file "\nld-fs01ScreenCaptureLocalScreen.ps1"

Luego, un miembro del equipo de HelpDesk puede ejecutar el script desde su computadora y aparecerá una captura de pantalla del escritorio actual de la computadora remota en el directorio especificado.

Recomendado para ti