Comments 20
.Net != C#
Как и JVM != Java
Данный же инструмент отлично решает множество проблем. Сильно проще и быстрее в разработке и поддержке чем многие скриптовые языки.
Плюс, лично я, предпочитаю получить список объектов через Get-ChildItem, а потом уже делать то что мне нужно передавая их по конвееру: отсортировать, отфильтровать, а затем у же перемещать, копировать, изменять или удалять. В данном случае сформировать перечень объектов и применить действие.
Это логичнее и проще при нарезании типовых задач. В вашем примере еще и нужно следить в каком каталоге оно выполняется. Выполнить скрипт посреди дефолтного C:\WINDOWS\system32 было бы печалькой.
зы
ошибку воспроизвести не смог на $host.Version 5.1.19041.1
Operators — <> уже заняты под редирект, выкрутились так
Escape Character — ` потому что \ в винде уже занято под разделитель файловых путей, а шелл предназначен во многом для работы с файлами
If Requires Curly Brackets — не знаю почему. Могу только добавить, что часто есть coding convention чтобы фигурные скобки ставили всегда, для читабельности.
Function Definitions — это достаточно часто в скриптовых языках потому, что определение функции это фактически команда добавить функцию в скоуп. Это можно сделать другой командой:
new-item -Name hello -Value { "Hello" }
Function Calls — думаю, так сделано чтобы легко определять свои команды и работать в привычном синтаксисе без лишних символов.
Script Syntax Check — автор текста, судя по всему, не знает, что такое поверка синтаксиса — он написал синтаксически правильный код.
Lack of Mandatory Variable Declarations — тут я согласен, неплохо бы включать строгий режим который этого не допускает.
Scope of Variables — это, наверное, средство предыдущего пункта. Если есть наследование областей видимости, то как отличать доступ к переменной из глобальной области к доступу из локальной с таким же именем — вот и решили, что если есть локальное присваивание это определение новой переменной. Никакого копирования, кстати, не происходит, это совершенно новая переменная. В питоне поступили по другому — для доступа к шлобальному контексту — ключевое слово global, но в функции контекст наследутся но изменять просто нельзя.
Словом, человек с опытом больших статических языков программирования применяет свои привычки к шеллу.
У нас уже есть VBScript, JScript.
Они не шеллы. Шелл был cmd. И синтаксис похож на него.
Ещё причины нужны?
Языки программирования не очень удобны при работе из терминала. Всё же задачи совсем разные. Другое дело, что в пш с ключами команд несколько перемудрили — лучше бы больше ориентировались на конвеер.
Пайплайн довольно сильный у PS на самом деле. А учитывая, что можно писать свои команды, которые так же могут получать и разбирать вводные данные по пайплайну — так вообще красота.
Насчёт объектов — если активно использовать PS, то объекты — это очень полезная вещь, если знать "как их готовить".
Да, это не batch и не bash, тут немного другая философия, но это Win, что поделать, когда под капотом крутятся-вертятся WMI-объекты
Шелл — это весьма специфический скриптоый язык. Вероятно так сделали, чтобы было привычнее админам, которые работали с cmd, command.com, bash и т.д.
Можете для сравнения посмотреть, на попытку сделать шелл на основе питона — ipython — там, например, чтобы вызвать исполнимый файл надо писать! перед командой
-Include
Specifies, as a string array, an item or items that this cmdlet includes in the operation.
Пост ненависти к Могучему Шеллу