Я спорю, стоит ли мне изучать PowerShell или просто придерживаться сценариев Cygwin / Perl / сценариев оболочки Unix и т. Д.
Преимущество PowerShell состоит в том, что сценарии могут быть более легко использованы партнерами по команде, у которых нет Cygwin; однако, я не знаю, действительно ли я написал бы так много сценариев общего назначения, или люди даже использовали бы их.
Сценарии Unix настолько мощны, достаточно ли подходит PowerShell для переключения?
Вот некоторые конкретные вещи (или эквиваленты), которые я бы искал в PowerShell:
unix
shell
powershell
Энди Уайт
источник
источник
Ответы:
Инструменты - это просто инструменты.
Они помогают или нет.
Вам нужна помощь или нет.
Если вы знаете, что Unix и эти инструменты делают то, что вам нужно, чтобы они делали в Windows - тогда вы счастливый парень, и вам не нужно изучать PowerShell (если вы не хотите изучать).
Мое первоначальное намерение состояло в том, чтобы включить набор инструментов Unix в Windows и покончить с этим (многие из нас в команде имеют глубокие знания Unix и здоровую дозу уважения к этому сообществу).
Я обнаружил, что это не очень помогает. Причина в том, что AWK / grep / sed не работают с COM , WMI , ADSI , реестром, хранилищем сертификатов и т. Д. И т. Д.
Другими словами, UNIX - это целая экосистема, настроенная вокруг текстовых файлов. Таким образом, инструменты обработки текста являются эффективными инструментами управления. Windows - это совершенно другая экосистема, настроенная вокруг API и объектов. Вот почему мы изобрели PowerShell.
Я думаю, вы обнаружите, что будет много случаев, когда обработка текста не даст вам того, что вы хотите в Windows. В этот момент вам захочется подобрать PowerShell. ПРИМЕЧАНИЕ - это не все или ничего. В PowerShell вы можете обращаться к своим инструментам Unix (и использовать их текстовую обработку или обработку текста PowerShell). Также вы можете вызвать PowerShell из ваших инструментов Unix и получить текст.
Опять же - здесь нет религии - наша цель - дать вам инструменты, необходимые для достижения успеха. Вот почему мы так увлечены обратной связью. Дайте нам знать, где мы находимся на работе или у вас нет необходимого вам инструмента, и мы внесем его в список и доберемся до него.
Честно говоря, мы выкапываем себя из 30-летней ямы, так что это займет некоторое время. Тем не менее, если вы выберете бета-версию Windows Server 2008 / R2 и / или бета-версии наших серверных продуктов, я думаю, вы будете шокированы тем, как быстро эта дыра заполняется.
Что касается использования - у нас было> 3,5 миллиона загрузок на сегодняшний день. Сюда не входят люди, использующие его в Windows Server 2008, поскольку он включен в качестве дополнительного компонента и не требует загрузки.
V2 будет поставляться во всех версиях Windows. Он будет включен по умолчанию для всех выпусков, кроме ядра сервера, где он является необязательным компонентом. Вскоре после выхода Windows 7 / Windows Server 2008 R2 мы сделаем V2 доступным на всех платформах, Windows XP и выше. Другими словами - ваши инвестиции в обучение будут применимы к очень большому количеству машин / сред.
Последний комментарий Если / когда вы начнете изучать PowerShell, я думаю, вы будете очень счастливы. На дизайн в значительной степени влияют наши фоны Unix, так что, хотя мы сильно отличаемся от других, вы очень быстро его поймете (после того, как переспросите, что это не Unix :-)).
Мы знаем, что у людей очень ограниченный бюджет на обучение - вот почему мы очень ценим последовательность. Вы будете чему-то учиться, а потом будете использовать это снова и снова.
Эксперимент! Наслаждайтесь! Engage!
источник
tar -c . | gzip > package.tar.gz
непосредственно в PowerShell, или вы будете страдать. См brianreiter.org/2010/01/29/...Select-String
Командлет и-match
оператор работают с регулярными выражениями. Также вы можете напрямую использовать поддержку регулярных выражений .NET для более продвинутых функций.Sort-Object
более мощный (чем я помню * nix'ssort
). Разрешение многоуровневой сортировки по произвольным выражениям. Здесь помогает поддержка базового типа PowerShell; например,DateTime
свойство будет отсортировано какDateTime
без необходимости форматирования в сортируемый формат.Select-Object -Unique
С точки зрения широты Perl библиотек поддержки доменов: нигде не близко (пока).
Для общего программирования PowerShell, безусловно, более согласованный и последовательный, и его легче расширять. Единственный пробел в обработке текста - это что-то эквивалентное
..
оператору Perl .Это было достаточно долго с момента использования AWK (должно быть> 18 лет, так как позже я просто использовал Perl), поэтому не могу комментировать.
[См выше]
Сила PowerShell здесь не столько в том, что он может делать с объектами файловой системы (и он получает полную информацию здесь,
dir
возвращаетFileInfo
или,FolderInfo
в зависимости от обстоятельств, объекты), в том, что это целая модель провайдера.Реестр, хранилище сертификатов, SQL Server, кэш RSS в Internet Explorer и т. Д. Можно рассматривать как пространство объектов, которое можно перемещать с помощью тех же командлетов, что и файловая система.
PowerShell - это, безусловно, путь вперед в Windows. Microsoft сделала это частью своих требований к будущим не домашним продуктам. Отсюда богатая поддержка в Exchange, поддержка в SQL Server. Это только собирается расширяться.
Недавний пример этого - TFS PowerToys. Многие операции клиента TFS выполняются без необходимости каждый раз запускать tf.exe (для чего требуется новое подключение к серверу TFS и т. Д.), Что значительно облегчает дальнейшую обработку данных. Помимо предоставления широкого доступа ко всему клиентскому API TFS с большей детализацией, чем в любом из Team Explorer файла TF.exe.
источник
sed 's/pattern/replacement/' file
, что примерноgc file | %{$_ -replace 'pattern','replacement'}
, а так же для AWK:awk 'BEGIN {} /pat1/ {action1} /pat2/ {action2} END {}' file
примерно{BEGIN {}; switch -r -c -file file { 'pat1' {action1} 'pat2' {action2}}; END{};}
Как человек, чья карьера была сосредоточена на корпоративной разработке Windows с 1997 по 2010 год, очевидным ответом будет PowerShell по всем веским причинам, указанным ранее (например, это часть корпоративной стратегии Microsoft; она хорошо интегрируется с Windows / COM / .NET; и использование объектов вместо файлов обеспечивает «более богатую» модель кодирования). По этой причине я использовал и продвигал PowerShell последние два года или около того, с явным убеждением, что я следовал «Слову Билла».
Однако, как прагматик, я больше не уверен, что PowerShell - отличный ответ. Несмотря на то, что это отличный инструмент для Windows, он обеспечивает столь необходимый шаг на пути к заполнению исторической дыры, которой является командная строка Window, поскольку мы все наблюдаем за тем, как Microsoft контролирует потребительские компьютерные ошибки, все более вероятно, что у Microsoft впереди огромная борьба за сохранение своей ОС в качестве важно для предприятия будущего.
Действительно, учитывая, что моя работа все чаще находится в разнородных средах, я считаю, что сейчас гораздо удобнее использовать сценарии Bash, поскольку они работают не только в Linux, Solaris и Mac OS X, но и в сочетании с помощь Cygwin - на Windows.
Так что, если вы поверите в то, что будущее ОС скорее коммерциализировано, чем монополизировано, то, по-видимому, имеет смысл выбрать стратегию гибких инструментов разработки, которая по возможности обходится без проприетарных инструментов. Однако, если вы видите, что в вашем будущем доминирует все, что есть - Редмонд, тогда переходите на PowerShell.
источник
Я использовал немного PowerShell для автоматизации скриптов. Хотя очень приятно, что среда, кажется, была продумана гораздо больше, чем оболочки Unix, на практике использование объектов вместо текстовых потоков намного сложнее, и многие средства Unix были разработаны в последние 30 лет. годы все еще отсутствуют.
Cygwin по-прежнему остается моей средой создания сценариев для хостов Windows. Это, безусловно, превосходит альтернативы с точки зрения достижения цели.
источник
Здесь есть много отличных ответов, и вот мое мнение. PowerShell готов, если вы ... Примеры:
grep = " Выбрать-String -Pattern "
sort = "Sort-Object"
uniq = " Get-Unique "
file = " Get-Item "
cat = " Get-Content "
Perl / AWK / Sed - это не команды, а утилиты, поэтому их трудно сравнивать, но в PowerShell можно делать практически все.
источник
sls
,sort
,gu
,gi
,gc
, соответственно. Длинные удобочитаемые имена, которые могут содержать табуляцию, и короткие имена с возможностью ввода в одной системе. Это удобный для вас прогресс.Get-Content
этоcat
, так, что одна не существует какая -то разница между Cygwin / Unix и PowerShell. К сожалению, в большинстве случаев в документации Microsoft по командлетам отсутствует информация об псевдонимах, но список всех псевдонимов выводится при использованииGet-Alias
в сеансе PowerShell. Псевдоним «Get-Unique» - «gu», поэтому он короче, чем у Cygwin / Unix!Я только недавно начал заниматься PowerShell с любой серьезностью. Хотя в течение последних семи лет я работал почти исключительно в среде Windows, я прихожу из среды Unix и постоянно пытаюсь «поработать над Unix» своим опытом взаимодействия с Windows. Это расстраивает, если не сказать больше.
Справедливо сравнивать PowerShell с чем-то вроде Bash , tcsh или zsh, поскольку такие утилиты, как grep , sed , awk , find и т. Д., Строго говоря, не являются частью оболочки; однако они всегда будут частью любой среды Unix. Тем не менее, команда PowerShell, такая как Select-String, имеет функцию, очень похожую на grep, и входит в состав основного модуля PowerShell ... поэтому линии могут быть немного размытыми.
Я думаю, что ключевым моментом является культура и тот факт, что соответствующие наборы инструментов будут воплощать их соответствующие культуры:
Интерфейс администрирования Unix (и, в течение многих лет, разработки) традиционно был командной строкой и виртуальным терминалом. Windows начиналась как графический интерфейс, а административные функции только недавно начали отходить от использования исключительно графического интерфейса. Мы можем ожидать, что опыт работы с Unix в командной строке будет более богатым, более зрелым, учитывая его значительный отрыв в PowerShell, и мой опыт соответствует этому. На этом, по моему опыту:
Административный опыт Unix направлен на то, чтобы упростить процесс за минимальное количество нажатий клавиш; Вероятно, это связано с исторической ситуацией, когда пришлось администрировать сервер по медленному коммутируемому соединению со скоростью 9600 бод. Теперь в PowerShell есть псевдонимы, которые в значительной степени способствуют обходу довольно многословного стандарта Verb-Noun , но знакомство с этими псевдонимами немного затруднительно (любой знает что-то лучше, чем
alias | where {$_.ResolvedCommandName -eq "<command>"}
:?).Пример богатого способа манипулирования историей:
iptables
Команды часто бывают многословными, и повторять их с небольшими различиями было бы болезненно, если бы не одна из многих полезных функций манипулирования историей, встроенных в Bash , поэтому вставьте правило iptables, например, следующее:iptables -I camera-1-internet -s 192.168.0.50 -m state --state NEW -j ACCEPT
второй раз для другой камеры ("
camera-2
"), это просто случай выдачи:!!:s/-1-/-2-/:s/50/51
что означает «выполнить предыдущую команду, но заменить
-1-
на-2-
и50
с51
.Опыт Unix оптимизирован для сенсорных машинисток; можно сделать все, не выходя из «домашнего» положения. Например, в Bash , используя Emacs клавиш (да, Bash также поддерживает VI привязок), езда на велосипеде по истории осуществляется с использованием Ctrl-Pи во Ctrl-Nвремя переезда в начале и в конце строки осуществляется с помощью Ctrl-Aи Ctrl-Eсоответственно ... и это , безусловно , не заканчивается там Попробуйте даже самую простую навигацию в консоли PowerShell, не переходя из исходного положения, и у вас возникнут проблемы.
Культура Windows, по крайней мере с точки зрения системных API, в значительной степени определяется вспомогательными средами, а именно COM и .NET , обе из которых являются высоко структурированными и основанными на объектах. С другой стороны, доступ к API Unix традиционно осуществлялся через файловый интерфейс (
/dev
и/proc
) или (не объектно-ориентированные) вызовы библиотеки в стиле C. Неудивительно, что сценарии соответствуют их парадигмам ОС. PowerShell по своей природе структурирован (все является объектом) и основан на файлах Bash - and -friends. Структурированный API, который находится в распоряжении программиста PowerShell, огромен (по сути, соответствует обширному существующему набору стандартных интерфейсов COM и .NET).Короче говоря, хотя возможности сценариев PowerShell, возможно, более мощные, чем Bash (особенно если учесть доступность .NET BCL ), интерактивный интерфейс значительно слабее, особенно если вы работаете с полностью управляемой клавиатурой консольная перспектива (как и многие Unix-главы).
источник
alias -Definition *property
(или любой другой шаблон)? Я думаю, что проблема с вашим ответом состоит в том, что вы объединяете оболочку и консоль: помните, что у вас есть выбор консолей с различными вариантами редактирования. Они намеренно оставили редактирование консоли DOS неработающим, чтобы побудить людей использовать другие консоли, такие как ISE.!!
пример может быть написан на Powershell,(h -c 1) -replace '-1-','-2-' -replace '50','51' | iex
но стрелку вверх и редактирование проще выполнить одной командой. Если вы хотите сделать это с помощью множества команд, думаю, Powershell победит. Чтобы повторить 10 команд, заканчивающихся на команде # 255, с вашими правками:(h -c 10 -id 255) -replace '-1-','-2-' -replace '50','51' | iex
также история Powershell позволяет вам делать что-то неслыханное в оболочках Linux; если вы задаетесь вопросом ретроспективно, сколько времени потребовалось команде для запуска:h -id 20 | select { $_.EndExecutionTime - $_.StartExecutionTime }
fc -e "sed -i -e 's/-1-/-2-/g' -e 's/50/51/g'" 10 255
Я ни в коем случае не очень опытный пользователь PowerShell, но мало того, что мне показалось, произвело на меня большое впечатление. Вы можете связать встроенные командлеты вместе, чтобы делать практически все, что вы могли бы делать в приглашении Unix, и есть некоторые дополнительные преимущества для таких вещей, как экспорт в CSV, таблицы HTML и для более глубоких типов системного администрирования. ,
И если вам действительно нужно что-то вроде sed , всегда есть UnixUtils или GnuWin32 , которые вы можете довольно легко интегрировать с PowerShell.
Как давний пользователь Unix, у меня, однако, были некоторые проблемы с привыканием к схеме именования команд, и я, безусловно, получил бы больше пользы от нее, если бы знал больше .NET.
Итак, по сути, я говорю, что стоит изучить его, если только его наличие в Windows не представляет проблемы.
источник
Если вам нравится сценарий оболочки, вам понравится PowerShell!
Начните с экскурсии по командной оболочке Microsoft (Ars Technica).
источник
'
(одинарные кавычки). Для двойных двойных кавычек - то же самое, используйтеwrite-output 'this is a "test"'
. Вопрос, на который вы указываете, касается Regex, а экранирование для Regex действует везде. Powershell также имеет Here-Strings / дословные строки. Даже у Java этого нет! Попробуйте избежать регулярных выражений в Java. И вы иногда не используете буквальный путь. Вы используете, когда вам нужно. LiteralPath обрабатывает символы подстановки дословно и не раскрывает их. Вы используете это, когда ваши файлы имеют это. Это дает вам больше возможностей.write-output "this is a `"test`""
работает. Просто используйте`
вместо `\`. regex :: escape существует, чтобы помочь вам, чтобы вы не пропустили побег. Не нужно его использовать. Вы думаете, что дополнительные опции, которые могут помочь вам и предотвратить ошибки, являются несоответствиями.Поскольку мои недавние эксперименты привели меня к глубине вызовов PowerShell и .NET, я должен сказать, что PowerShell может заменить оболочку Cygwin и Unix.
Я не уверен насчет Perl, но так как PowerShell и Perl являются Turing завершенными как языки программирования, я даю это как замену Perl.
Одна вещь, которую PowerShell имеет над Cygwin и обычным Bash под * nix, - это ее способность выполнять изолированные вызовы DLL, манипулировать операционной системой через прямые вызовы API, методы WMI и даже COM-объекты. Как насчет запуска Internet Explorer через код, а затем делать все, что вы хотите с отображаемым документом, эффективно эмулируя серверную часть для веб-сервера?
Как насчет сбора данных с серверов SQL и других поставщиков данных, их анализа и экспорта в формате CSV, почтовых сообщений, текста и фактически любых существующих и несуществующих форматов файлов? (Конечно, при наличии соответствующих навыков создания действительного файла из полученных данных, но CSV легко доступны).
Кроме того, существует дополнительная защита, доступная через подписанные командлеты и сценарии, групповые политики и политики выполнения, которые помогают предотвратить запуск вредоносного кода в вашей системе, даже если вы запускаете их как администратор.
О том, какие команды реализованы - в ответе Ричарда перечислены их и возможности PowerShell эмулировать их функциональность.
О том, способен ли PowerShell гарантировать переключение, - это вопрос личных предпочтений, хотя все больше и больше служб Windows предоставляют командлеты PowerShell для управления ими, а не использование PowerShell с этими службами считается помехой. (Сервер Hyper-V является основной такой службой, и он также дает возможность делать больше с помощью командлетов PowerShell, чем с графическим интерфейсом!)
Вероятно, этот ответ опоздал на пять лет, но, тем не менее, если кто-то выполняет административные задачи или общие сценарии различных вещей в Windows, он должен обязательно использовать PowerShell для своих целей.
источник
Когда вы сравниваете PowerShell с комбинацией Cygwin / Perl / Shell, имейте в виду, что PowerShell представляет только часть «Shell» этой комбинации.
Однако вы можете вызвать любую команду из PowerShell так же, как вы делаете это из cmd.exe или Cygwin. Он не реализует указанные функции и, конечно, не сопоставим с Perl.
Это «просто» оболочка, но она облегчает программирование, предоставляя удобный интерфейс ко вселенной .NET.
Также имейте в виду, что для PowerShell требуется Windows XP, Windows Server 2003 или выше, что может вызвать проблемы в зависимости от вашей ИТ-инфраструктуры.
Обновить:
Я понятия не имел, какие философские дебаты вызовет мой ответ.
Я опубликовал свой ответ в контексте вопроса: сравните PowerShell с Cygwin, Perl и Bash.
PowerShell - это оболочка, так как она не имеет синтаксической разницы между встроенными командами, командлетами, пользовательскими функциями и внешними командами (.exe, .bat, .cmd). Различаются только вызывающие методы .NET, добавляя пространство имен или объект в вызове.
Его программируемость проистекает из среды .NET, а не из чего-то определенного для «языка» PowerShell.
Я бы сказал, что считаю PowerShell «языком сценариев», как только Bugzilla или MediaWiki будут реализованы в виде сценариев PowerShell, работающих на веб-сервере;)
До тех пор наслаждайтесь сравнениями .
источник
Командлеты в PowerShell очень хороши и работают надежно. Их объектно-ориентированная ориентация мне очень нравится, так как я являюсь разработчиком на Java / C #, но это совсем не полный набор. Поскольку он объектно-ориентированный, он пропускает большую часть зрелости текстового потока набора инструментов POSIX (
awk
иsed
многие другие).Лучший ответ, который я нашел на дилемму: любить ОО-технологии и любить зрелость инструментов POSIX - это использовать оба! Одним из важных аспектов PowerShell является то, что он отлично справляется с передачей объектов в стандартные потоки. PowerShell по умолчанию использует объектный конвейер для перемещения своих объектов. Это не стандартные потоки (стандартный выход, стандартная ошибка и стандартный вход). Когда PowerShell необходимо передать вывод стандартному процессу, у которого нет конвейера объектов, он сначала преобразует объекты в текстовый поток. PowerShell отлично справляется с этой задачей, поэтому он является отличным местом для размещения инструментов POSIX!
Лучший набор инструментов POSIX - GnuWin32 . Установка занимает более 5 секунд, но она того стоит, и, насколько я могу судить, она не изменяет вашу систему (реестр,
c:\windows\*
папки и т. Д.), За исключением копирования файлов в указанные вами каталоги. Это очень приятно, потому что если вы поместите инструменты в общий каталог, многие люди смогут получить к ним доступ одновременно.Инструкция по установке GnuWin32
Скачать и запустить ех (это с сайта SourceForge ) , указывая его в нужный каталог (я буду использовать
C:\bin
).GetGnuWin32
Там будет создан каталог, в котором вы будете работатьdownload.bat
, затемinstall.bat
(без параметров), после чего будетC:\bin\GetGnuWin32\gnuwin32\bin
каталог, который является самой полезной папкой, которая когда-либо существовала на компьютере с Windows. Добавьте этот каталог к своему пути, и вы готовы к работе.источник
TL; DR - я не ненавижу Windows или PowerShell. Я просто не могу ничего сделать в Windows или PowerShell.
Лично я все еще нахожу PowerShell в лучшем случае не в восторге.
~/
некоторых@environment://somejibberish/%user_home%
NTFS все еще в беспорядке и, похоже, всегда будет. Удачи в навигации.
Интерфейс cmd-esque. Динозавр cmd.exe по-прежнему отображается в PowerShell. Правка → Отметить - единственный способ копировать информацию и копировать только в виде прямоугольных блоков видимого пространства терминала. и Edit → Mark по- прежнему единственный способ вставить строки в терминал.
Окраска в синий цвет не делает его более привлекательным. Я не против того, чтобы разработчики Microsoft имели вкус цвета.
Окна всегда открываются в левом верхнем углу экрана. Для тех, кто использует вертикальные панели задач, это невероятно раздражает, особенно если учесть, что панель задач Windows будет покрывать единственный угол окна, который дает доступ к функциям копирования / вставки.
Я не могу много говорить о средствах, которые включает в себя Windows. Поскольку существует целый набор инструментов CLI с открытым исходным кодом, свободно лицензируемых, и PowerShell поставляется, насколько мне известно, ни один из них не является полным разочарованием.
wget
принимает, казалось бы, несопоставимые аргументы в GNU wget. Спасибо, проблеск надежды переносимо-бесполезный.&&
оператор не обрабатывается, что делает простейшую условную команду, не выполняющую ничего.Я не знаю человека; Я сделал это, я действительно сделал; Я все еще пытаюсь сделать это в надежде, что в следующий раз, когда я открою его, это будет менее бесполезно. Я ничего не могу сделать в PowerShell, и я едва могу что-то сделать с реальным проектом по внедрению инструментов GNU в Windows.
MySysGit дает мне приглашение dinosaur cmd.exe с несколькими инструментами GNU, и это все еще очень не радует, но в конце концов завершение пути работает. И команда Git будет работать в Git Bash.
Mintty for MySysGit предоставляет интерфейс Cygwin для среды mysysgit, позволяя копировать и вставлять объекты (выберите для копирования (мышь), Shift+ Insдля вставки, насколько современный ...). Тем не менее, такие вещи, как
git push
сломаны в Mintty.Я не хочу ругать, но я все еще вижу огромные проблемы с удобством использования командной строки в Windows даже с такими инструментами, как Cygwin.
PS: то, что в PowerShell можно что-то сделать, не делает его пригодным для использования . Юзабилити глубже, чем способности, и на чем я стараюсь использовать продукт в качестве потребителя.
источник
.
или[
получить доступ к свойству или индексу, поэтому он не может просто добавить разделитель пути в конце. Какой именно PowerShell wget? Какой PowerShell POSIX? Он не пытается перенести инструменты gnu в Windows или быть совместимым с bash.(get-command wg*.exe).Path
. Re: завершение bash и чтение строки -> leeholmes.com/blog/2012/09/13/… ведущий к github.com/lzybkr/PSReadLineЯ не видел, чтобы PowerShell действительно взлетела, по крайней мере, пока. Так что, возможно, не стоит учить его, если другие члены вашей команды уже не знают об этом.
Для вашего затруднительного положения вам может быть лучше использовать язык сценариев, за которым могут отставать другие, Perl, как вы упомянули, или другие, такие как Ruby или Python.
Я думаю, что многое зависит от того, что вам нужно сделать. Лично я использую Python для своих собственных сценариев, но когда я начинаю писать что-то, что я никогда не смогу передать, я знаю, поэтому стараюсь не делать ничего слишком революционного.
источник
Почему бы не использовать оба? Вызывайте скрипты PowerShell в Cygwin, как и любые другие интерпретируемые скрипты, такие как Perl и т. Д.
Я сделал это достаточно, чтобы написать https://bitbucket.org/jbianchi/powershell для оболочки Bash, чтобы он вызывал powershell.exe в Cygwin. Его можно использовать как шебанг в качестве первой строки скрипта powershell.exe .ps1 (поскольку PowerShell также использует «#» в качестве комментария). См. Https://bitbucket.org/jbianchi/powershell/wiki/Home для примеров
источник
В двух строках Cygwin и PowerShell - это разные инструменты, однако, если у вас установлен Cygwin, вы можете запускать исполняемые файлы Cygwin в сеансе PowerShell. Я так привык к PowerShell, что теперь я больше не использую grep, sort, awk и т. Д. В PowerShell есть довольно много встроенных альтернатив, и если нет, то вы можете найти там командлет.
Основным инструментом, который я использую, является ssh.exe, но в рамках сеанса PowerShell.
Это прекрасно работает.
источник
Я обнаружил, что программирование PowerShell не стоит усилий.
У меня есть несколько лет опыта работы со сценариями оболочки под Unix, но я обнаружил, что с PowerShell чрезвычайно сложно что-либо делать.
Кажется, что многие функции требуют от вас опроса интерфейса управления Windows и выполнения SQL-подобных команд для получения необходимой информации.
Например, я хотел написать скрипт для удаления всех файлов с определенным суффиксом из дерева каталогов. Под Unix это было бы просто ...
После нескольких часов перебора
Scripting.FileSystemObject
иWScript.Shell
выдачи "SELECT * FROM Win32_ShortcutFile WHERE Drive = '" & drive & "' AND Path = '" & searchFolder & "'", я, наконец, сдался и согласился на команду поиска в Windows Explorer и просто сделай это вручную. Вероятно, есть какой-то способ сделать то, что я хотел, но я не видел ничего очевидного, и все примеры на сайте MSDN были настолько тривиальными, что были бесполезными.РЕДАКТИРОВАТЬ Хех, конечно, как только я написал это, я обыскал еще немного и обнаружил, что мне не хватало:
-recurse
опция команды remove-item неверна (открывается, если вы используетеget-help remove-item -detailed
).Я пытался "удалить-элемент -filter '* .xyz' -recurse", и он не работал, поэтому я отказался от него.
Оказывается, вам нужно использовать
get-childitem -filter '*.xyz' -recurse | remove-item
источник
Вы также можете попробовать запустить сценарии Bash в Windows с помощью BashWin по адресу https://github.com/skanga/BashWin .
источник
PowerShell очень мощный, более мощный, чем стандартные встроенные оболочки Unix (но только потому, что он включает в себя большую часть функциональности, обычно выделяемой подпрограммам). Также учтите, что вы можете писать апплеты на любом языке .NET, включая IronPython , IronRuby , PerlNet и т. Д., Или вы можете просто вызывать ваши команды Cygwin из PowerShell, игнорируя все дополнительные функции, и это будет работать аналогично Bash, KornShell , или что угодно ...
источник