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

Определение PowerShell

Начнем с того, что такое оболочка. Оболочка – это интерфейс, который позволяет воспользоваться какими-либо функциями операционной системы. Таким образом, PowerShell это оболочка, которую разработала компания Microsoft и предназначена для более автоматизированного выполнения задач. Данный инструмент создан на основе.NET и оболочки командной строки, а также языка сценариев.

Также, существует такое понятие, как , которое выступает в качестве интегрированной среды сценариев, другими словами, это графический интерфейс, с помощью которого мы можем создавать какие-то сценарии, и не нужно вводить для этого все команды в командную строку.

Первая версия инструмента PowerShell появилась еще в 2006 году для Windows XP, Server 2003 и Vista. На данный момент последняя версия инструмента 4.0. Выпущена в 2013 году вместе с Windows 8.1.

Какие функции выполняет PowerShell?

Как я уже сказал выше, Microsoft создала эту утилиту для того, чтобы какие-либо задачи с операционной системой можно было выполнять намного быстрее. Допустим вы хотите увидеть , которые подключены к компьютеру, так вот, это можно сделать с помощью PowerShell. Еще можно создать, которая будет выполняться в фоновом режиме, пока вы будете заниматься своими делами. Если замечены лишние фоновые процессы, которые нагружают системы, их можно отключить с помощью PowerShell. Также, можно создать документ, в котором будет храниться информация о компьютерных сетях или другое.

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

В том случае, если вы являетесь администратором сети, то PowerShell сможет вам помочь в работе, например, с Active Directory. Также, стоит заметить, что утилита содержит более 100 команд. Это говорит о том, что она поможет решить вам большинство задач.

Запуск PowerShell на Windows 7

Для того, чтобы запустить PowerShell на данной операционной системе необходимо в поиске, где Пуск, ввести «».

По-другому инструмент можно открыть, если зайти в меню Пуск, все программы, стандартные и папка Windows PowerShell .

Запуск PowerShell на Windows 8.1

Для открытия PowerShell в Windows 8.1 необходимо в поиске ввести ключевое слово «», чтобы открыть поиск, нажмите Win+Q .

Другой способ открытия – через окно «Выполнить ». Нажимаем Win+R , открывается окно, в которое вы вводите .

Использование в повседневности

Данным инструментом пользуются многие IT-специалисты и администраторы и не зря, так как он дает большие возможности и снижает время, на выполнение каких-либо задач.

Если пользователь имеет в своем пользовании большую сеть, которая состоит из нескольких сотен серверов, то нужно будет внедрить систему безопасности, которая будет работать при использовании определенной службы. Проблема в том, что нужно проверить, установлена ли данная служба на всех серверах. Конечно, можно подключится вручную к каждому серверу, но руководству это не очень понравится, так как на выполнение такой задачи уйдет очень много времени.

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

Также, о данном инструменте написано не мало книг, все-таки данный инструмент дает широкие возможности, которые вряд ли опишутся в данной статье полноценно. Таким образом, если вас заинтересовала данная тема, вы можете ее начать ее изучать более подробно.

Многие инструкции на этом сайте в качестве одного из первых шагов предлагают запустить PowerShell, обычно от имени администратора. Иногда в комментариях появляется от начинающих пользователей вопрос о том, как это сделать.

Если на вашем компьютере установлена Windows 10, то, пожалуй, ещё более быстрый способ открыть PowerShell - нажать правой кнопкой мыши по кнопке «Пуск» и выбрать нужный пункт меню (там присутствует сразу два пункта - для простого запуска и от имени администратора). Это же меню можно вызвать, нажав клавиши Win+X на клавиатуре.

Примечание: если в этом меню вместо Windows PowerShell у вас отображается командная строка, то заменить её на PowerShell вы, при желании, можете в Параметры - Персонализация - Панель задач, включив пункт «Заменить командную строку оболочкой Windows Powershell» (в последних версиях Windows 10 параметр включен по умолчанию).

Запуск PowerShell с помощью диалогового окна «Выполнить»

Еще один простой способ запуска PowerShell - использовать окно «Выполнить»:

  1. Нажмите клавиши Win+R на клавиатуре.
  2. Введите powershell и нажмите Enter или Ок.

При этом в Windows 7 можно установить отметку запуска от имени администратора, а в последней версии Windows 10, если при нажатии Enter или Ok удерживать клавиши Ctrl + Shift, то утилита также запуститься от имени администратора.

Видео инструкция

Другие способы открыть PowerShell

Выше перечислены далеко не все способы открытия Windows PowerShell, но, уверен, что их будет вполне достаточно. Если же нет, то:

Также, бывает, спрашивают, а что такое PowerShell ISE и PowerShell x86, которые находятся, например, при использовании первого способа. Отвечаю: PowerShell ISE - «Интегрированная среда сценариев PowerShell». По сути, с её помощью можно выполнять все те же команды, но, помимо этого, в ней присутствуют дополнительные возможности, облегчающие работу со скриптами PowerShell (справка, инструменты отладки, цветовая разметка, дополнительные горячие клавиши и т.п.). В свою очередь версии x86 нужны в случае, если вы работаете с 32-битными объектами или с удаленной системой x86.

Пользователи, находящиеся в процессе изучения начального экрана Windows 8.1 или Windows 7, нередко запускают в работу совсем незнакомые им приложения. Одним из таковых является Power Shell – продукт от компании Microsoft.

Что такое Power Shell

Если кто-то упорно трудился над написанием кода продукта, значит, он кому-то нужен, для кого-то предназначен. Скорее всего, обычный пользователь сможет извлечь минимальную пользу от наличия этого софта, а вот для системного администратора данная программа – отличный помощник.

Power Shell – это современная стандартизированная оболочка командной строки, открывающая доступ к более гибкому управлению компьютером, функционирующим на базе Windows. По сути – та же командная строка, но возможности гораздо шире.

Функционал инструмента администрирования

Функционал софта внушителен. С его помощью можно управлять службами, аккаунтами, хранилищами файлов, процессами и даже серверами. Оболочка открывает доступ к работе с объектами COM, NET, XML, запуску внешних команд, созданию и выполнению собственных сценариев, проделыванию иных операций.

Оболочка Power Shell имеет собственный набор команд, как и консоль CMD, называемых командлетами. Синтаксис языка, определения командлетов и их параметров в этой программе отличается от привычного, хотя утилита способна распознавать многие команды CMD.

Прекрасно понимаемые Power Shell команды вроде cd, dir, copy и им подобные в этой оболочке являются псевдонимами или, как принято говорить, алиасами, служащими просто для удобства. Пример: команда dir, вводимая пользователем с целью просмотра файловой системы, соответствует командлету Get-ChildItem.

Как разобраться в программе

Человеку, незнакомому с основами командной строки, постигнуть тонкости работы с утилитой будет непросто. К сожалению, простых и понятных справочников по данной теме немного.

Решаясь начать изучение скриптового языка Power Shell, целесообразно ознакомиться с руководством, созданным Франком Кохом, или обратиться к справочной системе самой программы. Последняя является довольно мощной, с большим количеством конкретных примеров. Основная информация здесь откроется для просмотра после ввода командлета Get-Help.


Устанавливая новую версию операционной системы Windows, начинающие пользователи встречают новые названия программ, которых раньше, возможно не слышали и предназначение которых им не понятно. Одно из таких приложений PowerShell. Если оно предустановлено в ОС, значит для чего-то оно служит. Что это за программа Winodws PowerShell, часто задаются этим вопросом пользователи. Давайте ее рассмотрим подробнее.

Рабочее окно PowerShell

Это приложение является полезным инструментом для системных администраторов и разработчиков, но для других пользователей, тем более для начинающих, оно мало чем полезно. Windows PowerShell представляет собой современную, усовершенствованную командную строку, которая способна предоставлять более гибкую работу с настройками и управлению компьютера в операционной системе Windows. Иными словами, та же командная строка с дополнительными возможностями.

Возможности и предназначение программы PowerShell

Видно, что эта программа Winodws PowerShell является интерфейсом для скриптового языка, а также является платформой для выполнения этих скриптов. PowerShell был выпущен в 2006 году, который входил во второй сервис-пак и с того времени программа стала частью всех операционных систем компании Microsoft. Скрипты данной программы имеют расширение PS1 и способны запускаться, подобно файлам BAT и CMD.

Этот скриптовый язык разрабатывался, прежде всего, для деловых клиентов Microsoft, которым требуются мощные инструменты автоматизации различных задач в управлении компьютерами и серверами, под управлением Windows. За основу для языка взята платформа.NET от Microsoft.

Windows PowerShell дает возможность автоматизировать множество различных задач и процессов. Она позволяет установить контроль над службами, аккаунтами, настройками, процессами и т.д. Скриптовый язык воспринимает все команды из командной строки ОС, в свою очередь имеет богатый собственный язык, который состоит из определенных команд, они называются командлетами (cmdlets). Эти командлеты работают по принципу Глагол + Существительное. К примеру, «Get-Help», что в переводе с английского означает «Получить Помощь». Этот командлет вызывает справку. Для того, чтобы получить информацию о каком-либо командлете, введите «Get-Help Get-Process». В этом случае программа предоставит информацию о камендлете «Get-Process».

Запуск и работа в Windows PowerShell

Есть несколько различных способов запустить программу Windows PowerShell в ОС. Для простоты поиска программ в операционной системе существуют окно поиска. Его можно найти, открыв ярлык «Мой компьютер» в верхней части экрана с правой стороны. Введите запрос «PowerShell» и в результатах поиска откройте программу. В Windows 10 программу можно запустить из любой рабочей папки, для этого нужно сделать клик по кнопке «Файл» в верхней части слева.


Запуск PowerShell

Для того, чтобы продемонстрировать как работает эта программа Windows PowerShell, испробуем ее некоторые возможности, например, давайте почистим корзину. Для этой функции есть специальный командлет – «Clear-RecycleBin». Он пригодится для написания скрипта при обслуживании компьютеров. При вводе такой команды, нужно указать локальный диск, на котором расположено приложение, с которым необходимо выполнить это действие: «Clear-RecycleBin C:». Далее появится строка с запросом на подтверждение, здесь необходимо нажать клавишу «Y» и «Enter».


Очистка корзины с помощью PowerShell

Если к командлету «Clear-RecycleBin C:» добавить часть «-Force», корзина очиститься без подтверждения.

  1. Давайте распакуем архив при помощи программы PowerShell.
  2. Для этого существуют заданные команды «Expand-Archive» и «Compress-Archive».
  3. Для того, чтобы заархивировать папку «C:\file\» в «C:\archive\file2.zip», следуйте указанной команде: «Compress-Archive –LiteralPath C:\file\ -DestinationPath C:\archive\file2.zip.
  4. В результате исполнения этой команды в указанной выше директории появится архив с именем «file2.zip», в котором будет заархивировано содержимое папки «C:\file\».

Основные командлеты программы PowerShell

У этой программы есть масса разных команд, применяемых к различным компонентам Windows и описать их все в это статье не выйдет. Вот некоторые основные команды Windows PowerShell:

  1. «Update-Help» — обновление справки для определенного компонента.
  2. «Get-Help» — получение справки.
  3. «Get-Command» — поиск из списка командлетов.
  4. «Format-Table» — обзор результата определенной команды в таблице.
  5. «New-Variable» — новая переменная.
  6. «Remove-Variable» — удаление значения переменной.
  7. «Set-Variable» — указать значение для переменной.
  8. «Format-Wide» — обзор результата выполненной команды в виде таблицы, в которой присутствует только одно свойство для одного объекта.

PowerShell 5.0 идет с Windows 10, но для предыдущих ОС новая версия вышла в составе Windows Management Framework 5.0 только в конце февраля, причем со второй попытки . Сегодня я расскажу о некоторых нововведениях, но начну с того, зачем вам может понадобиться PowerShell.

Зачем вам нужен PowerShell

Просто так изучать PowerShell нет смысла, и это верно для любого языка – скриптового, программного и даже человеческого. Как и многие решения Microsoft, 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*"}

В результатах появились две новые функции поиска по истории, которые показаны на картинке ниже. Работает это очень просто.


В отличие от Get-History, содержащей историю текущей сессии, этот журнал ведется глобально и сохраняется при закрытии окна.

Спасибо за наводку Антону Дровосекову и Константину Сидякину из нашей группы ВК .

Создание соединений, символических и жестких ссылок

Командлеты: New-Item , Remove-Item , Get-ChildItem

У меня в блоге хватает рассказов , поэтому я не мог обойти вниманием возможность их создания в 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 запомнить проще, поэтому быстрее может получиться так:

Iex "mklink /d C:\test\MySymLinkFolder C:\Windows"

Создание временного файла

Командлет: New-TemporaryFile

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

#Создание временного файла New-TemporaryFile #Создание временного файла и получение его полного пути $tmpfile = (New-TemporaryFile).FullName $tmpfile

Я редко делаю чистую установку основной системы, но на ВМ это происходит регулярно. И OneGet очень удобен для быстрой автоустановки ключевого набора программ.

Примечание. Можно использовать этот модуль, не устанавливая WMF 5.0. Предварительная версия модуля для PS 4.0 и 3.0 доступна отдельно — март 2016 , а более свежие ищите поиском в центре загрузки по запросу PackageManagement PowerShell Modules Preview .

Установка программ

В этом примере из репозитория Chocolatey устанавливаются четыре программы и полный набор утилит . Первые три команды выполняются однократно, причем смену политики надо подтвердить. Четвертая команда тихо устанавливает перечисленные программы, а пятая просто экономит время.

#Разрешить установку подписанных пакетов из Интернета 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 (Дмитрий Буланов)
  • Типы инсталляторов и ключи тихой установки (моя статья 2005 года вполне актуальна:)
  • Сайт автоустановки Windows и форум автоустановки программ

Дискуссия и опрос

Для опытных «скриптовиков» и системных администраторов в PowerShell 5.0 есть и другие интересные возможности (например, классы по аналогии с языками объектно-ориентированного программирования). Полный список вы найдете на этой странице TechNet (ссылка ведет на английскую версию специально, поскольку русская пока не содержит сведений о 5.0).

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Об авторе

Подсветка синтаксиса в PowerShell 5.0, это установленный по умолчанию модуль PSReadLine. В предыдущих версиях его можно доустановить и прописать его в загрузку в профильном скрипте (переменная $profile) или подгрузить самому, когда нужно

Import-module psreadline

Можно поподробнее про тихую установку из скриптов? Не так давно стал пользоваться chocolatey, очень нравится, особенно обновление всех программ одной командой. Пока не разобрался с тихой установкой, все ставлю в ручном режиме, команда-подтверждение-установка.

6yHTapb

единственное, для чего пока мне понадобился PowerShell в win 10, это обход бага с неработающей кнопкой «свойства» в настройках VPN соединения. Set-VpnConnection -Name «Name» -SplitTunneling $true.
Кстати, Вадим. Есть какая-либо информация по этому поводу? Речь идет о кнопке в свойствах VPN соединения — сеть — IP версии 4 — «свойства». там обычно можно убрать галку «использовать шлюз в удаленной сети». сама кнопка активна, но при нажатии ничего не происходит. тут и помог PowerShell.

Сергей Рощин

Огромное спасибо за Chocolatey
на windows 7 я так понял на работает?

Lecron

По голосованию… Использую почти все варианты. Часть программ в портативном виде. Часть — устанавливается ручками с диска, для тех, которые умеют сами обновлятся или серьезная доработка давно закончена. Из них, часть скриптом. Часть новыми. Часть уже предустановлена в образ.
Опять же, клиенты и задачи бывают разные.

Про PowerShell… Считаю, что Микрософт промахнулся с названием. С первого взгляда, непонятно что получилось. Командная оболочка/процессор или скриптовый язык программирования. Слово Shell наталкивает на первое, но тогда уже давно пора, раз она такая крутая, сделать ее по умолчанию или хотя бы продвигать ее в качестве основной. Но реальные юзкейсы больше наталкивают на второе, замену WSH.

  • Lecron : но тогда уже давно пора, раз она такая крутая, сделать ее по умолчанию или хотя бы продвигать ее в качестве основной.

    В Win+X можно заменить CMD на PS (свойства панели задач — навигация). И продвигают они в качестве основной давно — на TechNet уже давно ничего нового нет про CMD, только PS.

    Конечно, целевая аудитория — ИТ-специалисты, но то же самое можно сказать про CMD и WSH. Но я не вижу вреда для ЦА своего блога. Я нахожу применение PS дома и на работе, и это не связано с администрированием..

    • Lecron

      Я не про вред. А про непонимание и соответствующие ошибки.
      Что это такое? Чем его видит Микрософт? Командный процессор, работающий, как правило, в интерактивном режиме, который также может

      Работать интерактивно в одном синтаксисе и семантике, а писать последовательности действий в других — нелепо. В этом и есть основная проблема. Такая глубинная, что даже вы ее не замечаете, хотя косвенно упомянули в статье. Синтаксис mklink не проще, а привычнее. Так как New-Item, с единым синтаксисом, позволяет создавать очень очень многое. И вот уже, фактически, его синтаксис проще, чем знание многих отдельных утилит, включая их наименование.

      Обещание сдержали - вот вам модуль для управления менеджерами пакетов, вперед.

      Не понял. Что такое «модуль управления менеджерами»?

        • Lecron

          Мне кажется, тут то собака и порылась. В провайдерах. Когда нет единого подхода к управлению пакетами. Фактически пользователю приходится знать и учитывать, какой из провайдеров используется. И не только пользователям, но и мейнтенерам.

          Фича, как обычно, ориентирована на организации, а MSI и MSU поддерживаются в полный рост.

          Lecron

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

          Гм… вот фича — возьмите, попробуйте, разберитесь — это поможет снять некоторые вопросы. Есть поставщик, у него есть пакеты в репозитории. Убрали конкретный пакет? Тогда вы не сможете его скачать у этого поставщика. Но уже скачанный пакет остается локально, им дальше можно управлять.

          Lecron

          Кстати, вот еще вопрос. А есть ли команда Update-Package, а еще лучше Update-AllPackage?

          Привет. Скажи можно ли восстановить boot или bios и как это сделать? Слетел загрузчик виндовс 7 про. В boot изменил уже настройки но винда не хочет загружатся. Ранее была представлена винда 8.1 в сервисе воткнули винду 7 про без моего согласия. Помоги решить проблему!

Алексей

часто слышал про шоколадку, раз уж напомнили то решил наконец ее потестить. результат не особо впечатлил.

поставил массово набор софта уже стоящий на пк. только около 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

тут я не понял что за ошибки.

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

  • Сергей

    PS C:\Users\Gerald> Find-Package "*paint.net*" -ProviderName Chocolatey Name Version Source Summary ---- ------- ------ ------- paint.net 4.0.6 chocolatey Paint.NET is image and photo manipulation software designed to be used on computers tha...

    Буквально сегодня натолкнулся на Хабрахабре в первый раз на упоминание Chocolatey и тут же в Вашей рассылке. Показалось что вот оно! Думал будет потрясающая скриптовая замена автоустановке свободнораспространяемого ПО с ninite.com, но увы. Актуальность софта не поддерживается на паранаидальном уровне, и проблематика есть описанная участниками выше.

    Виталий

    Я считаю, что для консоли лучше подходит философия UNIX:


    Пишите программы, которые бы работали вместе.
    Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс.

    • Виталий, а что, в Windows входит консольная утилита для ZIP? А делается это для упрощения скриптов на PowerShell, не надо лезть в CMD, интегрированная справка и т.д.

      • Lecron

        А зачем лезть в cmd, если и тот и другой shell, и оба должны самостоятельно запускать исполняемые файлы и управлять их вводом выводом?
        Против включения такого функционала не возражаю, особенно если это сделано по уму, как интерфейс к zlib, а не очередное разбухание кодовой базы — в проводнике одно, в шелле другое, в cmd третье стороннее.

        Виталий

        Нет, не входит.
        Но я и на своём хостинге при первой попытке использовать zip получил что- то типа «zip не установлен. Установите командой apt-get install zip».

        Лезть в cmd? Выше сказали, что PS должен запускать бинарники.

        Справка? В Linux команда man %имя_утилиты% либо %имя_утилиты% -?, первая даёт подробный мануал, вторая как краткая справка по параметрам. Работает кажется везде.

        В итоге командный интерпретатор на Linux- одновременно простая и мощная вещь, есть множество альтернатив, так как в нём самом нет ничего сложного, он просто запускает программы, управляет потоком вывода и интерпретирует простейший синтаксис.

        strafer

        Vadim Sterkin : Виталий, а что, в Windows входит консольная утилита для ZIP?

        Стесняюсь спросить: а не проще было её добавить, чем запиливать встроенный функционал?

  • Herz Mein

    > зачем shell-у, своими средствами работать с архивами

    Если есть такая возможность, заложенная в.Net-классах, то почему бы ее не использовать? Тут просто другой подход, отличный от bash или cmd, которые интерпретаторы командной строки. CLI. А PowerShell скорее отладчик для скриптов, имхо.

    artem

    Lecron Что это такое? Чем его видит Микрософт? Командный процессор, работающий, как правило, в интерактивном режиме, который также может читать команды из файла, который называется скриптом? Или как язык написания скриптов, у которого есть свой REPL? Согласитесь, разница большая?

    Понятно, что задачи разные. Но я не вижу между ними противоречия. Т.е. вполне возможно одним инструментом закрыть обе потребности. К этому и стремится PowerShell. Что-то получается удачно, что-то не очень. Но виденье понятно.

    artem

    Vadim Sterkin :
    И продвигают они в качестве основной давно - на TechNet уже давно ничего нового нет про CMD, только PS.

    Скоро будет, надо полагать. CMD (саму оболочку) сейчас сравнительно активно начали дорабатывать. Хотя до этого лет десять не трогали вообще.

    artem

    Виталий Пишите программы, которые делают что-то одно и делают это хорошо.

    Не вижу противоречий. В PowerShell каждый коммандлет делает что-то одно (за редчайшими исключениями). Кто скажет, что «Expand-Archive» умеет записывать DVD или варить кофе — пусть первый кинет в меня камень.

    Виталий Пишите программы, которые бы работали вместе.

    Здесь PowerShell уделывает все известные мне оболочки, т.к. оперирует объектами, а не текстом. Т.е. «работать вместе» (передавать данные между коммандлетами) получается гораздо эффективнее. Не надо тратить время на парсинг текста и попытку объяснить следующей команде, что же именно представляет собой этот текст.

    Виталий Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс.

    Потоки тоже поддерживаются. И если надо передвать именно тест — с этим нет никаких проблем.

    То есть PowerShell вполне следует приведённой философии.

    Виталий Вот например, зачем запихивать в PS «Создание соединений, символических и жестких ссылок» со своим синтаксисом, если есть mklink? Для чего там «Создание и распаковка архивов», если есть zip и его аналоги?

    Да потому что указанные коммандлеты — это и есть «аналог zip». На самом деле, ответить на эту претензию очень легко. Надо только осознать, что коммандлеты — это не встроенные возможности оболочки, а именно что внешние команды. И всё сразу встаёт на свои места. Ведь это нормально, что у нас есть команды для выполнения каких-то действий, правда? Это справедливо как для PowerShell, так и для любой другой оболочки.

    Да, есть небольшое количество коммандлетов, которые поставляются вместе с оболочкой по умолчанию. Но идеологически они ничем не отличаются от тех коммандлетов, которые появляются отдельно при установке соответствующих компонентов Windows или вовсе предоставляются сторонними разработчиками.

    • Lecron

      artem : Ведь это нормально, что у нас есть команды для выполнения каких-то действий, правда? Это справедливо как для PowerShell, так и для любой другой оболочки.

      Шелл - как много в этом слове… начало искажаться под воздействием MS.
      Все время считал, что команды не зависят от среды запуска, а встроенные в среду команды, нужны только для обслуживания возможностей самой среды, а не сторонних объектов. Неужели ошибался?
      С этой точки зрения PS начинает напоминать ACDSee и Nero.

      Виталий

      Здесь PowerShell уделывает все известные мне оболочки, т.к. оперирует объектами, а не текстом. Т.е. «работать вместе» (передавать данные между командлетами) получается гораздо эффективнее.

      Сомневаюсь, что все сторонние утилиты поддерживают эти самые объекты. А вот текст поддерживает любая утилита, работающая в командной строке.

      Надо только осознать, что командлеты - это не встроенные возможности оболочки, а именно что внешние команды. И

      Почему тогда у этих командлетов свой синтаксис? Ну никак не похоже, что это внешние команды.

      • artem

        Виталий : Сомневаюсь, что все сторонние утилиты поддерживают эти самые объекты.

        Сторонние утилиты — нет, конечно. А вот сторонние коммандлеты — запросто. Я бы сказал, что процентов восемдесят сторонних коммандлетов достаточно годно работают с объектами.

        Если коммандлета нет и приходится запускать именно утилиту (исполняемый файл), тогда конечно приходится кормить ей на вход текст. Но текст легко получить из объекта (развернув нужное свойство, например). Я понимаю, что это звучит заумно, но после набора критической массы опыта это получается совершенно интуитивно.

        Виталий : Почему тогда у этих командлетов свой синтаксис? Ну никак не похоже, что это внешние команды.

        С этим не могу не согласиться. «Не похоже» — правильное слово:)

        Как я сказал выше, к PowerShell надо привыкнуть. Причём я сейчас скажу гадость в сторону наших евангелистов и MVP, но злоупотребление алиасами (dir вместо Get-ChildItem, md вместо New-Item -ItemType «Directory», знак процента вместо Foreach-Object или вопроса вместо Where-Object и так далее, а также пропуск наименований параметров в случае, когда работает умолчание) только запутывает неподготовленных людей. Из-за этого, в том числе, у меня «привыкание» к PowerShell затянулось на годы. Мне кажется, что если бы все примеры команд, опубликованные в блогах и на форумах, содержали полный синтаксис, то новички испытывали бы гораздо меньше анальной боли.

    На самом деле, использую 2 варианта: разворачивание бэкапа, сделанного сразу после настройки системы либо ставлю собственную сборку Windows 7, куда включаю все нужные настройки и программы.
    А с Win10 менеджер пакетов пока просто ещё не освоил, хотя его наличие вызывает сильный энтузиазм.
    Раньше игрался с разными менеджерами пакетов под Windows, но по тем или иным причинам все были неудобными именно в расчёте «время на освоение»/»время на ручное скачивание». Оказалось проще сделать свою сборку, чем лепить скрипты.

    Евгений Казанцев

    Замечательное начинание, я увидел как установить пачку нужных прог одним скриптом, ninite пользовался, особо не впечатлило, сейчас пользуюсь WPI качанными с торрентов, плюс их в том что там есть много больше и реальная автоустановка, минус что необходимо доверять автору репака.
    Я одного не понял, как этим ОБНОВЛЯТЬ установленные программы полностью автоматически, что является ключевой базовой основной фичей любого пакет менеджера? Как сделать чтобы тот же нотепад++ прописался автоматом приложением по умолчанию без залезания в жутко неудобные «новые, они же современные» настройки? Как работает система зависимостей, и есть ли она там вообще?»

    А если оформить, как скрипт или функцию? Например так (без проверки на существование и без преобразования в полные пути, что необходимо):

    Param ( $create, $extract, $path, $zip) add-type -assembly system.io.compression.filesystem function create-zip ($path, $zip) { ::createfromdirectory($path, $zip) } function extract-zip ($zip, $path) { ::extracttodirectory($zip, $path) } if ($create) { create-zip $path $zip } if ($extract) { extract-zip $zip $path }

    Вызывать соответственно:

    .\test -c -p "C:\Some\Folder" -z "D:\Folder\out.zip" # Для создания.\test -e -p "C:\Some\Folder" -z "D:\Folder\out.zip" # Для извлечения

    • При чем тут оформление? Вы используете классы.NET напрямую в своей функции. Командлет избавляет от нбх обращаться к классам. В этом и разница. Примерно такая же, как между программистом и ИТ-специалистом.

      artem

      Троллейбус из буханки хлеба.jpg

      Я так понимаю, что никто не спорит с тем, что функциями можно сделать вообще всё, что угодно:) Польза же, очевидно, в том, что теперь конкретно для этого действия отдельную функцию писать не нужно. А значит — во-первых, людям будет проще этим пользоваться (особенно если они не умеют писать функции или не могут позволить себе каждый раз их импортировать), а во-вторых будет больше стандартизации. Это несомненное благо. Согласитесь, тупо, когда в пяти скриптах от пяти разных авторов требуется распаковывать архивы, и каждый решает эту задачу немного по-своему. (Например, одно время был популярен вариант через недокументированный com-объект Windows Explorer).

    lesha

    Я работаю на Windows и Mac, а если настраиваю сервер — то Linux. OS X начисто переустанавливал пару раз, но там всё просто — выбрал дату в TimeMachine 10-15 мин и система готова.
    На Windows у меня большинство программ портативные, ставлю только хром ибо иначе не обновляется и пакет программ Adobe, потому с версии СС они качаются через Cretive Cloud. Смысла городить огород с автоматизацией не вижу. PowerShell может и хорош, но мне на Windows нечего автоматизировать, а для Linux и OS X есть bash, которым я уже давно пользуюсь.
    Если друг просит «переустанови мне Винду, а то что-то глючит» ставлю систему с внешнего диска своим «фирменным» способом, а остальное пусть сам себе ставит