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")
}

+16
14 мая 2009, 23:47
19
ApeCoder 4,4

комментарии (30)

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

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

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

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

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

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



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

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

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

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

function pro() {
     powershell_ise $profile
}

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

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.