Здравствуйте, kochetkov.vladimir, Вы писали:
RO>>Как в PowerShell быстро получить доступ к файлу hosts, особенно при описанном тобой осложнении? KV>select-string ".*" $env:SystemRoot\System32\Drivers\etc\hosts KV>- выведет в output содержимое hosts.
Под «быстро» я понимал «с наименьшим количеством нажатий клавиш».
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, kochetkov.vladimir, Вы писали:
RO>>>Как в PowerShell быстро получить доступ к файлу hosts, особенно при описанном тобой осложнении? KV>>select-string ".*" $env:SystemRoot\System32\Drivers\etc\hosts KV>>- выведет в output содержимое hosts.
RO>Под «быстро» я понимал «с наименьшим количеством нажатий клавиш».
sel<TAB>-s<TAB> "*." $env:sy<TAB-TAB>\S
дальше уже разница — стандартная posh'евая консоль далее не может дополнять путь по табу, консоль с powertab — может. Powertab при этом (как zsh) выводит табличку с возможными вариантами следующего дополнения (по ней тоже можно ходить стрелками).
RO>А зачем select-string? Там есть какой-нибудь cat?
Да, есть:
cat $env:SystemRoot\System32\Drivers\etc\hosts
это alias к Get-Content. Предыдущий пример я выдрал из одного своего скрипта, там требовалась построчная обработка.
У меня, на самом деле, давно есть сильное желание собрать все недостающие интерактивные фичи zsh и прикрутить их к posh'у.
RO>Никого не смущает, что CreateProcess имеет в общей сложности 35 параметров, в то время как fork — 0, а exec — 3 (имя, аргументы, окружение)?
IID>>Вижу только четыре (4!) обязательных параметра. Из которых только три входных, ну да неважно. Ещё 6 опциональных. Но, даже если их сложить вместе, как-то далеко до 35 получается F>Структуры посмотри, что там есть и что вообще можно с ним сделать. Хотя думаю ты это и так знаешь, и просто наглая провокация.
Посмотрел. И что я должен увидеть ? И причём тут вообще структуры, смотрим внимательно выделенное. Одайский чётко озвучил количество параметров. Где же они ?
Здравствуйте, IID, Вы писали:
RO>>Никого не смущает, что CreateProcess имеет в общей сложности 35 параметров, в то время как fork — 0, а exec — 3 (имя, аргументы, окружение)? IID>Посмотрел. И что я должен увидеть ? И причём тут вообще структуры, смотрим внимательно выделенное. Одайский чётко озвучил количество параметров. Где же они ?
Вызов CreateProcess предполагает задание до 35 параметров, часть из которых задается в виде полей структур. Проблема же не в том, что в вызове CreateProcess слишком много запятых (хотя их там изрядно). Сама возможность их задания подчеркивает негибкость архитектуры. Например, для перенаправления stdin в WinAPI требуется задать один из этих параметров, для задания другой рабочей директории — еще один параметр. В то же время в POSIX я могу вызвать что угодно между fork и exec: open+dup2, или chdir, или setuid, и т. п.
Я согласен, что в MS Windows вообще редко приходится создавать процессы, там другие принципы, но WinAPI вообще перегружен и негибок.
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Предлагаю баттл. Каждый нечетный раунд — мой, каждый четный — твой. "Хозяин" раунда озвучивает задачу, решенную им с помощью одного из сабжевых средств и представляет, собственно — решение. Второй — решает эту же задачу с помощью своего средства. Остальные — оценивают каждое из сообщений (1,2,3). Играем 10 раундов, каждый ведет по 5. По результатам — сложим оценки и определим победителя. Готов?
Ну это скорее всего не сложно , но все же. Просто интересно как это будет выглядить без winrar.exe
и какая инфраструктура потребуется для повторения usecase:
$ make
$ setup.exe octo47@myserver.ru
Password: *****
$ ssh octo47@myserer.ru
Last login: Mon Jan 26 22:55:20 2009
Have a lot of fun...
(myserver.ru)$
Сей набор (Makefile + scripts/header.sh) — это самораспаковывающийся инсталятор окружения на удаленной машине.
Makefile (хотя можно сделать и шелом, ибо в makefile просто команды шела) создает скрипт setup.sh, который копирует себя
на удаленноу машину и там распакоывается.
ЗЫ: winrar — не часть ps, т.к. не является частью ос)
Здравствуйте, octo47, Вы писали:
O>Здравствуйте, kochetkov.vladimir, Вы писали:
KV>>Предлагаю баттл. Каждый нечетный раунд — мой, каждый четный — твой. "Хозяин" раунда озвучивает задачу, решенную им с помощью одного из сабжевых средств и представляет, собственно — решение. Второй — решает эту же задачу с помощью своего средства. Остальные — оценивают каждое из сообщений (1,2,3). Играем 10 раундов, каждый ведет по 5. По результатам — сложим оценки и определим победителя. Готов?
O>Ну это скорее всего не сложно , но все же.
Я правильно понимаю, что если выразить задачу более абстрактно, то нужно с эталонной машины слить некие настройки из профиля эталонного пользователя и перенести их на удаленную машину?
O>Просто интересно как это будет выглядить без winrar.exe
А зачем тут именно winrar? В винде есть вполне стандартный makecab.exe, а в .NET (которая является неотъемлемой частью PS) — System.IO.Packaging в целом, и ZipPackage в частности
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Здравствуйте, octo47, Вы писали:
O>>Здравствуйте, kochetkov.vladimir, Вы писали:
KV>>>Предлагаю баттл. Каждый нечетный раунд — мой, каждый четный — твой. "Хозяин" раунда озвучивает задачу, решенную им с помощью одного из сабжевых средств и представляет, собственно — решение. Второй — решает эту же задачу с помощью своего средства. Остальные — оценивают каждое из сообщений (1,2,3). Играем 10 раундов, каждый ведет по 5. По результатам — сложим оценки и определим победителя. Готов?
O>>Ну это скорее всего не сложно , но все же.
KV>Я правильно понимаю, что если выразить задачу более абстрактно, то нужно с эталонной машины слить некие настройки из профиля эталонного пользователя и перенести их на удаленную машину?
Не совсем. В общем случае настройки моей рабочей станции имеют мало общего с серверными настройками.
O>>Просто интересно как это будет выглядить без winrar.exe
KV>А зачем тут именно winrar? В винде есть вполне стандартный makecab.exe, а в .NET (которая является неотъемлемой частью PS) — System.IO.Packaging в целом, и ZipPackage в частности
Я про самораспаковывающийся шелл-скрипт (на PS).
Здравствуйте, octo47, Вы писали:
KV>>Я правильно понимаю, что если выразить задачу более абстрактно, то нужно с эталонной машины слить некие настройки из профиля эталонного пользователя и перенести их на удаленную машину? O>Не совсем. В общем случае настройки моей рабочей станции имеют мало общего с серверными настройками.
Тогда зачем? Я просто не совсем себе представляю способ применения этого на винде Юникс-вэем попахивает
O>>>Просто интересно как это будет выглядить без winrar.exe KV>>А зачем тут именно winrar? В винде есть вполне стандартный makecab.exe, а в .NET (которая является неотъемлемой частью PS) — System.IO.Packaging в целом, и ZipPackage в частности O>Я про самораспаковывающийся шелл-скрипт (на PS).
Времени нет, но вот proof-of-concept (ps-скрипт, содержащий в себе зазипованный notepad.exe, который его из себя извлекает, распаковывает и запускает. используются только стандартные средства XP и .NET 2.0 и выше):
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Здравствуйте, octo47, Вы писали:
KV>>>Я правильно понимаю, что если выразить задачу более абстрактно, то нужно с эталонной машины слить некие настройки из профиля эталонного пользователя и перенести их на удаленную машину? O>>Не совсем. В общем случае настройки моей рабочей станции имеют мало общего с серверными настройками.
KV>Тогда зачем? Я просто не совсем себе представляю способ применения этого на винде Юникс-вэем попахивает
Да в общем-то PS — это тоже в общем-то unix-way ага. Но на винде бывает надо, у меня виртуалок много, вот и подумалось, как бы это выглядело
O>>>>Просто интересно как это будет выглядить без winrar.exe KV>>>А зачем тут именно winrar? В винде есть вполне стандартный makecab.exe, а в .NET (которая является неотъемлемой частью PS) — System.IO.Packaging в целом, и ZipPackage в частности O>>Я про самораспаковывающийся шелл-скрипт (на PS).
KV>Времени нет, но вот proof-of-concept (ps-скрипт, содержащий в себе зазипованный notepad.exe, который его из себя извлекает, распаковывает и запускает. используются только стандартные средства XP и .NET 2.0 и выше):
Вах интересно. Только вот лучше тогда уж в base64. Ибо @' уж больно короткий
Здравствуйте, octo47, Вы писали:
KV>>Тогда зачем? Я просто не совсем себе представляю способ применения этого на винде Юникс-вэем попахивает O>Да в общем-то PS — это тоже в общем-то unix-way ага. Но на винде бывает надо, у меня виртуалок много, вот и подумалось, как бы это выглядело
У меня на виртуалках это выглядит так: Deploy VM from template -> Use VM Customiztion Wizard, а дальше ответ на ряд вопросов визарда или выбор сохраненной конфигурации, где только и надо, например, что задать IP и имя компьютера
А вообще есть достаточное количество инструментария для deploy'я виндовых серверов, так что такая задача все-таки странновата...
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Времени нет, но вот proof-of-concept (ps-скрипт, содержащий в себе зазипованный notepad.exe, который его из себя извлекает, распаковывает и запускает. используются только стандартные средства XP и .NET 2.0 и выше):
Получится шелловый скрипт (test.run), который извлечет из себя файл, проверит хеш (а твой скрипт проверяет хеш?), запустит извлеченный файл, уберет за собой.
Здравствуйте, octo47, Вы писали:
O>Ну это скорее всего не сложно :), но все же. Просто интересно как это будет выглядить без winrar.exe :) O>и какая инфраструктура потребуется для повторения usecase: O>
O>$ make
O>$ setup.exe octo47@myserver.ru
O>Password: *****
O>$ ssh octo47@myserer.ru
O>Last login: Mon Jan 26 22:55:20 2009
O>Have a lot of fun...
O>(myserver.ru)$
O>
Смотрю я, смотрю, и никак не пойму, какая здесь нужна инфраструктура помимо scp -C.
Здравствуйте, DOOM, Вы писали:
DOO>Здравствуйте, octo47, Вы писали:
KV>>>Тогда зачем? Я просто не совсем себе представляю способ применения этого на винде Юникс-вэем попахивает O>>Да в общем-то PS — это тоже в общем-то unix-way ага. Но на винде бывает надо, у меня виртуалок много, вот и подумалось, как бы это выглядело DOO>У меня на виртуалках это выглядит так: Deploy VM from template -> Use VM Customiztion Wizard, а дальше ответ на ряд вопросов визарда или выбор сохраненной конфигурации, где только и надо, например, что задать IP и имя компьютера
Не , у меня:
1. юниксовые
2. не я их настраиваю обычно.
DOO>А вообще есть достаточное количество инструментария для deploy'я виндовых серверов, так что такая задача все-таки странновата...
ну тут весь топик странноват . сравнивать .Net (который все таки для программиста) и инструментарий unix выработанный годами для работы не программистов (админов) использующий простейшую аки столб вещь — конвеер .
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Здравствуйте, octo47, Вы писали:
KV>>>Я правильно понимаю, что если выразить задачу более абстрактно, то нужно с эталонной машины слить некие настройки из профиля эталонного пользователя и перенести их на удаленную машину? O>>Не совсем. В общем случае настройки моей рабочей станции имеют мало общего с серверными настройками.
KV>Тогда зачем? Я просто не совсем себе представляю способ применения этого на винде Юникс-вэем попахивает
Вот подумал я тут — данный пример хорошо показывает гениальность unix утилит и идеи конвеера в данных задачах, чем зоопарк .Net (Java, Python, Ruby).
1. Простая концепция близкая к ФП — все есть функция (фильтр, конвеер), например base64 — это элементарно, в твоем случае — не очень , и что характерно каждый такой дополнительный функционал — гимор.
2. Шаги bash, выполняемые утилитами (awk, sed, tail) проверяются отдельно и обычно не имеют побочных эффектов (исключение наверное только для >> )
3. Для понимания этого скрипта нет необходимости знать что такое Byte[] New-Object как его сделать delete , и вообще что такое память массив и, о ужас, GC.
4. Когда ты захочешь не умереть от нехватки памяти (например если аттач 500Мб на 128Мб машине), то тебе придется думать, а админы не любят думать . По этому у меня работает конструкция pg_dump -s schema1 -s schema2 | gzip > dump.gz для базы в 30Гб, а у тебя это не сработает. Придется мудрить с while(read < total) { readToBuffer; writerToFile; }.
А вообще сравнивать PS надо с python/perl/Java(groovy,scala,bsh...). Ибо удобство использования PS _не програмиистом_ не совсем очевидно.
Здравствуйте, octo47, Вы писали:
O>Здравствуйте, kochetkov.vladimir, Вы писали:
O>4. Когда ты захочешь не умереть от нехватки памяти (например если аттач 500Мб на 128Мб машине), то тебе придется думать, а админы не любят думать . По этому у меня работает конструкция pg_dump -s schema1 -s schema2 | gzip > dump.gz для базы в 30Гб, а у тебя это не сработает. Придется мудрить с while(read < total) { readToBuffer; writerToFile; }.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, octo47, Вы писали:
RO>Смотрю я, смотрю, и никак не пойму, какая здесь нужна инфраструктура помимо scp -C.
Не задумывался. Оно вроде раньше еще apt-get install zsh запускало .
А вообще как-то лет 8 назад хотелось написать распаковывающийся sh. Написал. До сих пор использую
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, kochetkov.vladimir, Вы писали:
KV>>Времени нет, но вот proof-of-concept (ps-скрипт, содержащий в себе зазипованный notepad.exe, который его из себя извлекает, распаковывает и запускает. используются только стандартные средства XP и .NET 2.0 и выше):
RO>OMG.
RO>
RO>sudo aptitude install makeself
Угу. А теперь плс то же самое, но без этой строчки. И посмотрим, какое OMG получится у тебя ;)
RO>mkdir contents
RO>cp /usr/bin/xeyes contents
RO>makeself contents test.run "makeself test" ./xeyes
RO>
RO>Получится шелловый скрипт (test.run), который извлечет из себя файл, проверит хеш (а твой скрипт проверяет хеш?), запустит извлеченный файл, уберет за собой.
Мне написать на PS командлет Make-Self, который делает тоже самое, практически с идентичным синтаксисом, или на слово поверишь?
Здравствуйте, octo47, Вы писали:
KV>>Тогда зачем? Я просто не совсем себе представляю способ применения этого на винде Юникс-вэем попахивает
O>Вот подумал я тут — данный пример хорошо показывает гениальность unix утилит и идеи конвеера в данных задачах, чем зоопарк .Net (Java, Python, Ruby).
Долго думал над выделенным...
O>3. Для понимания этого скрипта нет необходимости знать что такое Byte[] New-Object как его сделать delete , и вообще что такое память массив и, о ужас, GC.
Если выбирать между программистом и админом, то я скорее админ, причем бывший Тут я лажанул, хотел написать так, что местным программерам понятнее было + не было времени на прояснение пары вопросов, чтобы написать в true-posh стиле posh вполне позволяет использовать и конвейерно-"функциональный" стиль:
Знать scritable COM-объекты виндового shell'a нормальный винадмин просто обязан. Ибо других путей эффективно админить эту систему без wsh до posh просто не было.
А кусок, забирающий файл, ищущий метку и сливающий вложение в другой файл, вполне можно выразить без использования .NET'а вообще, через конструкцию типа:
Как я уже сказал, просто не хватило времени разобраться с особенностями парсинга бинарных файлов средствами posh. Поэтому незнание этих особенностей компенсировал реализацией тупо, в лоб, .NET'ом.
O>4. Когда ты захочешь не умереть от нехватки памяти (например если аттач 500Мб на 128Мб машине), то тебе придется думать, а админы не любят думать . По этому у меня работает конструкция pg_dump -s schema1 -s schema2 | gzip > dump.gz для базы в 30Гб, а у тебя это не сработает. Придется мудрить с while(read < total) { readToBuffer; writerToFile; }.
Сработает, причем один-в-один, и мудрить не придется
O>А вообще сравнивать PS надо с python/perl/Java(groovy,scala,bsh...). Ибо удобство использования PS _не програмиистом_ не совсем очевидно.
PS — не язык. Просто до него на винде не было полноценных средств администрирования, которые бы позволяли так гибко использовать средства своего синтаксиса. Posh позволяет использовать как привычный админам стиль конвейеров, так и построчную императивщину с использованием всех возможностей .NET. Первый вариант — тру вей для написания скриптов posh, второй — для его командлетов.
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Здравствуйте, octo47, Вы писали:
O>>Вот подумал я тут — данный пример хорошо показывает гениальность unix утилит и идеи конвеера в данных задачах, чем зоопарк .Net (Java, Python, Ruby). KV>Долго думал над выделенным...
Читать как .Net или Java или Python или Ruby. Ибо под каждым из них есть что-то подобное PS.
O>>3. Для понимания этого скрипта нет необходимости знать что такое Byte[] New-Object как его сделать delete , и вообще что такое память массив и, о ужас, GC.
KV>Если выбирать между программистом и админом, то я скорее админ, причем бывший Тут я лажанул, хотел написать так, что местным программерам понятнее было + не было времени на прояснение пары вопросов, чтобы написать в true-posh стиле posh вполне позволяет использовать и конвейерно-"функциональный" стиль:
KV>
for i in `ls *.txt`; do
cat "$i" | gzip | gpg --encrypt --recipient xxxxx@gmail.com - > "$i".gz.enc && wipe "$i"
&& echo "Catch your file, man\!" | mail -s test -a "$i".gz.enc xxxxx@gmail.com
done;
O>>4. Когда ты захочешь не умереть от нехватки памяти (например если аттач 500Мб на 128Мб машине), то тебе придется думать, а админы не любят думать . По этому у меня работает конструкция pg_dump -s schema1 -s schema2 | gzip > dump.gz для базы в 30Гб, а у тебя это не сработает. Придется мудрить с while(read < total) { readToBuffer; writerToFile; }.
KV>Сработает, причем один-в-один, и мудрить не придется
??? Я как-то не так понял этот кусок кода?
KV>PS — не язык. Просто до него на винде не было полноценных средств администрирования, которые бы позволяли так гибко использовать средства своего синтаксиса. Posh позволяет использовать как привычный админам стиль конвейеров, так и построчную императивщину с использованием всех возможностей .NET. Первый вариант — тру вей для написания скриптов posh, второй — для его командлетов.
Я и не говорил, что это язык. Это инструмент, который требует знания языка и платформы .Net
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Угу. А теперь плс то же самое, но без этой строчки. И посмотрим, какое OMG получится у тебя ;) KV>Мне написать на PS командлет Make-Self, который делает тоже самое, практически с идентичным синтаксисом, или на слово поверишь? ;)