Здравствуйте, 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, второй — для его командлетов.