Является ли PowerShell хорошим обновлением для пакетного файла? - PullRequest
21 голосов
/ 24 января 2009

Я упаковываю выпуски нашего сервера в zip-файлы, используя пакетный файл (Windows), используя версию командной строки WinZip. Ранее мы делали подобные вещи вручную, но я разработал процесс их автоматизации с помощью командного файла.

Пакетный файл стал довольно сложным, потому что наш продукт сложен (то есть, какие разделы мы выпускаем на этот раз? Мы также выпускаем файлы конфигурации?), И я начинаю сталкиваться с некоторыми неприятными ограничениями с пакетными файлами .

Будет ли PowerShell хорошей идеей для изучения в качестве «обновления» командного файла? Или это полное излишество, учитывая, что большая часть того, что он будет делать, это запускать команды DOS?

Бонус: может ли PowerShell использовать сборки .NET? Например, могу ли я начать архивирование с SharpZip?

Ответы [ 8 ]

15 голосов
/ 24 января 2009

Если у вас есть работающее решение, то вам не нужно , чтобы перейти на powershell. Сказав это, если вы планируете вносить изменения или улучшать процесс, я бы настоятельно рекомендовал PowerShell как способ. Powershell может получить доступ к .Net сборкам ... в основном. Некоторые сборки структурированы таким образом, что это усложняет работу других.

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

8 голосов
/ 25 января 2009

Изначально я был очень рад PowerShell. Наконец-то мощная родная оболочка для Windows. Однако я быстро понял, что по сравнению с вашей любимой оболочкой Unix PowerShell слишком многословен. Даже выполнение простых вещей требует слишком много печатания по сравнению с тем, что вы можете сделать с помощью инструментов bash и GNU для Win32.

Мне нравится идея, что оболочка знает о различных типах, но если мне нужно проделать такую ​​большую дополнительную работу, я предпочитаю просто получать необходимые данные с помощью различных потоковых редакторов Unix.

РЕДАКТИРОВАТЬ : я только что взглянул на PowerShell, и должен признать, что он действительно имеет некоторые полезные функции, которые недоступны для традиционных инструментов в стиле Unix.

Например, PowerShell владеет всеми командами, что означает, что он может предоставить гораздо более согласованный набор функций. Параметры обрабатываются единообразно, вы можете искать команды, параметры и так далее, используя подстановочные знаки, что действительно полезно.

Вторая замечательная особенность заключается в том, что PowerShell позволяет перечислять источники, которые обычно недоступны для потоковых редакторов, таких как реестр Windows, хранилище сертификатов и т. Д. Конечно, у вас могут быть инструменты, которые сделают это за вас, и представить их в виде текста, но подход PowerShell - это действительно очень элегантный IMO.

4 голосов
/ 24 января 2009

Взгляните на PowerShell Community Extensions (PSCX), он БЕСПЛАТНЫЙ и имеет командлеты Zip:

Write-Zip

Write-BZip2

Write-GZip

http://www.codeplex.com/PowerShellCX

3 голосов
/ 26 января 2009

Вы должны посмотреть эту презентацию / обсуждение с Джеффри Сновером , создателем и архитектором PowerShell. Если вы не удивлены техническими деталями (много «вау» моментов), вы будете поражены энтузиазмом Джеффри :). Когда вы освоите основы, с PowerShell легко работать.

2 голосов
/ 24 января 2009

Я пытался заменить один из длинных пакетных файлов сборки, который я использую, на Power Shell. Мне было больно: по крайней мере, в то время документация фокусировалась на забавном словоблудии и том, какие крутые, жуткие вещи вы можете с ним сделать, но не хватало в категории «сделать простые вещи». Я получил это работает, но обработка ошибок была шаткой.

YMMV, попробуйте PowerShell, вам может понравиться. Но попробуйте, прежде чем обновлять ваши сборки.

Мое решение: использовать консольное приложение C #. У меня есть серьезная регистрация, обработка исключений, я могу использовать свои служебные функции, и если что-то не работает, у меня есть настоящий отладчик. Это первое решение, которое я хотел бы изменить.

2 голосов
/ 24 января 2009

Ответ ДА ​​- PowerShell может использовать сборки .NET. В v1 есть несколько забавных дел, если вам нужно подключить делегатов, а v2 делает это намного чище.

Просто вызовите LoadFile / LoadAssembly, чтобы получить соответствующие библиотеки в памяти, и все готово

[Reflection.Assembly]::LoadFile('/path/to/sharpzip.dll')
$zip = new-object ICSharpCode.SharpZipLib.Zip.FastZip
$zip.CreateZip('C:\Sample.zip', 'C:\BuildFiles\', 'true', '^au')
# note - I didn't actually test this code 
# I don't have SharpZip downloaded - just read their reference.

Также обратите внимание, что Расширения сообщества PowerShell поддерживают различные методы сжатия, такие как write-zip.

1 голос
/ 25 января 2009

С одной стороны, если это работает, просто оставьте это. Но, похоже, это то, к чему вы будете добавлять со временем, и, конечно, ваш потенциальный преемник / коллега, которому необходимо отредактировать пакетный файл, также должен будет это понять. Если вы являетесь опытным программистом, то вы можете обнаружить, что мощь Powershell делает ваш сценарий намного короче и его легче читать / поддерживать (например, даже просто с полными операторами if и циклами for / while). С другой стороны, если вы не слишком знакомы с программированием, многие люди считают Powershell немного пугающим на первый взгляд.

Что касается части .NET, Powershell построен поверх .NET, так что да, вы можете получить доступ к сборкам .NET (но вы всегда должны видеть, доступен ли сначала командлет).

Я бы порекомендовал книгу под названием "Поваренная книга с пауэрлифтом" Ли Холмса, изданную О'Рейли. Он предоставляет «рецепты», которые вы можете использовать для общих задач; это, вероятно, ускорит ваше время для реализации сценария и научит вас Powershell на этом пути.

1 голос
/ 24 января 2009

Я не уверен насчет powershell, но могу ли я порекомендовать использовать что-то вроде IronPython (если вы хотите иметь доступ к библиотекам .NET) или обычный python? Вы получаете полноценный язык программирования с очень небольшими ограничениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...