Лучший отвечающий
без мерцания окна power shell

Вопрос
-
Добрый день. Есть скрипт, делающий снимки экрана и сохраняющий файл в папке.
[reflection.assembly]::LoadWithPartialName("System.Drawing") > $null $Bitmap = new-object System.Drawing.Bitmap 3840,1080 $Size = New-object System.Drawing.Size 3840,1080 $FromImage = [System.Drawing.Graphics]::FromImage($Bitmap) $FromImage.copyfromscreen(0,0,0,0, $Size, ([System.Drawing.CopyPixelOperation]::SourceCopy)) $today = get-date -DisplayHint date -UFormat %d.%m.%y.%H.%M.%S $Bitmap.Save("\\server\designer\my_image\$today.png", ([system.drawing.imaging.imageformat]::png));
Попытался настроить планировщик задач на выполнение этого скрипта из под системной у.з., что бы выполнялся для всех пользователей - снимки пустые...
Когда настраиваю выполнение из под своей учётной записи, то при выполнении появляется окно powershell, что отвлекает. Когда меняю на пользователя system, а затем обратно на мою у.з. - то мелькания нет, но скрины пустые...
Можно ли настроить так, что бы не появлялось окно с PowerShell в любых случаях?
И как можно сделать, чтобы при выполнении от системы выполнялся снимок экрана интерактивного пользователя?
Спасибо.
- Изменено AnahaymModerator 25 июля 2012 г. 15:16
25 июля 2012 г. 14:47Модератор
Ответы
-
Под System не получится,если только какой-нито драйвер написать.Для скрытия можно воспользоваться - http://kazunposh.wordpress.com/2012/03/19/qa-4/ пункт 13,чтоб не было мерцания.
- Помечено в качестве ответа AnahaymModerator 25 июля 2012 г. 15:16
25 июля 2012 г. 14:57Отвечающий -
set shell = wscript.createobject("wscript.shell") shell.run "powershell -file C:\scripts\sn.ps1",0,false
И запускать уже vbscript.
- Помечено в качестве ответа AnahaymModerator 25 июля 2012 г. 15:35
25 июля 2012 г. 15:27Отвечающий -
подскажите, пожалуйста.
Нужно чтобы файл копировался в недоменной сети. Копировался на сетевой ресурс, где нужно задавать реквезиты для входа.
Не могу найти что и куда записать, чтобы подставлялись эти данные...Спасибо.
Прямо в скрипт:
net use \\pc\ipc$ "/user:$login" $pass copy C:\my.exe \\pc\C$\
- Помечено в качестве ответа AnahaymModerator 24 сентября 2012 г. 9:26
24 сентября 2012 г. 8:55Отвечающий -
Посмотреть все экраны:
PS > [System.Windows.Forms.Screen]::AllScreens BitsPerPixel : 32 Bounds : {X=0,Y=0,Width=1280,Height=1024} DeviceName : \\.\DISPLAY1 Primary : True WorkingArea : {X=0,Y=0,Width=1280,Height=994} BitsPerPixel : 32 Bounds : {X=1280,Y=0,Width=1024,Height=768} DeviceName : \\.\DISPLAY2 Primary : False WorkingArea : {X=1280,Y=0,Width=1024,Height=768}
Теперь смотрим свойство Bounds и подставляем в строчку:
$FromImage.copyfromscreen(X,Y,0,0, $Size,([System.Drawing.CopyPixelOperation]::SourceCopy))
Для моего случая:
$FromImage.copyfromscreen(1280,0,0,0, $Size,([System.Drawing.CopyPixelOperation]::SourceCopy))
- Помечено в качестве ответа AnahaymModerator 10 сентября 2013 г. 7:42
25 августа 2013 г. 12:57Отвечающий -
Add-Type -AssemblyName System.Windows.Forms - Для 2 и выше
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") - Для 1 и выше
- Помечено в качестве ответа AnahaymModerator 10 сентября 2013 г. 7:42
9 сентября 2013 г. 9:38Отвечающий
Все ответы
-
Под System не получится,если только какой-нито драйвер написать.Для скрытия можно воспользоваться - http://kazunposh.wordpress.com/2012/03/19/qa-4/ пункт 13,чтоб не было мерцания.
- Помечено в качестве ответа AnahaymModerator 25 июля 2012 г. 15:16
25 июля 2012 г. 14:57Отвечающий -
у меня просто под system работает скрипт для аудита печати. Если под сустем не получится, может под другим пользователем делать интерактивные снимки?25 июля 2012 г. 15:08Модератор
-
у меня просто под system работает скрипт для аудита печати. Если под сустем не получится, может под другим пользователем делать интерактивные снимки?
Только под текущим залогиненным пользователем.25 июля 2012 г. 15:12Отвечающий -
тогда по поводу мерцания: мне нужно создать VBS скрипт, в него написать код, "отключающий" мерцание, и в этот же VBS скрипт записать код PowerShell?
Или как?
25 июля 2012 г. 15:21Модератор -
set shell = wscript.createobject("wscript.shell") shell.run "powershell -file C:\scripts\sn.ps1",0,false
И запускать уже vbscript.
- Помечено в качестве ответа AnahaymModerator 25 июля 2012 г. 15:35
25 июля 2012 г. 15:27Отвечающий -
прекрасно. спасибо. только снимок делается если в планировщике стоит от пользователя, который залогинился...
Если не залогинился - пустой скрин. Но не страшно, просто под каждым пользователем создам задачу.
25 июля 2012 г. 15:36Модератор -
подскажите, пожалуйста.
Нужно чтобы файл копировался в недоменной сети. Копировался на сетевой ресурс, где нужно задавать реквезиты для входа.
Не могу найти что и куда записать, чтобы подставлялись эти данные...Спасибо.
24 сентября 2012 г. 8:41Модератор -
подскажите, пожалуйста.
Нужно чтобы файл копировался в недоменной сети. Копировался на сетевой ресурс, где нужно задавать реквезиты для входа.
Не могу найти что и куда записать, чтобы подставлялись эти данные...Спасибо.
Прямо в скрипт:
net use \\pc\ipc$ "/user:$login" $pass copy C:\my.exe \\pc\C$\
- Помечено в качестве ответа AnahaymModerator 24 сентября 2012 г. 9:26
24 сентября 2012 г. 8:55Отвечающий -
Отлично. Всё гениальное просто. Только я сделал net use. А копировать будет команда Save.
24 сентября 2012 г. 9:26Модератор -
Добрый вечер. Появился вопрос по скрипту принтскрина.
$Bitmap = new-object System.Drawing.Bitmap 3840,1080 $Size = New-object System.Drawing.Size 3840,1080
это если два монитора широкоформатных. А вот если два монитора разных, то что писать?
Например, один монитор 1920х1080 и второй 1920х1200 (не широкоформатный). Делается только принтскрин только широкоформатного (основного монитора).
Прописал:
$Bitmap = new-object System.Drawing.Bitmap 3840,1200 $Size = New-object System.Drawing.Size 3840,1200
всё равно только один монитор скринит.
Спасибо.
24 августа 2013 г. 17:55Модератор -
Посмотреть все экраны:
PS > [System.Windows.Forms.Screen]::AllScreens BitsPerPixel : 32 Bounds : {X=0,Y=0,Width=1280,Height=1024} DeviceName : \\.\DISPLAY1 Primary : True WorkingArea : {X=0,Y=0,Width=1280,Height=994} BitsPerPixel : 32 Bounds : {X=1280,Y=0,Width=1024,Height=768} DeviceName : \\.\DISPLAY2 Primary : False WorkingArea : {X=1280,Y=0,Width=1024,Height=768}
Теперь смотрим свойство Bounds и подставляем в строчку:
$FromImage.copyfromscreen(X,Y,0,0, $Size,([System.Drawing.CopyPixelOperation]::SourceCopy))
Для моего случая:
$FromImage.copyfromscreen(1280,0,0,0, $Size,([System.Drawing.CopyPixelOperation]::SourceCopy))
- Помечено в качестве ответа AnahaymModerator 10 сентября 2013 г. 7:42
25 августа 2013 г. 12:57Отвечающий -
а есть такая же команда, но для предыдущих версий powershell ?
[pcx]: PS C:\Users> [System.Windows.Forms.Screen]::AllScreens Unable to find type [System.Windows.Forms.Screen]: make sure that the assembly containing this type is loaded. At line:1 char:30 + [System.Windows.Forms.Screen] <<<< ::AllScreens + CategoryInfo : InvalidOperation: (System.Windows.Forms.Screen:String) [], RuntimeException + FullyQualifiedErrorId : TypeNotFound [pcx]: PS C:\Users> $Host.Version Major Minor Build Revision ----- ----- ----- -------- 1 0 0 0
или нужно обновить до 2-ой или 3-ей версии?
9 сентября 2013 г. 9:08Модератор -
Add-Type -AssemblyName System.Windows.Forms - Для 2 и выше
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") - Для 1 и выше
- Помечено в качестве ответа AnahaymModerator 10 сентября 2013 г. 7:42
9 сентября 2013 г. 9:38Отвечающий -
выводит только один монитор:
[pcх]: PS C:\Users> [System.Windows.Forms.Screen]::AllScreens BitsPerPixel : 0 Bounds : {X=0,Y=0,Width=1024,Height=768} DeviceName : DISPLAY Primary : True WorkingArea : {X=0,Y=0,Width=1024,Height=768}
9 сентября 2013 г. 9:52Модератор -
Вывод - [System.Windows.Forms.SystemInformation]::MonitorCount
9 сентября 2013 г. 9:59Отвечающий -
показывает 1. при этом, если удалённо подключится к диспетчеру устройств - там три монитора, что правильно. Может это влияет от того, что я запускаю эти команды через удалённую сессию enter-pssession pc18? Клиент Win 7 SP1 x64, команды выполняю с Win Serv 2012.
9 сентября 2013 г. 11:34Модератор -
Команда не отработает через Remote PSsession в силу архитектурных ограничений подсистемы.
9 сентября 2013 г. 11:40Отвечающий -
а можно указать конкретный монитор? т.е. не AllScreens , а, к примеру, Monitor[1]
Или есть другой вариант? Сейчас попробую через winrs
И ещё вопрос. Пробовал запускать PsExec и там запустить poweshell - но не появляется приглашение к вводу PS>_ это не рабочий вариант?- Изменено AnahaymModerator 9 сентября 2013 г. 11:46
9 сентября 2013 г. 11:45Модератор -
а можно указать конкретный монитор? т.е. не AllScreens , а, к примеру, Monitor[1]
Или есть другой вариант? Сейчас попробую через winrs
И ещё вопрос. Пробовал запускать PsExec и там запустить poweshell - но не появляется приглашение к вводу PS>_[System.Windows.Forms.Screen]::AllScreens[0] - Для 1,1 - для 2,2 -для 3
Или есть другой вариант? Сейчас попробую через winrs - Winrm для этого не предназначенно
Пробовал запускать PsExec и там запустить poweshell - но не появляется приглашение к вводу PS>_ - Разработчики PowerShell не делали фиксов для работы с PsExec,поэтому процесс просто аварийно завершается.
9 сентября 2013 г. 11:55Отвечающий -
увы... [System.Windows.Forms.Screen]::AllScreens[1] - вообще никакого вывода нет. На локальном компе работает - на удалённом тоже нет.
запустил через Winrm powershell - cmd-ые команды работают, повершельные не работают (
остаётся только одно: писать логон\стартап скрипт с записью вывода в файл, и через политику назначить нужным компьютерам.
спасибо за помощь )
9 сентября 2013 г. 12:02Модератор -
остаётся только одно: писать логон\стартап скрипт с записью вывода в файл, и через политику назначить нужным компьютерам.
PCXX BitsPerPixel : 32 Bounds : {X=0,Y=0,Width=1920,Height=1200} DeviceName : \\.\DISPLAY1 Primary : True WorkingArea : {X=0,Y=0,Width=1920,Height=1170} BitsPerPixel : 32 Bounds : {X=1920,Y=120,Width=1920,Height=1080} DeviceName : \\.\DISPLAY2 Primary : False WorkingArea : {X=1920,Y=120,Width=1920,Height=1080} BitsPerPixel : 32 Bounds : {X=-1920,Y=120,Width=1920,Height=1080} DeviceName : \\.\DISPLAY3 Primary : False WorkingArea : {X=-1920,Y=120,Width=1920,Height=1080} PCYY BitsPerPixel : 32 Bounds : {X=0,Y=0,Width=1920,Height=1080} DeviceName : \\.\DISPLAY1 Primary : True WorkingArea : {X=0,Y=0,Width=1920,Height=1040} BitsPerPixel : 32 Bounds : {X=-1680,Y=30,Width=1680,Height=1050} DeviceName : \\.\DISPLAY2 Primary : False WorkingArea : {X=-1680,Y=30,Width=1680,Height=1050}
соответственно для PCXX -1920,120,0,0, а для PCYY -1680,30,0,0
Ещё раз благодарю. Всё работает.
10 сентября 2013 г. 7:41Модератор