PowerShell 5.0 идет с Windows 10, но для предыдущих ОС новая версия вышла в составе Windows Management Framework 5.0 только в конце февраля, причем со второй попытки. Сегодня я расскажу о некоторых нововведениях, но начну с того, зачем вам может понадобиться PowerShell.
@0utsidethebox @vsterkin а зачем к нему приобщаться, в чем преимущества его использования? Вообще хотел бы статью о том на хрена он вообще
— RZ45 (@R45Z) August 13, 2015
Зачем вам нужен PowerShell
Просто так изучать PowerShell нет смысла, и это верно для любого языка – скриптового, программного и даже человеческого. Как и многие решения Microsoft, PowerShell делается с прицелом на бизнес для автоматизации задач по управлению ПК и серверами в организациях.
Ключевое слово здесь автоматизация. Если у вас некая рутинная задача, которую вы хотите автоматизировать, попробуйте выяснить, можно ли это сделать с PowerShell.
В основе скриптового языка лежит мощная программная платформа .NET, поэтому возможности PowerShell простираются намного дальше администрирования.
Как-то раз мне понадобилось удалить один столбец из множества книг Excel 2013. Ручная работа претила, а гугление не давало готового решения. Я создал тему на форуме (да, я тоже иногда задаю вопросы на OSZone :). Мне подходил любой язык, но решение неожиданно для меня оказалось на PowerShell. Как выяснилось, можно загрузить Excel в качестве COM-объекта и манипулировать им дальше.
Впоследствии я не раз использовал модификацию того скрипта для автоматического обновления десятков книг Excel, подтягивающих данные из других файлов. Это сэкономило мне массу времени и сил.
Думаю, идея понятна, и можно уже переходить к новинкам PowerShell 5.0.
[+] 8 полезных возможностей
Подсветка синтаксиса
В новой консоли намного легче ориентироваться!
Красный цвет и нумерация строк, однако, из другой оперы.
Поиск по истории в двух направлениях
Сочетания клавиш: Ctrl + R и Ctrl + S
Командлеты: Get-PSReadlineKeyHandler и Set-PSReadlineKeyHandler
Как и в CMD, в PowerShell есть история сессии с навигацией стрелками, a Get-History выводит журнал по аналогии с F7. Полный список сочетаний клавиш, связанных с журналом, можно вывести так:
Get-PSReadlineKeyHandler | ? {$_.function -like '*hist*'}
В результатах появились две новые функции поиска по истории, которые показаны на картинке ниже. Работает это очень просто.
- Нажмите сочетание Ctrl + R и начните вводить запрос → появится последний найденный результат.
Увеличить рисунок - Повторите сочетание Ctrl + R, чтобы увидеть предыдущее совпадение, или измените запрос.
В отличие от Get-History, содержащей историю текущей сессии, этот журнал ведется глобально и сохраняется при закрытии окна.
Спасибо за наводку Антону Дровосекову и Константину Сидякину из нашей группы ВК.
Создание соединений, символических и жестких ссылок
Командлеты: New-Item, Remove-Item, Get-ChildItem
У меня в блоге хватает рассказов про ссылки NTFS, поэтому я не мог обойти вниманием возможность их создания в PowerShell.
#Символическая ссылка на файл New-Item -ItemType SymbolicLink -Path C:\test\MySymLinkFile.txt -Target C:\test\1.txt #Символическая ссылка на папку New-Item -ItemType SymbolicLink -Path C:\test\MySymLinkFolder -Target C:\Windows\ #Жесткая ссылка на файл New-Item -ItemType HardLink -Path C:\Test\MyHardLinkFile.txt -Target C:\test\1.txt #Соединение New-Item -ItemType Junction -Path C:\Temp\MyJunctionDir -Target C:\Windows
Честно говоря, синтаксис команды mklink запомнить проще, поэтому быстрее может получиться так:
cmd /c mklink /d C:\test\MySymLinkFolder C:\Windows
Создание временного файла
Командлет: New-TemporaryFile
В скриптах нередко нужно создать временный файл, чтобы скинуть туда какую-то информацию. Новый командлет создан именно для этого.
#Создание временного файла New-TemporaryFile #Создание временного файла и получение его полного пути $tmpfile = (New-TemporaryFile).FullName $tmpfile
При создании CheckBootSpeed у меня была именно такая задача – записать собранные данные во временный файл, показать его в блокноте и удалить. Командлета не было, но Василий Гусев подсказал такой вариант:
$file = [System.IO.Path]::GetTempFileName()
Здесь обратный случай – командлет легче запомнить, чем класс .NET. В утилите я сейчас такой способ не использую, но на заметку взял.
Очистка корзины
Командлет: Clear-RecycleBin
Для очистки корзины сделали новый командлет, который пригодится администраторам в рутинных скриптах по обслуживанию ПК.
Clear-RecycleBin c: -Force
Создание и распаковка архивов
Командлеты: Compress-Archive и Expand-Archive
Архивация файлов в ZIP – очень распространенная задача, и я не понимаю, почему Microsoft так долго тянула с простой реализацией в PowerShell.
#Упаковка папки в архив Compress-Archive -LiteralPath C:\test\ -DestinationPath C:\archive\test2.zip #Создание архива со всем содержимым папки Compress-Archive -Path C:\test\* -DestinationPath C:\archive\test1.zip #Распаковка архива Expand-Archive -Path C:\temp\test1.zip 'C:\test\New folder\'
Копирование файлов между сессиями
Командлет: Copy-Item
Новая возможность командлета copy упрощает администраторам вполне типовую задачу копирования файлов на удаленный ПК. На целевой машине должна работать служба удаленного управления WinRM, которая конфигурируется одной командой:
Enable-PSRemoting
Для подключения к машине в доверенном домене больше ничего не требуется. В рабочей группе надо на своем ПК добавить целевой компьютер в доверенные узлы по имени ПК или IP-адресу:
#добавить ПК в доверенные узлы Set-Item wsman:localhost\client\trustedhosts -value "192.168.1.113" #убрать ПК из доверенных узлов #Set-Item wsman:localhost\client\trustedhosts -value ""
Дальше вы создаете новую сессию, указывая имя пользователя для подключения к удаленному ПК, и вводите учетные данные. В созданную сессию можно копировать файлы.
$rs = New-PSSession -ComputerName 192.168.1.113 -Credential test-pc\vadim Copy-Item -Path "C:\temp\my.csv" -Destination "C:\temp\" -ToSession $rs
Полезное дополнение к возможностям удаленного управления PowerShell, согласитесь.
Ссылки по теме PowerShell Remoting:
- Основы настройки и удаленного управления (Хабр)
- Выполнение удаленных команд (TechNet)
Управление пакетами (автоустановка программ)
Модуль: PackageManagement
В Windows 10 встроено управление поставщиками пакетов (оно же OneGet), с помощью которого вы можете загрузить и тихо установить сразу несколько приложений одной командой! Это похоже на Apt-Get в Linux, но можно провести и параллели с Ninite или InstallPack (кто-нибудь пользуется?)
Я редко делаю чистую установку основной системы, но на ВМ это происходит регулярно. И OneGet очень удобен для быстрой автоустановки ключевого набора программ.
Примечание. Можно использовать этот модуль, не устанавливая WMF 5.0. Предварительная версия модуля для PS 4.0 и 3.0 доступна отдельно — март 2016 тут, а более свежие ищите поиском в центре загрузки по запросу PackageManagement PowerShell Modules Preview.
Установка программ
В этом примере из репозитория Chocolatey устанавливаются четыре программы и полный набор утилит Sysinternals. Первые три команды выполняются однократно, причем смену политики надо подтвердить. Четвертая команда тихо устанавливает перечисленные программы, а пятая просто экономит время.
#Разрешить установку подписанных пакетов из Интернета Set-ExecutionPolicy RemoteSigned #Установить поставщик Chocolatey Get-PackageProvider –Name Chocolatey -ForceBootstrap #Сделать Chocolatey доверенным Set-PackageSource -Name Chocolatey -Trusted #Установить программы Install-Package NotepadPlusPlus, vlc, firefox, filezilla, sysinternals -Verbose -Force -ProviderName chocolatey #Добавить путь к исполняемым файлам (sysinternals) в PATH setx PATH "$env:path;C:\Chocolatey\bin" -m
Поставщик скачивает в C:\Chocolatey\lib пакет, в основе которого лежит скрипт chocolateyInstall.ps1. Он загружает установщик программы с официального сайта в папку %temp%\Chocolatey и запускает его в режиме тихой установки. Простейший пример – Notepad++.
Install-ChocolateyPackage 'notepadplusplus' 'exe' '/S' 'https://notepad-plus-plus.org/repository/6.x/6.9/npp.6.9.Installer.exe'
Поиск программ
В репозиториях много программ, все самые популярные точно есть.
Find-Package '*zip*','*commander*' -ProviderName Chocolatey
Удаление программ
С удалением приложений не все так гладко, впрочем.
Uninstall-Package -name filezilla
В идеале удаление пакета должно повлечь тихое удаление программы, но реализация зависит от автора пакета и возможностей установщика. На практике одни пакеты не содержат скриптов для удаления, другие придумывают костыли в виде скриптов AutoHotkey, третьи просто запускают деинсталляцию интерактивно, предлагая вам закончить процесс вручную. Впрочем, если установщик — MSI, удаление работает четко.
Ссылки по теме OneGet и тихой установки:
- Пошаговое руководство по установке программ из PowerShell (Дмитрий Буланов)
- Командлеты управления пакетами (TechNet)
- Типы инсталляторов и ключи тихой установки (моя статья 2005 года вполне актуальна :)
- Сайт автоустановки Windows и форум автоустановки программ
Дискуссия и опрос
Для опытных «скриптовиков» и системных администраторов в PowerShell 5.0 есть и другие интересные возможности (например, классы по аналогии с языками объектно-ориентированного программирования). Полный список вы найдете на этой странице TechNet (ссылка ведет на английскую версию специально, поскольку русская пока не содержит сведений о 5.0).
В комментариях расскажите, как вы проголосовали в опросе, если вы не выбрали первый пункт (тут все ясно). Особенно интересуют подробности тех, кто использует скрипты, а также не нашедших своего варианта.
Как вы устанавливаете программы после чистой установки системы?
- Вручную устанавливаю свежие версии (73%, голосов: 235)
- Моего варианта тут нет (6%, голосов: 18)
- Вручную устанавливаю старые версии с диска (5%, голосов: 17)
- Использую Ninite для установки свежих версий (4%, голосов: 14)
- Применяю другой способ установки (4%, голосов: 13)
- Пользуюсь только портативными программами, ничего не устанавливаю (4%, голосов: 12)
- Скриптом устанавливаю свежие версии (в т.ч. OneGet) (2%, голосов: 8)
- Скриптом устанавливаю старые версии с диска (1%, голосов: 2)
- Обхожусь только встроенными программами, ничего не устанавливаю (1%, голосов: 2)
Проголосовало: 321 [архив опросов]
Herz Mein
Подсветка синтаксиса в PowerShell 5.0, это установленный по умолчанию модуль PSReadLine. В предыдущих версиях его можно доустановить и прописать его в загрузку в профильном скрипте (переменная $profile) или подгрузить самому, когда нужно
Vadim Sterkin
Он же не входит в поставку предыдущих ОС. Расскажите, откуда установить тогда уж.
Herz Mein
Откуда брал раньше, я не помню. Сейчас (в 5 версии) модули можно брать из специального репозитария. Выбираем нужный модуль на http://www.powershellgallery.com/PSModule
Сохраняем его или сразу устанавливаем (прямо из консоли):
Dmitry Pugachev
Модуль PSReadLine доступен с PowerShell 3
https://github.com/lzybkr/PSReadLine
Александр Логинов
Можно поподробнее про тихую установку из скриптов? Не так давно стал пользоваться chocolatey, очень нравится, особенно обновление всех программ одной командой. Пока не разобрался с тихой установкой, все ставлю в ручном режиме, команда-подтверждение-установка.
Vadim Sterkin
Александр, да вроде все программы в chocolatey ставятся тихо. Вы же можете посмотреть команду на установку, пример в статье, равно как теперь и ссылка на типы инсталляторов и ключи тихой установки.
6yHTapb
единственное, для чего пока мне понадобился PowerShell в win 10, это обход бага с неработающей кнопкой «свойства» в настройках VPN соединения. Set-VpnConnection -Name «Name» -SplitTunneling $true.
Кстати, Вадим. Есть какая-либо информация по этому поводу? Речь идет о кнопке в свойствах VPN соединения — сеть — IP версии 4 — «свойства». там обычно можно убрать галку «использовать шлюз в удаленной сети». сама кнопка активна, но при нажатии ничего не происходит. тут и помог PowerShell.
Vadim Sterkin
Я уверен, что в приложении Feedback там куча плюсов, добавьте свой.
Сергей Рощин
Огромное спасибо за Chocolatey
на windows 7 я так понял на работает?
Vadim Sterkin
Сергей, надо установить WMF 5.0 — это первая ссылка в статье.
Сергей Рощин
Да вроде и без него заработало. А можно что бы он еще создавал ярлыки определенных программ на рабочем столе?
Давно так хотел найти что то подобное… Так надоело все вручную делать) дрова бы он еще сам ставил
Vadim Sterkin
Сергей, вы посмотрите сайт автоустановки — там все есть: Создание ярлыков при установке ОС
Lecron
По голосованию… Использую почти все варианты. Часть программ в портативном виде. Часть — устанавливается ручками с диска, для тех, которые умеют сами обновлятся или серьезная доработка давно закончена. Из них, часть скриптом. Часть новыми. Часть уже предустановлена в образ.
Опять же, клиенты и задачи бывают разные.
Про PowerShell… Считаю, что Микрософт промахнулся с названием. С первого взгляда, непонятно что получилось. Командная оболочка/процессор или скриптовый язык программирования. Слово Shell наталкивает на первое, но тогда уже давно пора, раз она такая крутая, сделать ее по умолчанию или хотя бы продвигать ее в качестве основной. Но реальные юзкейсы больше наталкивают на второе, замену WSH.
Vadim Sterkin
В Win+X можно заменить CMD на PS (свойства панели задач — навигация). И продвигают они в качестве основной давно — на TechNet уже давно ничего нового нет про CMD, только PS.
Конечно, целевая аудитория — ИТ-специалисты, но то же самое можно сказать про CMD и WSH. Но я не вижу вреда для ЦА своего блога. Я нахожу применение PS дома и на работе, и это не связано с администрированием..
Lecron
Я не про вред. А про непонимание и соответствующие ошибки.
Что это такое? Чем его видит Микрософт? Командный процессор, работающий, как правило, в интерактивном режиме, который также может читать команды из файла, который называется скриптом? Или как язык написания скриптов, у которого есть свой REPL? Согласитесь, разница большая?
Работать интерактивно в одном синтаксисе и семантике, а писать последовательности действий в других — нелепо. В этом и есть основная проблема. Такая глубинная, что даже вы ее не замечаете, хотя косвенно упомянули в статье. Синтаксис mklink не проще, а привычнее. Так как New-Item, с единым синтаксисом, позволяет создавать очень очень многое. И вот уже, фактически, его синтаксис проще, чем знание многих отдельных утилит, включая их наименование.
Не понял. Что такое «модуль управления менеджерами»?
Vadim Sterkin
Я оговорился, модуль управления поставщиками пакетов. Кликабельно.
Lecron
Мне кажется, тут то собака и порылась. В провайдерах. Когда нет единого подхода к управлению пакетами. Фактически пользователю приходится знать и учитывать, какой из провайдеров используется. И не только пользователям, но и мейнтенерам.
Vadim Sterkin
Фича, как обычно, ориентирована на организации, а MSI и MSU поддерживаются в полный рост.
Lecron
Возможно я не понял всей глубины этой фичи, поэтому такие глупые претензии.
Понадобятся ли пользователю дополнительные телодвижения, если владелец репозитория/пакета сменит провайдера? Или создатель пакета изменит его настройки? Или все это берет на себя менеджер пакетов?
Vadim Sterkin
Гм… вот фича — возьмите, попробуйте, разберитесь — это поможет снять некоторые вопросы. Есть поставщик, у него есть пакеты в репозитории. Убрали конкретный пакет? Тогда вы не сможете его скачать у этого поставщика. Но уже скачанный пакет остается локально, им дальше можно управлять.
Lecron
Кстати, вот еще вопрос. А есть ли команда Update-Package, а еще лучше Update-AllPackage?
Vadim Sterkin
Все командлеты перечислены на TechNet, ссылка в соотв. разделе статьи…
Василий Степанов
Привет. Скажи можно ли восстановить boot или bios и как это сделать? Слетел загрузчик виндовс 7 про. В boot изменил уже настройки но винда не хочет загружатся. Ранее была представлена винда 8.1 в сервисе воткнули винду 7 про без моего согласия. Помоги решить проблему!
Vadim Sterkin
http://www.forum.oszone.net
Алексей
часто слышал про шоколадку, раз уж напомнили то решил наконец ее потестить. результат не особо впечатлил.
поставил массово набор софта уже стоящий на пк. только около 70% нашлось в репозитории.
ключи —y —accept-license —f —x — маны покурил буквально пару минут, может что не понял.
итог:
софт который я не просил: autoIT, autohotkey. зачем?
накатило старую версию Acrobat Reader DC, cheat engine;
не смогло скачать dropbox virtualbox;
тихий режим не сработал viber, wireshark, light alloy — пришлось ставить галочки и жмакать далее;
skype удалило старый, но не поставило новый.
и часть ярлыков не создала, теперь нужно вспоминать какие.
Warnings:
— adobereader
— windjview
— firefox
— notepadplusplus
— teamviewer
тут я не понял что за ошибки.
на чистую систему в любом раскладе придется качать руками остальной софт, или ставить из архива уже не поддерживаемый.
плюс редко, но кое где при установке нужно выбирать определенные конфигурации — состав пакетов и тп. здесь это реализуемо только скриптами под каждый продукт, что не сильно экономит время в домашних условиях. поскольку все эти опции могут меняться, и меняются от версии к версии — нужно следить и переписывать скрипты. звучит не очень.
если бы оно умело сканировать реестр и добавлять в базу или в гуй софт для выбора, было бы проще. а так сначала нужно потратить время для составления списка на установку — для верности пробивал каждый продукт, чтобы указать верное имя пакета.
Vadim Sterkin
Алексей, спасибо за тест. Вопрос тихой установки зависит от авторов пакетов, как я сказал. Установщик обновился, ключи изменились, автор прощелкал. Репозиторий поддерживается ограниченным кругом людей, отсюда и проблемы.
AutoIT и AHK ставят для тихой установки других программ.
Алексей
понимаю, что автор сам должен подсуетить и обновить свой продукт везде где можно, но меня, как юзера, должен заботить только итог.
можно ли делать фидбек на обновление\ошибки через шоколадку, я не разобрался. пинать всех авторов лично — муторно и часто бесполезно. продукты они хорошие делают, но сами очень неповоротливые.
я впринципе люблю сам качать новые версии, втыкать в ченжлоги, новости, и смотреть на что соглашаюсь. вдруг фичу новую добавили, а в случае с консолью ты и не узнаешь о ней никогда. часто ли мы в настройки заползаем? неплохая такая медитация раз в месяц.
на тестировании win10, MS кстати громко обещали что сделают свой менеджер пакетов и тд и тп. но чую они опять на магазине успокоились. да и много чего они обещали, все пускаю слезу на свою люмию.
Vadim Sterkin
Обещание сдержали — вот вам модуль для управления
менеджерамипоставщиками пакетов, вперед. Они не обещали свой репозиторий поддерживать.Сергей
Буквально сегодня натолкнулся на Хабрахабре в первый раз на упоминание Chocolatey и тут же в Вашей рассылке. Показалось что вот оно! Думал будет потрясающая скриптовая замена автоустановке свободнораспространяемого ПО с ninite.com, но увы. Актуальность софта не поддерживается на паранаидальном уровне, и проблематика есть описанная участниками выше.
Vadim Sterkin
Сергей, тут минорная разница. Предполагаю, что нет прямой ссылки на загрузку новой версии, приходится каждый раз править пакет, следить. Разработчик ПО не помогает никак репозиторию.
Lecron
А созданы ли разработчику условия для такой помощи. Хотя бы не условия, а предпосылки. Мол это теперь проще, быстрее, удобнее, автоматизированнее. Посмотрите %сюда% и оцените плюшки.
Georgy Grigoryev
Разработчику выгодно чтобы его приложение было всегда самой актуальной версии, поэтому я не понимаю претензий что неудобно пользоваться стандартными средствами дистрибьюции
Lecron
Логично. Однако… как в комиксе xkcd про очередной стандарт. Отказаться от встроенной в программу системы поддержки актуальности не получится, так как виндовая распространена слабо, а поддерживать две накладно. Тем более, что виндовая, судя по комментариям, пока больше похоже на альфа-тест. То то не так, то это не эдак.
Поэтому и говорю про условия и предпослыки. Это должно быть не просто легко и удобно, а очень легко и удобно. Надеюсь, в ближайшем будущем доработают до вменяемого состояния, вместо выяснения необходимости в кнопке Пуск. :)
Виталий
Я считаю, что для консоли лучше подходит философия UNIX:
Вот например, зачем запихивать в PS «Создание соединений, символических и жестких ссылок» со своим синтаксисом, если есть mklink? Для чего там «Создание и распаковка архивов», если есть zip и его аналоги?
Vadim Sterkin
Виталий, а что, в Windows входит консольная утилита для ZIP? А делается это для упрощения скриптов на PowerShell, не надо лезть в CMD, интегрированная справка и т.д.
Lecron
А зачем лезть в cmd, если и тот и другой shell, и оба должны самостоятельно запускать исполняемые файлы и управлять их вводом выводом?
Против включения такого функционала не возражаю, особенно если это сделано по уму, как интерфейс к zlib, а не очередное разбухание кодовой базы — в проводнике одно, в шелле другое, в cmd третье стороннее.
Виталий
Так и сделали.
Herz Mein
Мое мнение, что PowerShell, это переходный инструмент администрирования прежде всего в корпоративном сегменте. Причем переход не от батников, а от WSH. Поэтому на локальных машинах будет жить cmd.exe с тонной обвесов в виде различных утилит (ведь всем известно, что без некоторых жизни нет), а на другом уровне администрирования применяется более сложный и несравнимо мощный инструмент.
Что касается личного ноутбука, то за собой замечаю, что все гнутые sed’ы и grep’ы пылятся без дела и даже wget почти не используется.
Виталий
Нет, не входит.
Но я и на своём хостинге при первой попытке использовать zip получил что- то типа «zip не установлен. Установите командой apt-get install zip».
Лезть в cmd? Выше сказали, что PS должен запускать бинарники.
Справка? В Linux команда man %имя_утилиты% либо %имя_утилиты% -?, первая даёт подробный мануал, вторая как краткая справка по параметрам. Работает кажется везде.
В итоге командный интерпретатор на Linux- одновременно простая и мощная вещь, есть множество альтернатив, так как в нём самом нет ничего сложного, он просто запускает программы, управляет потоком вывода и интерпретирует простейший синтаксис.
Vadim Sterkin
Виталий, что вы предлагаете конкретно? Не развивать OneGet в частности или PowerShell вообще и перейти на Linux?
Есть пожелания по развитию? Подпишитесь на @PSOneGet, доставляйте фидбэк в юзергруппу.
Lecron
Лично я хочу понимания, что это shell или repl. В том числе от евангелистов и разработчиков. С соответствующим отношением к творению. Ведь отсюда все споры и ошибки продвижения.
В частности, ответа на вопрос, зачем shell-у, своими средствами работать с архивами. Представьте, что этому научили cmd. Какие эмоции это у вас вызовет? И почему они отличаются от текущих?
ЗЫ. Считаю, что shell-ом, на чье звание он претендует, станет тогда, когда его можно будет безболезненно прописать в ComSpec.
Виталий
PowerShell развивать в другом направлении. Хотя наверное уже поздно и проще переписать с нуля.
Наоборот, OneGet это шаг вперёд.
Про OneGet я ничего не писал, вроде хорошая штука, в теории. На практике как вижу есть проблемы с инсталяторами, отличными от msi, ну да ладно, может, устаканится. Ну и отсутствие официальной репы с проверенными программами, легко ставящимся через msi тоже боль.
Я не имею твиттера.
Vadim Sterkin
Официальный репозиторий не помешал бы, но я не очень верю в его рождение. Может быть, с появлением приложений Win32 в магазине это как-то и увяжут с OneGet: магазин будет поставщиком, условно говоря. Посмотрим…
strafer
Стесняюсь спросить: а не проще было её добавить, чем запиливать встроенный функционал?
Vadim Sterkin
Что значит «не проще»? Вы развернули чистую ОС в изолированной среде — откуда вы будете ее добавлять? Встроено в оболочку сто лет как, между тем.
strafer
ПШ пишет МС, и дистрибутивы собирает МС, не проще было в дистрибутив добавить консольный зип?
Vadim Sterkin
PS пишет одна команда, консольный зип не пишет другая команда, поэтому нет, не проще. И нет, не проще.
strafer
Забавно, обычно базар ставят в недостатки опенсорс-(в частности линукс)-сообщества, а на деле МСовский собор как лебедь, рак и щука.
Herz Mein
> зачем shell-у, своими средствами работать с архивами
Если есть такая возможность, заложенная в .Net-классах, то почему бы ее не использовать? Тут просто другой подход, отличный от bash или cmd, которые интерпретаторы командной строки. CLI. А PowerShell скорее отладчик для скриптов, имхо.
Georgy Grigoryev
Буквально вчера опубликовал статью как я накатываю приложения на свежую систему https://habrahabr.ru/post/278757/
artem
Понятно, что задачи разные. Но я не вижу между ними противоречия. Т.е. вполне возможно одним инструментом закрыть обе потребности. К этому и стремится PowerShell. Что-то получается удачно, что-то не очень. Но виденье понятно.
artem
Скоро будет, надо полагать. CMD (саму оболочку) сейчас сравнительно активно начали дорабатывать. Хотя до этого лет десять не трогали вообще.
Lecron
Вы не путаете консоль conhost и командный интерпретатор cmd?
Ведь powerShell также запускается в conhost.
artem
PowerShell не обязательно запускается в conhost. Из стандартных — есть ещё ISE. А есть ещё сторонние хосты и собственные хосты у некоторых приложений (например, у SQL Server).
Допиливают сейчас именно интерпретатор CMD. Хотя и хосту кое-что перепало. Копипаст, например.
artem
Не вижу противоречий. В PowerShell каждый коммандлет делает что-то одно (за редчайшими исключениями). Кто скажет, что «Expand-Archive» умеет записывать DVD или варить кофе — пусть первый кинет в меня камень.
Здесь PowerShell уделывает все известные мне оболочки, т.к. оперирует объектами, а не текстом. Т.е. «работать вместе» (передавать данные между коммандлетами) получается гораздо эффективнее. Не надо тратить время на парсинг текста и попытку объяснить следующей команде, что же именно представляет собой этот текст.
Потоки тоже поддерживаются. И если надо передвать именно тест — с этим нет никаких проблем.
То есть PowerShell вполне следует приведённой философии.
Да потому что указанные коммандлеты — это и есть «аналог zip». На самом деле, ответить на эту претензию очень легко. Надо только осознать, что коммандлеты — это не встроенные возможности оболочки, а именно что внешние команды. И всё сразу встаёт на свои места. Ведь это нормально, что у нас есть команды для выполнения каких-то действий, правда? Это справедливо как для PowerShell, так и для любой другой оболочки.
Да, есть небольшое количество коммандлетов, которые поставляются вместе с оболочкой по умолчанию. Но идеологически они ничем не отличаются от тех коммандлетов, которые появляются отдельно при установке соответствующих компонентов Windows или вовсе предоставляются сторонними разработчиками.
Lecron
Шелл — как много в этом слове… начало искажаться под воздействием MS.
Все время считал, что команды не зависят от среды запуска, а встроенные в среду команды, нужны только для обслуживания возможностей самой среды, а не сторонних объектов. Неужели ошибался?
С этой точки зрения PS начинает напоминать ACDSee и Nero.
artem
Ну почему же. В bash одни команды, в cmd другие. Даже если они где-то совпадают (например, mkdir) — реализация всё равно разная. Так что команды очень даже зависят от среды. Не вижу причины, почему в какой-то другой оболочке это же действие не может называться New-Item.
Виталий
Сомневаюсь, что все сторонние утилиты поддерживают эти самые объекты. А вот текст поддерживает любая утилита, работающая в командной строке.
Почему тогда у этих командлетов свой синтаксис? Ну никак не похоже, что это внешние команды.
artem
Сторонние утилиты — нет, конечно. А вот сторонние коммандлеты — запросто. Я бы сказал, что процентов восемдесят сторонних коммандлетов достаточно годно работают с объектами.
Если коммандлета нет и приходится запускать именно утилиту (исполняемый файл), тогда конечно приходится кормить ей на вход текст. Но текст легко получить из объекта (развернув нужное свойство, например). Я понимаю, что это звучит заумно, но после набора критической массы опыта это получается совершенно интуитивно.
С этим не могу не согласиться. «Не похоже» — правильное слово :)
Как я сказал выше, к PowerShell надо привыкнуть. Причём я сейчас скажу гадость в сторону наших евангелистов и MVP, но злоупотребление алиасами (dir вместо Get-ChildItem, md вместо New-Item -ItemType «Directory», знак процента вместо Foreach-Object или вопроса вместо Where-Object и так далее, а также пропуск наименований параметров в случае, когда работает умолчание) только запутывает неподготовленных людей. Из-за этого, в том числе, у меня «привыкание» к PowerShell затянулось на годы. Мне кажется, что если бы все примеры команд, опубликованные в блогах и на форумах, содержали полный синтаксис, то новички испытывали бы гораздо меньше анальной боли.
Vadim Sterkin
Отчасти согласен, в контексте % и ?. Но md и dir сразу создают ассоциацию с командами CMD, в то время как Get-Childitem никаких параллелей со знакомыми командами не проводит, а намекает, что теперь надо разучивать новые.
artem
Ассоциации с командами CMD хороши только для тех, у кого большой опыт работы в CMD :) Сейчас таких людей практически не осталось. (Я имею в виду людей, которые уже хорошо разбираются в CMD и ещё плохо в PowerShell).
Кроме того, даже если ассоциации «работают» на тебя, то против работает нарушение целостности. В мозгу не появляется устойчивого понимания, что любая команда подчиняется определённым принципам именования. И вместо этого тебе кажется, что нормальные команды имеют короткие названия, а только некоторые особо сложные команды почему-то называются как-то по-другому.
Я имею в виду именно выработку привычек. Т.е. даже если ты прекрасно понимаешь головой, что это алиас, — но если 99% всех увиденных тобой примеров используют эти алиасы, ты воспринимаешь их именно как команды.
Vadim Sterkin
Артем, не нужен большой опыт — dir, ren и md знают все, кто открывал CMD по своему желанию, а не следуя инструкциям на форуме :)
Я целиком осознаю проблему — сам через нее прошел, поэтому стараюсь приводить командлеты, а не псевдонимы. Но в то же время, если вопрос уже разобран на странице детально, я считаю допустимым использовать псевдонимы (пример).
Более того, я считаю важным указывать простые и знакомые псевдонимы. Я сам далеко не сразу узнал, что могу использовать dir *.jpg вместо Get-Childitem -filter ‘*.jpg’
Herz Mein
Сомнительное утверждение, тот-же zip-архив можно создать и без коммандлета, т.е. это и есть базисная возможность PowerShell. Коммандлет дает удобство, так как не надо на этот «чих» искать решение в библиотеке классов MSDN.
Vadim Sterkin
Нет, это была возможность .NET, а с появлением командлета стала возможностью PowerShell.
Herz Mein
Никто не запрещает использовать консольные утилиты, но возникает вопрос — а зачем? Если все можно решить средствами самого PowerShell (речь не идет о форматах, 7z скорее всего не может)?
Алексей
На самом деле, использую 2 варианта: разворачивание бэкапа, сделанного сразу после настройки системы либо ставлю собственную сборку Windows 7, куда включаю все нужные настройки и программы.
А с Win10 менеджер пакетов пока просто ещё не освоил, хотя его наличие вызывает сильный энтузиазм.
Раньше игрался с разными менеджерами пакетов под Windows, но по тем или иным причинам все были неудобными именно в расчёте «время на освоение»/»время на ручное скачивание». Оказалось проще сделать свою сборку, чем лепить скрипты.
Евгений Казанцев
Замечательное начинание, я увидел как установить пачку нужных прог одним скриптом, ninite пользовался, особо не впечатлило, сейчас пользуюсь WPI качанными с торрентов, плюс их в том что там есть много больше и реальная автоустановка, минус что необходимо доверять автору репака.
Я одного не понял, как этим ОБНОВЛЯТЬ установленные программы полностью автоматически, что является ключевой базовой основной фичей любого пакет менеджера? Как сделать чтобы тот же нотепад++ прописался автоматом приложением по умолчанию без залезания в жутко неудобные «новые, они же современные» настройки? Как работает система зависимостей, и есть ли она там вообще?
Жесткие и символические ссылки давно делаю через Total Commander, в гуе это не в пример удобнее.
Тот же тотал коммандер помогает забыть про существование архивов и архиваторов.
Еще есть такая штука как платформа PortableApps, вот она тоже умеет обновлять проги практически автоматом…
Vadim Sterkin
Евгений, обновление программы возлагается на саму программу. Обновление пакета пока не предусмотрено, но его можно удалить и установить заново.
Ассоциации файлов реализованы только через системные диалоги, начиная с Windows 8.
Herz Mein
А если оформить, как скрипт или функцию? Например так (без проверки на существование и без преобразования в полные пути, что необходимо):
Вызывать соответственно:
Vadim Sterkin
При чем тут оформление? Вы используете классы .NET напрямую в своей функции. Командлет избавляет от нбх обращаться к классам. В этом и разница. Примерно такая же, как между программистом и ИТ-специалистом.
Herz Mein
Извините, но логики понять не могу. Какая разница будете вы вызывать функцию или командлет? Синтаксис этих действий не будет отличаться ничем, как, например, в этой команде:
Где more, это функция-обвязка над more.com
Vadim Sterkin
Логика простая — для решения задачи достаточно знать название командлета и уметь вызывать его справку. При этом и не нужно уметь работать с классами .NET, рыться в MSDN и писать функции. Неужели вы не понимаете, что для этого требуется разный уровень подготовки?
Вы пользуетесь ярлыками для запуска программ или идете для этого каждый раз в Program Files? А если ее там нет, будете по диску рыться? Так вот мне все равно, где лежит программа, если ее открывает ярлык. Равно как мне все равно, какие там классы и функции задействует командлет, если он выполняет задачу.
Herz Mein
Хорошо, я вас понял, было бы из-за чего спорить. Только все равно придется рыться в документации, искать описание типов, находить методы и свойства объектов, способы их создания. Например:
Обращаешь внимание на методы и их описание и почему-то хочется залезть в MSDN ))
artem
Троллейбус из буханки хлеба.jpg
Я так понимаю, что никто не спорит с тем, что функциями можно сделать вообще всё, что угодно :) Польза же, очевидно, в том, что теперь конкретно для этого действия отдельную функцию писать не нужно. А значит — во-первых, людям будет проще этим пользоваться (особенно если они не умеют писать функции или не могут позволить себе каждый раз их импортировать), а во-вторых будет больше стандартизации. Это несомненное благо. Согласитесь, тупо, когда в пяти скриптах от пяти разных авторов требуется распаковывать архивы, и каждый решает эту задачу немного по-своему. (Например, одно время был популярен вариант через недокументированный com-объект Windows Explorer).
lesha
Я работаю на Windows и Mac, а если настраиваю сервер — то Linux. OS X начисто переустанавливал пару раз, но там всё просто — выбрал дату в TimeMachine 10-15 мин и система готова.
На Windows у меня большинство программ портативные, ставлю только хром ибо иначе не обновляется и пакет программ Adobe, потому с версии СС они качаются через Cretive Cloud. Смысла городить огород с автоматизацией не вижу. PowerShell может и хорош, но мне на Windows нечего автоматизировать, а для Linux и OS X есть bash, которым я уже давно пользуюсь.
Если друг просит «переустанови мне Винду, а то что-то глючит» ставлю систему с внешнего диска своим «фирменным» способом, а остальное пусть сам себе ставит
Vadim Sterkin
Разве это начисто? Так и Windows можно поверх переустановить.
lesha
Под «начисто» я имел ввиду установку на новый диск, например после замены HDD на SSD или на новый компьютер. Windows предпочитаю ставить с нуля, потому что с установкой поверх уже наступал на грабли последний раз когда накатил десятку на свой 8.1
Вадим, используете в работе AutoIT? Мне эта система нравится своей простотой и возможностями, было бы интересно узнать ваше мнение об этом средстве
Vadim Sterkin
Autoit сейчас в работе не использую, но приходилось :)
Carudo
Предпочитаю портативные сборки и Chocolatey.
strafer
Вау, ну ещё немного и ПШ таки дойдёт до уровня старых версий баша :)
Как-то уже писал об этом в комментариях к другой статье: если менеджер не будет тоталитарным, а пакеты будут активными, то получится отстой. Это наглядный пример, не слишком-то оно по сути отличается от обычной установки, только уменьшается число ручных операций.
Herz Mein
Баш, это который не умеет создавать директории без корутилс (mkdir) )) ?
Herz Mein
Вот и меня тоже заинтересовал ваш комментарий, по поводу PowerShell скоро догонит баш. Это даже не смешно. Вариант bash_history, кому он вообще нужен, был всегда возможен, но тут уж извините, как настроишь, так и поедешь. А это как-раз и есть юникс-вей (а не одно приложение — одна задача). А bash я бы сравнивал с cmd, это где-то рядом.
Lecron
А было бы интересно сравнение cmd, ps, bash.
Не только как среды системного администрирования и исполнения скриптов, а именно как шеллов, программ организующих запуск и взаимодействие сторонних программ, и интерактивного взаимодействия с пользователем.
strafer
Чтобы не было непонимания, до этого я вёл и далее веду речь об удобстве интерактивной работы.
Т.е. вы твёрдо считаете, что ПШ догнал (а то и перегнал!) современные никсовые шеллы в плане удобства?
А где про эту интерпретацию можно почитать? Или вы только что это сами придумали?
Вы документацию этого самого баша читать пробовали? Кмд рядом с даже башем — это как палка-копалка рядом с современным экскаватором, причём экскаватор таковым является уже очень давно, просто с годами ещё понемногу хорошеет.
Просто даже по списку статьи:
— вау-эффекты типа подсветки синтаксиса в никсовых шеллах давно уже обыденность
— про поиск по истории кучей способов вообще странно напоминать
— появление возможности создания временного файла меня вообще в ступор вогнало (хотя к интерактивности это не относится, но вогнало)
Ну и да, мне всё ещё хочется услышать, что такого плохого в том, что mkdir обеспечивается coreutils.
Vadim Sterkin
Начинается заламывание рук. Я выбрал те изменения, которые понятнее аудитории этого блога. Полный список по ссылке в конце статьи.
strafer
Так я не вам тут отвечаю, а указанными комментариями я проиллюстрировал своё замечание о том, что многим фичам в никсовых шеллах сто лет в обед.
Vadim Sterkin
Меня всегда забавляет позиция «они с нас слизали». Взяли лучшее для своих клиентов, тем более те сами это просят — фидбэк-то есть. Вы ведь при любом раскладе будете тыкать в них острой палочкой — если ничего не делать, если изобрести какой-нибудь свой метро еще раз и т.д. Я считаю, что они делают правильно :)
strafer
Терминами можно вертеть как угодно, суть понятна всем.
Меня на самом деле эти МСовские подвижки, как и активное продвижение виндовой консоли вами, умиляют на фоне форумских срачиков, в которых никсы перманентно обвиняли в страшных грехах типа «там надо настраивать в консоли», или даже «там можно работать только в консоли». А оказалось-то…
Кроме того, из тех же срачиков можно сделать открытие, что оконный интерфейс придумала МС, а никсы его у неё слизали. Далее, я видел перлы о том, что компиз никсы слямзили с Aero. Учитывая всё это, есть стойкое ощущение, что через несколько лет такие корки начнут мочить и про консоль или, по крайней мере, про отдельные её элементы :)))
В этом вы несправедливы, я тычу только когда есть за что. У вас регулярно выходят статьи, к которым нет моих комментариев, что уже опровергает ваши слова :)
Vadim Sterkin
Основной вектор ваших комментариев тут холиварный, Windows vs. Linux. Вот и сейчас вы подтягиваете в это обсуждение какие-то древние холивары из форумов, которые вы читаете, пытаясь раздуть дискуссию в этом унылом направлении — кто у кого слизал и кто кого в чем упрекал. bash в миллион раз лучше PowerShell? Да и фиг с ним, тут это никому не интересно.
Мое «активное продвижение виндовой консоли» отражает мой личный опыт в немалой степени (и было бы странно, если б я продвигал тут bash). Но я за редким исключением не рассказываю, как настраивать Windows в PowerShell, что видно из списка статей о PowerShell. Даже в этой записи жирным по белому написано слово автоматизация в контексте рутинных задач.
strafer
Пожалуй.
А я вас за него и не упрекал. На мой взгляд консоль это замечательно. Человечество от всяческой наскальной живописи и прочего подобного пришло к алфавиту и письму. Вместо дебильного тыканья в картинки гораздо лучше общаться с компьютером при помощи текста.
Можно подумать, будто я говорил про настройку из консоли как про что-то плохое. Настройка из консоли — хорошо, автоматизация скриптами — ещё лучше.
strafer
Ну вот и пример того, о чём я выше говорил. Человек отдаёт должное ПШ, считая при этом, что никсы в это не могут https://www.outsidethebox.ms/18237/#comment-32751
Честно говоря даже не думал, что придётся настолько мало ждать :)
Herz Mein
Так PS и не стОит рассматривать, как шелл, он не для локального администрирования. Решение прикладных задач (вычислить, обработать текст, скачать информацию, отладить и запустить скрипт) — да, решение задач файлового менеджера, лаунчера — скорее нет. Хотя он и не лишен удобств (автодополнение путей, команд и параметров, история, сохранение сессии, псевдонимы, полная настройка строки приглашения (аналог никсовых $PS1 и $PS2, но не переменная, а функция)) Основная задача PS, на мой взгляд, это корпоративное администрирование (за счет продвинутых возможностей PSremoting), а это опять же не требует шелл, как таковой.
Если рассматривать сам хост для запуска PowerShell, cmd или bash, то в виндоус лучший, на мой взгляд, это conemu — настраиваемый, с табами, со сплитом, с фоном, с фулл-скрином и т.д.
strafer
Это видимо завуалированное согласие, что по удобству интерактива он таки в догоняющих.
То, что в никсовых шеллах существует десятилетиями.
И никсовых шеллах полная настройка приглашения функциями, причём опять же давно появилось.
Фишечки ПШ в объектах в пайпах, но вот сам интерактив в никсах вылизан гораздо лучше, потому что вылизывание началось давнее и многие пользователи, в т.ч. по совместительству программисты, в консоли реально работают повседневно. Положа руку на сердце, МС как обычно не стесняясь просто подглядела и подтянула годами вымученные под никсами решения.
Опять же объекты эти во многих случаях нужны как велосипеды-костыли для обхода исторически нагромождённых особенностей виндовой архитектуры и элегантным решением кажутся только, перефразируя название блога, insidethebox.
Lecron
Прочтите его название.
strafer
И то верно :)))
Herz Mein
Ну это вы додумали, то что вам хотелось бы. На самом деле я не вижу каких-то явных, незаменимых элементов, которые могли бы для никсового интерпретатора стать киллер-фичей. Скорее это устройство самой ОС, где гораздо больше возможностей для ее администрирования посредством CLI.
На счет сохранения сессии я сомневаюсь, автодополнение параметров команд тоже нет, например нельзя ввести `bash —v’, что бы дополнилось до —version
На самом деле это все не принципиально. Для cd, pwd, pushd и т.д. нет никакой разницы, т.е. вообще никакой.
В PowerShell ВСЁ объект, даже если это один единственный символ. Исходя из этого и вся философия, которая оочень далека от никсовой…
Ну и на счет слизали, позаимствовали… Скорее унифицировали, это желание сделать инструмент который был бы одинаково удобен для всех групп IT-специалистов, что бы сел и в минимальные сроки разобрался. Кроме того, где-то читал, что в ось хотят прикрутить никсовую подсистему, вот тогда будет вообще гибрид, в котором без костылей можно будет юзать нативный юникс-софт (соответствующим образом скомпилированный)…
strafer
Ну да, из общения с вами создаётся впечатление, что вы в целом не слишком знакомы с возможностями никсовых шеллов.
Одной мегафичи, конечно, нет. Есть множество вроде бы мелких, которые вместе набирают критическую массу удобства.
Это, как и положено, не является задачей шелла, а реализуется внешними средствами, такими как tmux, screen и т.п. Tmux относительно молодой, но при этом он почти ровесник самого ПШ, а вот screen разрабатывается с 1987 года. 1987 года, Карл.
В общем, не сомневайтесь.
Вы не поверите http://itmages.ru/image/view/4006064/88d9b0b6
И есть ещё много всякого, чего можно автодополнять, а так же способов автодополнения.
Забавно, что вы этим постом продемонстрировали замечательный пример для иллюстрации моего ответа Вадиму https://www.outsidethebox.ms/18237/#comment-32746 :)
Так про то и веду речь, что героическое преодолевание с помощью объектов (специально для вас уточнение: не являющихся тривиальным текстом) в ПШ в никсах в огромном числе случаев просто не нужно и чисто текстовыми способами элементарно решается. И вытекает это действительно из архитектуры системы, ПШ её заложник, если хотите.
strafer
Ах да, совсем забыл.
Так то уже в историю вроде как отходит https://ru.wikipedia.org/wiki/Подсистема_для_приложений_на_базе_UNIX
Herz Mein
Нет, это не то. https://habrahabr.ru/company/eset/blog/278339/
Vadim Sterkin
Всем спасибо за высказанные мнения