alexii пишет:Был не прав. Неверно интерпретировал работу оператора «-like». Вопрос, а почему не «-eq» там было, почему именно «-like»?
В данном случае уместнее -eq, -like "утащил" из кода над которым работаю сейчас.
Согласно документации без использования знаков подстанови ("*","?", "[", "]" и т.п.) полностью аналогичен -eq (но не -ceq - Case sensitive EQ). Точнее, что-то среднее между -Match и -Eq
.
Превосходно! Намного нагляднее. Глядишь, так и научусь. Когда-нибудь
.
Это явно перебор
, там лишь пара исправлений.
Вообще, если размышлять о "красивости", необходимо каким-то образом избавиься от конструкции (но таким образом теряем совместимость с v2):
...
Where-Object {!$_.PSIsContainer} |
...
и двойного сравнения через -and (ума не приложу как, и сам хочу понять, как сравнить строку с массивом строк - может быть поменять их местами?), а в идеале и от Get-ChildItem -Recurse - т.к. "знающие люди" говорят про низкую скорость работы (требует проверки - насколько? во сколько раз?).
Не догадался до более изящного решения, приведённого Вами. Что нашёл из связки PowerShell'а и .Net, то и пробовал. А нагляднее — потому как на мой взгляд сравнение дат даёт большую наглядность, нежели сравнение строк.
Использование "inline dotNet" - это, конечно, фича, но не вижу смысла использовать её везде, где только можно. Логично предположить - там где "стандартное" решение невозможно и нет альтернатив, или стандартное решение и/или альтернативы "убоги" для данной задачи.
Зачем сравнивать по дням и мучаться с вычислением дней в месяце когда в условии чёткая формулировка "за 1 конкретный месяц" (операционки нынче умные и создать файл с датой 30.02.2013 попросту не смогут)?
В данном направлении есть интересная заметка у Vadims Pod?ns:
Алиасы, here strings и несколько практических советов при работе с текстом
Семантика языка PowerShell подразумевает использование унифицированного синтаксиса, где название каждой команды явно говорит о том, что она делает. Например, Get-Process. Совершенно очевидно, что эта команда должна делать. Но, порой, эти команды бывают очень длинными и набирать их постоянно в консоли бывает не очень удобно. Например, самый топовый — Get-ChildItem. Это даже не самая длинная команда, просто наиболее часто используемая. Или Foreach-Object. Даже автозавершение команд не всегда спасает ситуацию. Для этого были придуманы алиасы (короткие ссылки на команды), которые очень выгодно использовать в консоли. Так же у команд есть и очень длинные параметры. Например, всякие –InputObject, –Include, –ErrorAction и т.д. PowerShell позволяет сокращать параметры первыми буквами до тех пор, пока эти буквы не будут явно указывать на конкретное название. Например, у команды Get-ChildItem параметр –Include может быть сокращён до –I, а –Exclude до –Ex. Но многие скриптописатели пишут скрипты (и выкладывают их даже где-то) с использованием этих самых алиасов и коротких обозначений параметров.
Хорошо это или плохо? Ответ очевидный — за такое надо бить больно сапогами и по лицу. Использование алиасов приводит нас обратно к одной из проблем оболочки cmd — сразу не скажешь, что делает та или иная команда. Пользователь без соответствующей подготовки вряд ли сходу скажет, что делает команда regsvr32 или что делает ключ /i этой команды. Или вот 2 примера:
gps iex* | spps -f
ls .\ -r -fo | %{cp $_.fullname -des e:\ -ea 0}
Вы можете такое использовать в консоли, но не в скриптах. В скриптах эти две строчки должны выглядить только вот так:
Get-Process iex* | Stop-Process -Force
Get-ChildItem .\ -Recurse -Force | ForEach-Object {Copy-Item $_.fullname -Destination e:\ -ErrorAction SilentlyContinue}
вот такое написание значительно повышает читабельность кода и можно понять его работу даже без выполнения, а просто на стадии чтения и, если они есть, обнаружить какие-то ошибки. Да и вы сами со временем можете забыть, что это был за алиас и на что он ссылается. Уважайте себя и других.
Пользователи PowerGUI Script Editor могут воспользовться адд-оном, написанным одним пошикмвп Шейем Леви (Shay Levy) — Expand Alias, который автоматически разворачивает алиасы в их полное значение.
Также многие моменты/вещи можно "утянуть"/"подсмотреть" в блоге, например PS_FCIV, который, правда, требует допила, для того чтобы быть внешне совместимым с оригинальным fciv.exe (есть проблемы вида - "не умею обрабатывать одиночный файл, к примеру - вычислить его MD5" и "вырвиглазый вывод на консоль").
У меня любые скрипты будут похожи на VBScript
. Да и вообще — от обилия начинаешь иной раз теряться: однажды долго и упорно искал, почему не работает некая конструкция — оказалось, что мне привиделось это из другого языка.
Чтож, от этого не убежишь, "все люди ошибаются, т.к. людям свойственно ошибаться". И всё требует знаний, умений и практики.
Быть "универсалом" страшная вешь - несмотря на горы знаний, "большим" специалистом всё равно не стать, посему лучше избрать свою, довольно узкую стезю и работать в её пределах, отвлекаясь лишь на поверхностное изучение как смежных, так и далёких областей. 
К примеру, у меня стойкая антипатия к *Basic*, потому что "он, по обыкновению, нигде, никому не нужен" (личная "фобия"
, хотя как язык для обучения, наверное, один из самых лучших).
«Их у нас был»
...
Завести, конечно, можно, но пока не будет массового перехода корпоративных клиентов на Windows 7 (с будущего года, полагаю), рассчитывать на увеличение активности не стоит.
...
Нет проблем, "... нет ребята, я не гордый, я согласен на медаль ...". 
Качество и т.н. "нужность/необходимость" кода в коллекци просто отвратное, но не будем об этом.