Re[13]: Мне стало понятно
От: Roman Odaisky Украина  
Дата: 27.01.09 10:58
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

RO>>Как в PowerShell быстро получить доступ к файлу hosts, особенно при описанном тобой осложнении?

KV>select-string ".*" $env:SystemRoot\System32\Drivers\etc\hosts
KV>- выведет в output содержимое hosts.

Под «быстро» я понимал «с наименьшим количеством нажатий клавиш».

А зачем select-string? Там есть какой-нибудь cat?
До последнего не верил в пирамиду Лебедева.
Re[14]: Мне стало понятно
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 27.01.09 11:24
Оценка:
Здравствуйте, 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'у.

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[6]: Мне стало понятно
От: IID Россия  
Дата: 30.01.09 23:24
Оценка:
Здравствуйте, fddima, Вы писали:


RO>Никого не смущает, что CreateProcess имеет в общей сложности 35 параметров, в то время как fork — 0, а exec — 3 (имя, аргументы, окружение)?


IID>>Вижу только четыре (4!) обязательных параметра. Из которых только три входных, ну да неважно. Ещё 6 опциональных. Но, даже если их сложить вместе, как-то далеко до 35 получается

F>Структуры посмотри, что там есть и что вообще можно с ним сделать. Хотя думаю ты это и так знаешь, и просто наглая провокация.

Посмотрел. И что я должен увидеть ? И причём тут вообще структуры, смотрим внимательно выделенное. Одайский чётко озвучил количество параметров. Где же они ?
kalsarikännit
Re[7]: Мне стало понятно
От: Roman Odaisky Украина  
Дата: 31.01.09 14:57
Оценка: +1
Здравствуйте, IID, Вы писали:

RO>>Никого не смущает, что CreateProcess имеет в общей сложности 35 параметров, в то время как fork — 0, а exec — 3 (имя, аргументы, окружение)?

IID>Посмотрел. И что я должен увидеть ? И причём тут вообще структуры, смотрим внимательно выделенное. Одайский чётко озвучил количество параметров. Где же они ?

Вызов CreateProcess предполагает задание до 35 параметров, часть из которых задается в виде полей структур. Проблема же не в том, что в вызове CreateProcess слишком много запятых (хотя их там изрядно). Сама возможность их задания подчеркивает негибкость архитектуры. Например, для перенаправления stdin в WinAPI требуется задать один из этих параметров, для задания другой рабочей директории — еще один параметр. В то же время в POSIX я могу вызвать что угодно между fork и exec: open+dup2, или chdir, или setuid, и т. п.

Я согласен, что в MS Windows вообще редко приходится создавать процессы, там другие принципы, но WinAPI вообще перегружен и негибок.
До последнего не верил в пирамиду Лебедева.
Re: 2Sheridan: ну че, баттл? PS vs Bash...
От: octo47 Россия  
Дата: 02.02.09 00:11
Оценка:
Здравствуйте, 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, т.к. не является частью ос)
.
|-- Makefile
|-- archive
|   |-- .profile.common
|   |-- .ssh
|   |   `-- authorized_keys
|   |-- .vim
|   |   `-- colors
|   |       `-- calmar256-dark.vim
|   |-- .vimrc
|   |-- .zshprompt
|   `-- .zshrc
|-- scripts
|   `-- header.sh
`-- setup.sh

scripts/header.sh
#!/bin/sh

usage() {
        echo "My Host Installer v1.0"
        echo "setup.sh install <uname@host>]"
        exit 1
}

extract() {
        SKIP=`awk '/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }' $0`
        tail -n +$SKIP $0 | tar xz
}

case "$1" in
        install) 
        if [ "x$2" = "x" ]; then
            usage
        fi
        NAME=`basename "$0"`
        scp "$0" "$2:~/"
        ssh "$2" chmod +x "$NAME" 
        ssh "$2" ./$NAME _unpack
        ssh "$2" rm -f "$NAME" 
    ;;
        _unpack)
                if [ "x$SSH_CONNECTION" = "x" ]; then
                        echo "Call only in SSH session"
                        usage
                fi

        extract
    ;;
        *) 
        usage
    ;;
esac

exit 0

__ARCHIVE_FOLLOWS__


Makefile
ARCHSRC=$(shell ls -1 archive)
all: setup.sh
buildenv: 
    @if [ ! -d .build ]; then mkdir .build; fi

setup.sh: scripts/header.sh archive.tgz
    @cat scripts/header.sh > setup.sh
    @cat .build/archive.tgz >> setup.sh
    @chmod +x setup.sh

archive.tgz: buildenv $(ARCHSRC)
    @(cd archive && tar -zcf ../.build/archive.tgz .)
    
clean:
    @rm setup.sh
    @rm -rf .build
Re[2]: 2Sheridan: ну че, баттл? PS vs Bash...
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 02.02.09 06:44
Оценка:
Здравствуйте, octo47, Вы писали:

O>Здравствуйте, kochetkov.vladimir, Вы писали:


KV>>Предлагаю баттл. Каждый нечетный раунд — мой, каждый четный — твой. "Хозяин" раунда озвучивает задачу, решенную им с помощью одного из сабжевых средств и представляет, собственно — решение. Второй — решает эту же задачу с помощью своего средства. Остальные — оценивают каждое из сообщений (1,2,3). Играем 10 раундов, каждый ведет по 5. По результатам — сложим оценки и определим победителя. Готов?



O>Ну это скорее всего не сложно , но все же.


Я правильно понимаю, что если выразить задачу более абстрактно, то нужно с эталонной машины слить некие настройки из профиля эталонного пользователя и перенести их на удаленную машину?

O>Просто интересно как это будет выглядить без winrar.exe


А зачем тут именно winrar? В винде есть вполне стандартный makecab.exe, а в .NET (которая является неотъемлемой частью PS) — System.IO.Packaging в целом, и ZipPackage в частности

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[3]: 2Sheridan: ну че, баттл? PS vs Bash...
От: octo47 Россия  
Дата: 02.02.09 07:19
Оценка:
Здравствуйте, 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).
Re[4]: 2Sheridan: ну че, баттл? PS vs Bash...
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 02.02.09 14:58
Оценка: 1 (1)
Здравствуйте, 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 и выше):

$scriptFullName = $MyInvocation.MyCommand.Path
$temporaryPath = $env:temp + '\' + $MyInvocation.MyCommand.Name
new-item -path $temporaryPath -type directory
$attachmentFullName = $temporaryPath + '\' + $MyInvocation.MyCommand.Name.Replace('.ps1', '.zip')

[Byte[]]$scriptContent = [System.IO.File]::ReadAllBytes($scriptFullName)

$attachmentPosition = 0
while ($scriptContent[$attachmentPosition] -ne 64 -or 
       $scriptContent[$attachmentPosition + 1] -ne 39)
{
    $attachmentPosition++
}
$attachmentPosition += 3

$attachmentSize = $scriptContent.Length - $attachmentPosition - 14

[Byte[]]$attachmentContent = New-Object Byte[] $attachmentSize
[Array]::Copy($scriptContent, $attachmentPosition, $attachmentContent, 0, $attachmentSize)
[System.IO.File]::WriteAllBytes($attachmentFullName, $attachmentContent)

$shellApplication = new-object -com Shell.Application
$zipFolder = $shellApplication.NameSpace($attachmentFullName)
$destinationFolder = $shellApplication.NameSpace($temporaryPath)
$folderItems = $zipFolder.Items()
$destinationFolder.CopyHere($folderItems);

invoke-item $temporaryPath\*.exe | Out-Null

@'
<здесь был бинарник внедренного zip-файла>
'@ | Out-Null


Работающий прототип можно взять тут. Распаковать и запустить файл в консоли ps. Запустится внедренный блокнот.

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[5]: 2Sheridan: ну че, баттл? PS vs Bash...
От: octo47 Россия  
Дата: 02.02.09 17:24
Оценка:
Здравствуйте, 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. Ибо @' уж больно короткий

--(octo@black:pts/0)-------------------------------(~/Shared/Soft/linux/java)--
--(20:21:%)-- grep -R @\' *
Бинарный файл ajax/ajaxanywhere-1.2-RC2-src.jar совпадает
Бинарный файл ajax/ajaxtags-1.2-beta2-bin.zip совпадает
Бинарный файл ajax/ajaxtags-1.2-beta2-src.zip совпадает
Бинарный файл ajax/ajaxtags-1.2-beta2.war совпадает
Бинарный файл ajax/ajaxtags-demo-1.2-beta2-src.zip совпадает
Бинарный файл ajax/ajaxAnywhereDemo-1.2-RC1.war совпадает
Бинарный файл alfresco/AlfrescoEnterprise-2.1.1-Linux-x86-Install.bin совпадает
Бинарный файл antant/antant-1.0.0.rc5.zip совпадает
Бинарный файл apache-ant-1.6.5-bin.zip совпадает
^C



KV>Работающий прототип можно взять тут. Распаковать и запустить файл в консоли ps. Запустится внедренный блокнот.

Хорошая к стати штука для вирусняка.
Re[6]: 2Sheridan: ну че, баттл? PS vs Bash...
От: DOOM Россия  
Дата: 02.02.09 18:19
Оценка:
Здравствуйте, octo47, Вы писали:

KV>>Тогда зачем? Я просто не совсем себе представляю способ применения этого на винде Юникс-вэем попахивает

O>Да в общем-то PS — это тоже в общем-то unix-way ага. Но на винде бывает надо, у меня виртуалок много, вот и подумалось, как бы это выглядело
У меня на виртуалках это выглядит так: Deploy VM from template -> Use VM Customiztion Wizard, а дальше ответ на ряд вопросов визарда или выбор сохраненной конфигурации, где только и надо, например, что задать IP и имя компьютера

А вообще есть достаточное количество инструментария для deploy'я виндовых серверов, так что такая задача все-таки странновата...
Re[5]: 2Sheridan: ну че, баттл? PS vs Bash...
От: Roman Odaisky Украина  
Дата: 02.02.09 18:36
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Времени нет, но вот proof-of-concept (ps-скрипт, содержащий в себе зазипованный notepad.exe, который его из себя извлекает, распаковывает и запускает. используются только стандартные средства XP и .NET 2.0 и выше):


OMG.

sudo aptitude install makeself

mkdir contents
cp /usr/bin/xeyes contents
makeself contents test.run "makeself test" ./xeyes

Получится шелловый скрипт (test.run), который извлечет из себя файл, проверит хеш (а твой скрипт проверяет хеш?), запустит извлеченный файл, уберет за собой.
До последнего не верил в пирамиду Лебедева.
Re[2]: 2Sheridan: ну че, баттл? PS vs Bash...
От: Roman Odaisky Украина  
Дата: 02.02.09 18:45
Оценка:
Здравствуйте, 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.
До последнего не верил в пирамиду Лебедева.
Re[7]: 2Sheridan: ну че, баттл? PS vs Bash...
От: octo47 Россия  
Дата: 02.02.09 19:46
Оценка:
Здравствуйте, DOOM, Вы писали:

DOO>Здравствуйте, octo47, Вы писали:


KV>>>Тогда зачем? Я просто не совсем себе представляю способ применения этого на винде Юникс-вэем попахивает

O>>Да в общем-то PS — это тоже в общем-то unix-way ага. Но на винде бывает надо, у меня виртуалок много, вот и подумалось, как бы это выглядело
DOO>У меня на виртуалках это выглядит так: Deploy VM from template -> Use VM Customiztion Wizard, а дальше ответ на ряд вопросов визарда или выбор сохраненной конфигурации, где только и надо, например, что задать IP и имя компьютера

Не , у меня:
1. юниксовые
2. не я их настраиваю обычно.

DOO>А вообще есть достаточное количество инструментария для deploy'я виндовых серверов, так что такая задача все-таки странновата...

ну тут весь топик странноват . сравнивать .Net (который все таки для программиста) и инструментарий unix выработанный годами для работы не программистов (админов) использующий простейшую аки столб вещь — конвеер .
Re[5]: 2Sheridan: ну че, баттл? PS vs Bash...
От: octo47 Россия  
Дата: 02.02.09 20:01
Оценка:
Здравствуйте, 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 _не програмиистом_ не совсем очевидно.
Re[6]: 2Sheridan: ну че, баттл? PS vs Bash...
От: DOOM Россия  
Дата: 02.02.09 20:04
Оценка:
Здравствуйте, octo47, Вы писали:

O>Здравствуйте, kochetkov.vladimir, Вы писали:


O>4. Когда ты захочешь не умереть от нехватки памяти (например если аттач 500Мб на 128Мб машине), то тебе придется думать, а админы не любят думать . По этому у меня работает конструкция pg_dump -s schema1 -s schema2 | gzip > dump.gz для базы в 30Гб, а у тебя это не сработает. Придется мудрить с while(read < total) { readToBuffer; writerToFile; }.


Кстати, очень хорошее замечание...
Re[3]: 2Sheridan: ну че, баттл? PS vs Bash...
От: octo47 Россия  
Дата: 02.02.09 20:14
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, octo47, Вы писали:


RO>Смотрю я, смотрю, и никак не пойму, какая здесь нужна инфраструктура помимо scp -C.


Не задумывался. Оно вроде раньше еще apt-get install zsh запускало .
А вообще как-то лет 8 назад хотелось написать распаковывающийся sh. Написал. До сих пор использую
Re[6]: 2Sheridan: ну че, баттл? PS vs Bash...
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 02.02.09 20:43
Оценка:
Здравствуйте, 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, который делает тоже самое, практически с идентичным синтаксисом, или на слово поверишь?

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[6]: 2Sheridan: ну че, баттл? PS vs Bash...
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 02.02.09 20:43
Оценка:
Здравствуйте, octo47, Вы писали:

KV>>Тогда зачем? Я просто не совсем себе представляю способ применения этого на винде Юникс-вэем попахивает


O>Вот подумал я тут — данный пример хорошо показывает гениальность unix утилит и идеи конвеера в данных задачах, чем зоопарк .Net (Java, Python, Ruby).


Долго думал над выделенным...

O>3. Для понимания этого скрипта нет необходимости знать что такое Byte[] New-Object как его сделать delete , и вообще что такое память массив и, о ужас, GC.


Если выбирать между программистом и админом, то я скорее админ, причем бывший Тут я лажанул, хотел написать так, что местным программерам понятнее было + не было времени на прояснение пары вопросов, чтобы написать в true-posh стиле posh вполне позволяет использовать и конвейерно-"функциональный" стиль:

например, этот фрагмент:

$shellApplication = new-object -com Shell.Application
$zipFolder = $shellApplication.NameSpace($attachmentFullName)
$destinationFolder = $shellApplication.NameSpace($temporaryPath)
$folderItems = $zipFolder.Items()
$destinationFolder.CopyHere($folderItems);


можно переписать примерно так:

new-object -com Shell.Application | $_.NameSpace($attachmentFullName), $_.NameSpace($temporaryPath) | $_[1].CopyHere($_[0].Items())


Знать scritable COM-объекты виндового shell'a нормальный винадмин просто обязан. Ибо других путей эффективно админить эту систему без wsh до posh просто не было.

А кусок, забирающий файл, ищущий метку и сливающий вложение в другой файл, вполне можно выразить без использования .NET'а вообще, через конструкцию типа:

Get-Content bla-bla-bla | Select-String Bla-bla-bla | Set-Content bla-bla-bla


Как я уже сказал, просто не хватило времени разобраться с особенностями парсинга бинарных файлов средствами 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, второй — для его командлетов.

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[7]: 2Sheridan: ну че, баттл? PS vs Bash...
От: octo47 Россия  
Дата: 02.02.09 21:06
Оценка:
Здравствуйте, 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>
KV>new-object -com Shell.Application | $_.NameSpace($attachmentFullName), $_.NameSpace($temporaryPath) | $_[1].CopyHere($_[0].Items())
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>Сработает, причем один-в-один, и мудрить не придется

??? Я как-то не так понял этот кусок кода?
$attachmentSize = $scriptContent.Length - $attachmentPosition - 14

[Byte[]]$attachmentContent = New-Object Byte[] $attachmentSize
[Array]::Copy($scriptContent, $attachmentPosition, $attachmentContent, 0, $attachmentSize)
[System.IO.File]::WriteAllBytes($attachmentFullName, $attachmentContent)



KV>PS — не язык. Просто до него на винде не было полноценных средств администрирования, которые бы позволяли так гибко использовать средства своего синтаксиса. Posh позволяет использовать как привычный админам стиль конвейеров, так и построчную императивщину с использованием всех возможностей .NET. Первый вариант — тру вей для написания скриптов posh, второй — для его командлетов.

Я и не говорил, что это язык. Это инструмент, который требует знания языка и платформы .Net
Re[7]: 2Sheridan: ну че, баттл? PS vs Bash...
От: Roman Odaisky Украина  
Дата: 02.02.09 21:47
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Угу. А теперь плс то же самое, но без этой строчки. И посмотрим, какое OMG получится у тебя ;)

KV>Мне написать на PS командлет Make-Self, который делает тоже самое, практически с идентичным синтаксисом, или на слово поверишь? ;)

А у нас тут Unix way.

Но пожалуйста, аналог твоего скрипта:
#!/bin/sh -e
# vim: ft=sh binary noeol

XEYES="$(mktemp -t xeyes.XXXXXXXX)"
sed -e '1,/^BINARY$/d' "$0" | gzip -dc >"$XEYES"
chmod a+x "$XEYES"
"$XEYES"
rm "$XEYES"

exit 0

BINARY
^_?^H^@&f?I^@^C?Z^OXTитакдалее

Вариант с черной магией, работает в зависимости от фазы луны:
#!/bin/sh -e
tail -n +3 $0 | gzip -dc | exec /lib/ld-2.7.so /dev/stdin
^_?^H^@&f?I^@^C?Z^OXTитакдалее
До последнего не верил в пирамиду Лебедева.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.