PowerShell: выстрелил и забыл

    Иногда мне хочется попросить PowerShell сделать что-нибудь длительное, а потом известить меня о том что работа готова. А я пока что-нибудь другое поделаю.

    Например вот так
    cp c:\windows\system32 -rec d:; done
    

    (В качестве длительной операции «скопировать все из c:\windows\system32 на d:»)

    Функция done выводит сообщение с надписью «done» причем его видно даже есои компьютер залочен.
    Это достигается вот таким простеньким кусочком кода в профиле:

    [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    function msgBox($x){
        [System.Windows.Forms.MessageBox]::Show($x, 'Done!:PowerShell', 
    	[Windows.Forms.MessageBoxButtons]::OK, 
    	[Windows.Forms.MessageBoxIcon]::Information, [Windows.Forms.MessageBoxDefaultButton]::Button1,
    	[Windows.Forms.MessageBoxOptions]::ServiceNotification
        )
    }
    
    function done(){ 
        msgBox("done")
    }
    

    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 30

      +5
      Увидел заголовок. Решил, что расскажут о том, как научить PowerShell выполнить длинный процесс в отдельном процессе. Предчувствие подсказывало, что об этом не расскажут. Так и вышло.
        +1
        Бонус:

        1. Ctrl+T в Ise открывает новый Tab, каковой работает параллельно
        2. help about_jobs
          +18
          >Увидел заголовок. Решил, что расскажут о том, как…
          выстрелить себе в ногу.
            +2
            а потом забыть про боль?
              –2
              Мне когда-то попадалась на глаза шуточная статья про реализацию задачи «выстрелить себе в ногу» на разных языках программрования.
              [captain_obvioius]Скорее всего имелось в виду про: http://lurkmore.ru/Выстрелить_себе_в_ногу[/captain_obvioius]
          –16
          Как всё не удобнов, в linux достаточно написать:
          cp -r ~/dir /media/disk&&echo done&
            +4
            Ну и что из этого?
              +18
              echo выводит на консоль, насколько я знаю. Здесь штука в том, чтобы оставить задание, свернуть и спокойно работать над другими проблемами. Когда операция заканчивается, вы ыидите message box с надписью done поверх всех окон.

              Причем если машина залочена вы тоже увидите этот бокс благодаря [Windows.Forms.MessageBoxOptions]::ServiceNotification

              Если вы хотите перевести разговор с корнкретного практичесого приема в плосколсть «linux vs windows» то я к этому не готов так как линукса не знаю.
                0
                Просто чтоб было:
                nexec () {
                	echo $@
                	msg=$@
                	notify-send "Operation done" "$msg"
                }
                nexec cp /etc/passwd /tmp/
                
                  0
                  тоже хорошо. А на залоченной машине покажет?
                +11
                «Как всё не удобнов», в windows достаточно написать:

                cp c:\windows\system32 -rec d: && echo done

                «Врага нужно знать в лицо»
                  –3
                  А зачем тогда повершелл?
                  +4
                  zenity вместо echo. ;)
                  0
                  а не лучше звук вывести? или нотификация будет там всегда, пока ее не щелкнешь?
                    0
                    Отошёл от компьютера => не услышал звук. Плохо :)
                      +1
                      Обычный месседж бокс, только поверх всех окон:



                      Кстати стандартный звук тоже выводится.

                      Висит пока не нажмешь OK. У меня звук в компе отключен.

                      0
                      А еще лучше по SMS послать или в аську
                        +39
                        А ещё лучше, чтобы сисястая телка приходила и докладывала…
                          +3
                          боюсь тогда бы жесткий диск быстро накрылся от постоянной работы :)
                            0
                            да уж, с сисястой телкой надо побыстрее накрываться…
                        0
                        Эм… что за профиль?
                          +2
                          Профиль — это скрипт, который выполняется при запуске PowerShell.
                          Путь к профилю хранится в переменной $profile.
                          Ещё автор не упомянул, что для того, чтобы PowerShell подхватил профиль, нужно поменять политику выполнения.
                          Например, Set-ExecutionPolicy RemoteSigned (ну и перегрузить PowerShell).
                            0
                            Спасибо, про Set-ExecutionPolicy RemoteSigned мне подсказал PowerGUI.
                            +1
                            если работаете в PowerShell ISE, наберите powershell_ise $profile и отредактируйте.

                            у меня ф профиле есть функуифя для редактирования профиля

                            function pro() {
                                 powershell_ise $profile
                            }
                            

                            или
                            function pro() {
                                 notepad $profile
                            }
                            
                              0
                              На сколько я знаю PowerShell ISE появляется в PowerShell, который пока не зарелизен, так?
                                0
                                Ага в V2CTP3. Но я пользуюсь только им и глюков не замечал. Единственное — в русское винде, чтоб работала команда help надо мкопирвоать папку en-us в ru-ru
                                  0
                                  А поверх 1.0 ставится без проблем?
                                    +1
                                    надо снести 1.0 сначала — зайти в установку и удаление программ и выбрать галку «Показать обновления» — тогда можно увидеть PSh
                                    0
                                    Джефри писал, что там есть IntelliSense, но я как ни пытался, нашел только старинное дополнение по табу… Не знаете, как там вызывается IntelliSense?
                                      0
                                      может он и имеет ввиду дополнение по табу? я не видело там интеллисенса. Еще там нет некоторых фишек из консольной версии — например, истории по хоткею. А жаль. Зато плагины можно писать.

                            Only users with full accounts can post comments. Log in, please.