none
без мерцания окна power shell RRS feed

  • Вопрос

  • Добрый день. Есть скрипт, делающий снимки экрана и сохраняющий файл в папке.

    [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 в любых случаях?

    И как можно сделать, чтобы при выполнении от системы выполнялся снимок экрана интерактивного пользователя?

    Спасибо.


    • Изменено Anahaym 25 июля 2012 г. 15:16
    25 июля 2012 г. 14:47

Ответы

  • Под System не получится,если только какой-нито драйвер написать.Для скрытия можно воспользоваться - http://kazunposh.wordpress.com/2012/03/19/qa-4/ пункт 13,чтоб не было мерцания.

    • Помечено в качестве ответа Anahaym 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.

    • Помечено в качестве ответа Anahaym 25 июля 2012 г. 15:35
    25 июля 2012 г. 15:27
    Отвечающий
  • подскажите, пожалуйста.
    Нужно чтобы файл копировался в недоменной сети. Копировался на сетевой ресурс, где нужно задавать реквезиты для входа.
    Не могу найти что и куда записать, чтобы подставлялись эти данные...

    Спасибо.

    Прямо в скрипт:

    net use \\pc\ipc$ "/user:$login" $pass
    copy C:\my.exe \\pc\C$\

    • Помечено в качестве ответа Anahaym 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))

    • Помечено в качестве ответа Anahaym 10 сентября 2013 г. 7:42
    25 августа 2013 г. 12:57
    Отвечающий
  • Add-Type -AssemblyName System.Windows.Forms - Для 2 и выше

    [reflection.assembly]::loadwithpartialname("System.Windows.Forms")  - Для 1 и выше

    • Помечено в качестве ответа Anahaym 10 сентября 2013 г. 7:42
    9 сентября 2013 г. 9:38
    Отвечающий

Все ответы

  • Под System не получится,если только какой-нито драйвер написать.Для скрытия можно воспользоваться - http://kazunposh.wordpress.com/2012/03/19/qa-4/ пункт 13,чтоб не было мерцания.

    • Помечено в качестве ответа Anahaym 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.

    • Помечено в качестве ответа Anahaym 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$\

    • Помечено в качестве ответа Anahaym 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))

    • Помечено в качестве ответа Anahaym 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 и выше

    • Помечено в качестве ответа Anahaym 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>_ это не рабочий вариант?
    • Изменено Anahaym 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