sonyps4.ru

Введение в оболочку командной строки Windows PowerShell. Поиск по истории в двух направлениях

Опытные пользователи операционной системы Windows 10 могли слышать об утилите командной строки PowerShell. Также с ней могут быть знакомы имеющие опыт работы с Windows 7 и 8.1. После многих лет использования приложения командной строки Windows и файлов формата.bat пришло время познакомиться с более функциональным инструментом.

PowerShell является ценным пополнением списка инструментов Windows и его масштаб может отпугнуть некоторых пользователей. Что это — скриптовый язык или командная оболочка? Не стоит беспокоиться: несмотря на обширные возможности, освоить PowerShell по силам каждому.

Шаг 1: установка

Для начала нам необходима сама утилита PowerShell. Если вы работаете с Windows 10, у вас уже установлена версия PowerShell 5. Обновление Windows 10 Anniversary Update использует версию 5.1, но разница незаметна. В Windows 8 и 8.1 применяется PowerShell 4, чего тоже вполне достаточно. Установка PowerShell на Windows 7 не доставит проблем, но всё же пару лишних шагов придется сделать. В частности, нужно дополнительно установить.Net Framework. Можно установить Windows Management Framework, в состав которого входит PowerShell.

У PowerShell есть два интерфейса. Опытные пользователи могут выбрать полноценный графический интерфейс, известный как Integrated Scripting Environment (ISE). Новичкам лучше использовать консоль PowerShell, простой текстовый интерфейс в стиле командной строки Windows или даже DOS 3.2.

Для запуска PowerShell от имени администратора в Windows 10 нажмите на кнопку «Пуск» и прокрутите список приложений до Windows PowerShell. В Windows 8.1 ищите Windows PowerShell в папке System в Windows. В Windows 7 оболочка располагается в папке Accessories. В качестве обычного пользователя PowerShell можно запустить точно так же, используя левую кнопку мыши вместо правой.

В любой версии Windows можно применить поиск. Для удобства дальнейшего использования можно закрепить PowerShell на панели задач.

Шаг 2: старые команды Windows

Синтаксис команд Windows в PowerShell работает привычным образом. Например, cd меняет папки, dir показывает список всех файлов и папок внутри текущей папки.

В зависимости от метода запуска консоли PowerShell можно начать в c:\Windows\system32 или в c:\Users\ . В примере на скриншоте используется команда cd .. (с пробелом) для перехода на один уровень вверх за раз, затем запускается команда dir для отображения списка файлов и папок в директории C:\ .

Шаг 3: установка файлов помощи

Команды вроде cd и dir не являются активными командами оболочки PowerShell. Это так называемые псевдонимы (aliases) — замены настоящих команд PowerShell. Псевдонимы удобны для тех, кто имеет большой опыт работы с командной строкой. Однако они не затрагивают глубин PowerShell.

Чтобы начать знакомиться с возможностями PowerShell, наберите help и нужную вам команду. На скриншоте показана команда .

Команда help говорит, что dir является псевдонимом команды PowerShell Get-ChildItem . Если набрать get-childitem в PS C:\> , увидите то же самое, что и при использовании команды dir .

Как указано внизу скриншота, файлы помощи для PowerShell не устанавливаются автоматически. Для их получения запустите PowerShell от имени администратора и наберите update-help . Установка файлов помощи займёт несколько минут, ряд модулей могут отсутствовать — например, в данном случае не установились Help for NetWNV и SecureBoot. Когда всё готово, полная система помощи всегда будет давать нужные подсказки.

Теперь наберите команду get-help и любую интересующую вас команду («cmdlet» на языке PowerShell, по-русски командлеты), будет показано её описание. Например, get-help get-childitem выдаёт список опций get-childitem . Также можно вывести разные возможные варианты. Например

get-help get-childitem -examples

выдает семь подробных примеров использования get-childitem . Команда

get-help get-childitem -detailed

включает в себя эти семь примеров и подробные разъяснения каждого параметра в командлете get-childitem .

Шаг 4: получение помощи по параметрам

На скриншоте вы могли заметить два списка под SYNTAX для get-childitem . Наличие двух разных синтаксисов означает возможность применения двух способов запуска командлет. Как держать синтаксис отдельно друг от друга и что означают параметры? Ответ простой, если знать трюк.

Для получения подробностей относительно параметров командлеты get-childitem или любой другой используйте параметр -full :

get-help get-childitem -full

Это выдает список того, что вы можете сделать с командлетой и что случится. Смотрите на скриншот.

Просмотр описания параметров позволяет заметить, что get-childitem даёт возможность получить объект child (вроде названия подпапки или имени файла) в указанном месте, с совпадением определённых символов или без. Например:

get-childItem “*.txt” -recurse

возвращает список файлов «*.txt» в текущей папке и всех подпапках (из-за параметра -recurse ). Тогда как

get-childitem “HKLM:\Software”

возвращает список всех ключей реестра верхнего уровня в HKEY_LOCAL_MACHINE\Software .

Если вы когда-нибудь пытались попасть в реестр при помощи командной строки Windows или файлов.bat, вы сможете оценить функциональность этого варианта доступа.

Шаг 5: изучение имён

Есть причина того, почему показанные до сих пор командлеты выглядят сходным образом: get-childitem, update-help, get-help используют единую схему глагол-существительное. Это соглашение применяют все командлеты PowerShell, в них глагол стоит перед единственным существительным. Это понравится тем, кто в своё время пострадал от непостоянства названий команд в языках VB и VBA.

Взгляните на самые распространенные командлеты:

set-location : устанавливает текущую рабочий локацию на определённую локацию

get-content : получает содержимое файла

get-item : получает файлы и папки

copy-item : копирует объект из одной локации в другую

remove-item : удаляет файлы и папки

: получает процессы, запущенные на локальном или удаленном компьютере

get-service : получает сервисы, запущенные на локальном или удаленном компьютере

invoke-webrequest : получает содержимое с веб-страницы в интернете

Для просмотра работы определённой командлеты используйте get-help как в случае

get-help copy-item -full

На основе описания в помощи можно понять, что необходимо командлете. Например, если вы хотите копировать все файлы и папки из Documents в c:\temp , используйте

copy-item c:\users\ \documents\* c:\temp

Введя эту команду, вы увидите несколько интересных возможностей окружения PowerShell. Например, если набрать copy-i и нажать кнопку Tab, PowerShell заполнит Copy-Item . Если неправильно набрать командлету и PowerShell не может распознать её, даётся полное описание того, что было сделано не так.

Попробуйте данную командлету:

invoke-webrequest askwoody.com

Вы получите краткий список заголовков, изображений, ссылок и прочего содержимого веб-страницы. Обратите внимание в get-help на список invoke-webrequest , который «возвращает коллекцию форм, ссылок, изображений и прочие важные элементы HTML» — именно то, что должно показываться на экране.

Некоторые командлеты помогают управлять самим PowerShell:

get-command : список всех доступных командлет

get-verb : список всех доступных глаголов

clear-host : очистка экрана программы-хоста

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

get-command *-service

Будут показаны все глаголы, доступные с существительным service . Вот их список:

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

Можно объединять эти командлеты с другими.

Шаг 6: использование труб

Если вы знакомы с командной строкой Windows или пакетными файлами, то знаете о перенаправлении и трубах. Перенаправление (символ >) и трубы (символ |) берут результат действия и прикрепляют его в другое место. Например, можно перенаправить результат команды dir в текстовый файл или передать результат команды ping в команду find для фильтрования интересных результатов, вроде

dir > temp.txt

ping askwoody.com | find “packets” > temp2.txt

Здесь во второй команде find ищет строку packets , взятую из адреса askwoody.com командой ping и объединяет все совпадающие строки в файл под названием temp2.txt .

Первая из этих команд отлично работает в PowerShell. Для запуска второй команды потребуется нечто вроде

ping askwoody.com | select-string packets | out-file temp2.txt

Использования перенаправления и труб значительно расширяет возможности командной строки Windows: вместо бесконечного прокручивания вниз по экрану в поиске текстовой строки можно отфильтровывать нужные команды Windows.

Powershell обладает поддержкой pipe , причём она не ограничена текстом. PowerShell позволяет передавать целый объект из одной командлеты в другую, где объект представляет собой комбинацию данных (называемых свойствами) и действий (методов), которые могут использовать эти данные.

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

Как это понять? Используйте командлету get-member . Если вы хотите знать, какой тип объекта обрабатывает командлета, проведите её через get-member . Например, если вы пытаетесь понять запущенные на компьютере процессы и сузили опции до командлеты , вот как узнать результат командлеты:

get-process | get-member

Запуск этой командлеты выдаёт длинный список свойств и методов для , но в самом начале списка можно увидеть тип объекта, который создает :

TypeName: System.Diagnostics.Process

Нижеприведенный скриншот также показывает свойства под названием get-process Handles, Name, NPM, PM, SI, VM и WS .

Если вы хотите манипулировать результатом для работы с этим командлетом (вместо отображения длинного списка активных процессов на мониторе), нужно найти другую команду, которая в качестве вводных данных принимает System.Diagnostics.Process . Для поиска нужной командлеты снова используйте возможности PowerShell:

get-command -Parametertype System.Diagnostics.Process

Эта командлета выдает список командлет, которые могут обрабатывать System.Diagnostics.Process .

Некоторые командлеты известны тем, что принимают почти любой вид данных. Главной среди них является . Эта командлета пропускает через себя каждый посылаемый по трубе объект, один за одним, и применяет к нему заданной критерии выбора. Существует специальный маркер под названием $_ , который позволяет использовать каждый предмет в трубе, один за раз.

Допустим, вы хотите получить список всех запущенных на компьютере процессов с названием «svchost», то есть хотите сопоставить свойство Name процессу svchost . Используйте команду:

get-process | where-object {$_.Name -eq “svchost”}

Командлета смотрит на каждый объект System.Diagnostics.Process , сравнивает .Name этого объекта с «svchost»; если есть совпадения, они выдаются на монитор. Смотрите на скриншот.

Шаг 7: анализ полезных команд PowerShell

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

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

Get-AppXPackage | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”}

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

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

Командлета Get-AppXPackage возвращает объект TypeName Microsoft.Windows.Appx.PackageManager.Commands.AppxPackage , который включает в себя полное имя пакета приложения и местонахождения соответствующего файла манифеста XML. Если запустить командлету get-appxpackage , вы увидите длинный список пакетов приложений. Скриншот показывает описание приложения Xbox.

Командлета Foreach посредством цикла проходит через каждый объект в AppXPackage , отправляя их командлету Add-AppxPackage . Согласно get-help для Add-AppxPackage , тут есть два ключевых переключателя:

  • Переключатель -Register используется для регистрации существующих установок пакетов приложений, можно задать параметры DisableDevelopmentMode и Register
  • Переключатель -DisableDevelopmentMode говорит Windows заново зарегистрировать существующий пакет приложения, который был отключён, не зарегистрирован или повреждён.

Строка «$($_.InstallLocation)\AppXManifest.x ml» описывает, где расположен файл manifest.xml . Если посмотреть на файлы AppXManifest.xml , вы увидите сложный список идентификаторов приложений, исполняемых файлов и большое количество визуальных элементов, связанных с приложением.

После перезагрузки все добавленные пакеты приложений скачиваются и устанавливаются из магазина Windows Store.

Существуют вещи, которые мы выполняем каждый день, будучи администраторами сети Windows, но если бы нас попросили сделать их с помощью командной строки, в отличие от администраторов Linux, для нас, администраторов Windows, это было бы весьма проблематично. Windows всегда был слаб, когда речь шла об инструментах командной строки. На мой взгляд, все изменилось с появлением Windows Powershell. С помощью Powershell (или по-другому PS) можно выполнить столько различных функций, которые мы не могли выполнять ранее. В этой статье мы сконцентрируемся на том, как Powershell может помочь нам выполнять некоторые общие сетевые функции из командной строки. Продолжайте читать, чтобы узнать больше!

Что такое Powershell?

Powershell – это устанавливаемая функция Windows Server 2008. Чтобы установить Powershell, вы должны установить функцию Powershell с помощью мастера добавления функций. Процесс установки занимает около минуты, и как только компонент установлен, у вас появляется доступ к удивительному языку сценариев командной строки. В отличие от других сценарных языков в Windows, Powershell создан исключительно для системных администраторов. Powershell использует.NET и команды ("cmdlets" или "command-lets") в своей работе. Будучи пользователем PS, вы можете использовать команды по отдельности или связывать их вместе, чтобы выполнять более сложные задачи.

Когда вы установили PS, вы сможете запустить Пуск -> Все программы -> Windows Powershell 1.0 , и нажать Windows PowerShell . На этом этапе у вас должно появиться голубое окно CLI, которое выглядит, как показано на рисунке 1.

Рисунок 1: Окно Windows Powershell Command

Вы всегда можете сказать, что работаете в Powershell, поскольку в окне "PS" в начале всегда есть следующая строка:

PS C:\Users\Administrators

Теперь, когда powershell установлен и его окно открыто, позвольте мне показать вам некоторые общие сетевые задачи, которые можно выполнить в PS.

Перечислить IP адреса вашего сервера

Чтобы получить список IP адресов на вашем сервере Windows 2008 Server, вам нужно использовать следующую команду:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE - ComputerName . | Select-Object -Property IPAddress

Вот как выглядят данные после использования этой команды на моем Windows 2008 Server:

Рисунок 2: Перечисление IP адресов с помощью Windows Powershell

Как видно из рисунка, исходные данные показывают нам, что у меня есть один адаптер с IP V4 адресом и IP V6 адресом на этом сервере Windows 2008 Server. Само по себе, это не является чем-то удивительным, но подумайте о том, что вы сможете сделать с этим, используя другие сценарные функции.

Как учит нас руководство пользователей powershell, результирующие данные являются массивом и вы можете посмотреть IP адрес лишь направив эти данные в "Select-Object" (после отключения IPV6), примерно так:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE - ComputerName . | Select-Object -ExpandProperty IPAddress

Рисунок 3: Перечисление IP адреса ТОЛЬКО с Windows Powershell

Получение списка конфигурации сетевого адаптера с помощью Powershell

Чтобы посмотреть основную конфигурацию вашего сетевого адаптера, вы можете использовать следующую команду:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE "ComputerName .

Хотя данная статья посвящена рассмотрению использования PS в Windows Server 2008, эта утилита также может использоваться и в Windows XP, Vista или Server 2003. Вот пример полученных данных команды, запущенной на моей рабочей станции Windows XP:

Рисунок 4: PowerShell показывает конфигурацию сетевого адаптера на Windows XP

Тестовый опрос компьютера с помощью PowerShell

Хотя командная строка PS все же может выполнять все обычные команды Windows (например тестовый опрос), сильная сторона Powershell заключается в том, что вы можете взять полученные данные и с легкостью изменить их.

Вот пример того, как это можно сделать, предоставлено руководством пользователя Windows Powershell. В этом примере результаты Win32_PingStatus анализируются с помощью Select-Object. В этом случае данные просто показывают время ответа и код статуса.

Вот команда, которая использовалась:

Get-WmiObject -Class Win32_PingStatus -Filter "Address="127.0.0.1"" - ComputerName . | Select-Object -Property Address,ResponseTime,StatusCode

А вот результаты использования команды на моей машине Windows:

Рисунок 5: PowerShell данные показывают статус опроса, анализируемого с помощью Select-Object

Разрешение общего доступа к папке с помощью Windows Powershell

Буду с вами откровенен. Использование команд Powershell не всегда настолько просто, как использование существующих команд Windows, с которыми вы уже знакомы. Вот пример.

Следующая команда PS обеспечит общий доступ к папке в C:\temp в качестве "davidtemp" и применит к ней отличную команду:

(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).InvokeMethod("Create",("C:\temp","davidtemp",0,25,"David"s Temp Folder"))

С другой стороны, вы могли просто использовать уже проверенную и опробованную команду net share :

Net share davidtemp=C:\temp /remark:"David"s Temp Shared Folder"

Рисунок 6: PowerShell данные и традиционная команда net share

Обратите внимание на то, что команда Powershell не просто не сработала, но выдала мне ужасную ошибку. Я пробовал эту команду на Windows XP и Vista и я был администратором системы.

С другой стороны, команда net share очень проста и сработала с первой попытки. И хотя я пытаюсь рассказать вам о принципах работы с Powershell, не забывайте о том, что Powershell может использовать традиционные сетевые команды Windows, которые во многих случаях гораздо проще использовать. Однако вы можете оказаться в ситуации, в которой эти традиционные команды не делают всего того, что вам необходимо, и именно здесь на помощь придет Powershell.

Прочие сетевые и более сложные команды

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

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

Как вы, возможно, заметили из предыдущих примеров, одним из параметров для большинства команд Powershell является "computername". Когда мы ставим точку (".") вместо имени компьютера (computername), это будет локальный хост (наш компьютер). Однако мы также можем заменять любой IP адрес или имя компьютера Windows в домене, что дает нам возможность использовать эти команды не только на нашем ПК, но и создавать мощные сценарии в Powershell, которые можно применять на всех компьютерах сети.

Например, вот команда, которая передает IP адрес компьютера Dell через LAN:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE - ComputerName DELL9400

Вот результаты этой команды:

Рисунок 7: Результаты Powershell получения IP адреса с удаленного ПК

А вот увеличенное изображение, показывающее необходимую информацию:

Рисунок 8: Увеличение окна результатов Powershell получения IP адреса удаленного ПК

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

Взгляните на следующий пример:

"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process {Get- WmiObject -Class Win32_PingStatus -Filter ("Address="" + $_ + """) -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

В этом примере был получен список IP адресов и имен домена. Этот список был передан на "ForEach-Object". Для каждого из этих «объектов» (IP адрес / доменные имена), использовался элемент "Get-WmiObject" PingStatus. Затем данные тестового опроса каждого имени домена были пропущены через "Select-Object", в результате чего были отображены только адреса, время ответа и коды статуса.

Рисунок 9: Тестовый опрос с помощью списка при сочетании и опросе данных

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

Что еще нужно знать?

Заключение

Windows Powershell – это очень мощная утилита. В этой статье невозможно описать всего того, что вы сможете сделать с помощью Powershell, но надеюсь, что мне удалось дать вам общую картину возможностей этой утилиты и вдохновить вас на последующие изыскания в этой области. С каждым днем появляются новые книги, курсы и уйма материала в Интернете о функциях Powershell, которые могут использоваться системными администраторами Windows. Учитывая столь сильную привязанность администраторов Windows к графическому интерфейсу, потребуется время на то, чтобы Powershell была принята в тех компаниях, в которых не испытывают острой необходимости в этом инструменте. Я уверен, что администраторы будут использовать Powershell для создания более коротких сценариев, с помощью которых можно будет выполнять более сложные задачи. Надеюсь, что Powershell будет обретать все большую популярность по всему миру!

Особая благодарность компании Microsoft за предоставление примеров команд в документации руководства пользователя Windows Powershell.

Изучение PowerShell — книги и ресурсы

Данная статья открывает цикл записей, посвященных PowerShell . Да, пришло время командной строки!

Кратко — что такое PowerShell?

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

Почему PowerShell?

Стоит отметить два момента. В первую очередь — PowerShell действительно содержит язык сценариев; это очень компактный язык, в состав которого входит всего лишь порядка двух десятков ключевых слов. Но на самом деле PowerShell, как было сказано выше, - это оболочка командной строки, во многом сходная с cmd.exe или с оболочкой UNIX Bash.

Второй момент: Microsoft не поощряет практику использования оснащенных графическим интерфейсом консолей на серверах. Дело в том, что серверы могут обеспечивать эффективное функционирование графических интерфейсов лишь за счет ухудшения производительности сервера. Но использование графического интерфейса на клиентах, даже если эти клиенты подключены к серверу, вполне допускается и сегодня. Так в новых версиях Windows Server все функции доступны в первую очередь с помощью PowerShell и только потом (а некоторые и вовсе недоступны) с помощью графического интерфейса сервера.

Загрузить PowerShell можно с сайта TechNet — но в современных ОС MS Winodws он доступен «из коробки».

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

  • Пишем первый сценарий и знакомимся с Windows PowerShell

Интернет ресурсы:

  • Mastering PowerShell — powershell.com

Программы:

  • Script Browser для Windows PowerShell ISE . Данное дополнение позволяет с легкостью отыскивать необходимые скрипты в TechNet Script Center по заданным критериям и параметрам. По мимо этого содержит специальный модуль Script Analyzer, который после анализа предлагает улучшения/изменения, повышающие эффективность написанного скрипта. Этот модуль можно получить в комплекте Windows PowerShell ISE которая является частью OC Windows. Загвоздка в том, что Windows Server и PowerShell ISE требуют активации. Лицензия сама по себе платная, но не стоит отчаиваться. У Вас будет порядка 180 дней что бы испытать данный продукт.
  • Dell PowerGUI — Позволяет упростить сборку собственных сценариев PowerShell до простого выбора необходимых командлетов, которые подходят для Вашей задачи, и перетаскивания их в нужные места. Идеально подходит для тех, кто являются новичком в работе с PowerShell, но имеете базовое понимание концепций. PowerGUI - простой в использовании редактор, который, вероятно, усовершенствует Ваше понимание сборки более сложных и усовершенствованных сценариев, особенно если Вы лучше всего усваиваете информацию визуально.

Один из самых основных источников знаний — прекрасная справка программы:

Надеюсь данный список ресурсов поможет Вам в изучении PowerShell . Какие книги и наработки использовали вы? Оставьте ответ в комментариях и удачи в освоении новых знаний! 😉

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, которым я уже давно пользуюсь.
    Если друг просит «переустанови мне Винду, а то что-то глючит» ставлю систему с внешнего диска своим «фирменным» способом, а остальное пусть сам себе ставит

  • Не один год прошел с момента выхода Windows 7 и Server 2008.

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

    Начинающие же юзеры в большинстве своём даже не знают, что такое PowerShell (PS).

    А ведь скрипты для PowerShell позволяют автоматизировать, без малого, 100% действий и сценариев, выполняемых в операционной системе посредством командной строки и графического интерфейса.

    С основными возможностями этой программы и ознакомимся, побольше внимания уделив функции создания и запуска скриптов (микропрограмм).

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

    Что собой представляет Windows PowerShell?

    PowerShell – интерпретатор на основе.NET Framework, наделённый собственным языком сценариев.

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

    Как это было в MS-DOS и старых версиях UNIX’а.

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

    По сравнению с другими интерпретаторами, PS отличается:

    • интеграцией с. – позволяет создавать мощные скрипты, внедряя в них программный код;
    • все возвращаемые данные являются объектами, а не данными текстового/строчного типа (string), что подразумевает их передачу другим скриптам и любую обработку.

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

    • Возможность представления команд в виде командлетов – их запуск осуществляется внутри интерпретатора, в ином случае команда выполняется в отдельном процессе.
    • Использование конвейеров – предназначены для передачи данных из одной команды в другую с сохранением их структуры и типа.
    • Интегрирована многопоточная передача данных по сети с установкой приоритетности и возобновлением соединения.
    • Поддержка позиционных и именованных параметров.
    • Фоновая работа – асинхронный вызов команд и запуск скриптов на удалённых машинах.
    • Установка ограниченных сессий с удалёнными клиентами и выполнение сценариев на них.
    • Модули – способ организации скриптов, когда они становятся самодостаточными и выполняются в собственном контейнере, не влияя на окружение модуля.
    • Наличие обработчика ошибок.
    • Графическая среда для языка : синтаксис, отладчик, подсветка, автоматическое завершение команд с поддержкой Юникод и закладок.
    • Добавление точек прерывания в строки , команды, операции и переменные для отладки сценария.
    • Блочные и подстрочные комментарии.
    • Поддержка создания алиасов для некоторых командлетов , преобразовывающихся в обычные команды в момент выполнения.
    • Создание ограниченных сессий, где можно выполнять строго заданный перечень команд и очень многое другое.

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

    Приступать к освоению интегрированного скриптового языка, не имея навыков программирования, можно.

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

    Хотя, не обладая знаниями об основных понятиях PowerShell, сделать в окне командного интерпретатора вряд ли что-либо получится. С них и начнём.

    Командлеты

    Командлеты – своеобразные команды PS, за которыми скрываются самые разные функции. Встроенные в интерпретатор команды реализованы по принципу «глагол-имя существительное», например, Get-Process (получение списка процессов). Такое решение позволяет понимать суть команды уже из её названия (на английском языке).

    Часть командлетов поддерживает получение/передачу данных и массивов информации с сохранением их структуры и типа. Это работает по принципу конвейера (речь об этом пойдёт в следующем разделе). Несмотря ни на что, командлеты запускаются и обрабатывают объекты строго порядку.

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

    Таким образом юзеру предоставляется доступ до специфических функций программы.

    Командлеты умеют для получения доступа к требуемой информации напрямую или через уникальные пути (буквы дисков и пути к директориям).

    Посредством командлетов можно работать , объектами файловой системы и хранилища сертификатов, установленными приложениями и службами.

    Конвейер

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

    Для этого существует конвейер. Как и в UNIX, он объединяет команды путём передачи выходных данных одного командлета во входные для другого в неизменном виде, сохраняя свой тип.

    При этом не требуются никакой контейнер или посимвольный разбор информации.

    В состав передаваемой информации может входить и функция. После окончания работы объединённых команд вызывается функция превращения информации в текстовый вид (конвертация данных в строковые) с применением форматирования текста.

    Скрипты

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

    Особенно, когда одни и те же операции следует выполнять постоянно.

    Да и без человеческого фактора не обойтись : опечатки, ошибки, случайно задетые клавиши при написании строчек кода, исправление или набор строки заново требуют более дружелюбного отношения к пользователю.

    Для выполнения однообразных цепочек действий в PS реализованы сценарии – текстовые файлы с последовательностью понятных для интерпретатора команд внутри.

    Скрипты в PowerShell еще больше упростят и автоматизируют работу за ПК и его обслуживание, особенно, если в сценарии присутствуют разветвления, условия, логические операции и циклы.

    Но здесь «не всё золото, что блестит»: написать собственный сценарий или загрузить готовый (пускай и немного подогнав его под собственные цели) так просто не получится.

    Если бы в Microsoft это разрешили, сколько бы бед наделали скрипты для PowerShell , написанные мошенниками и недоброжелателями в корыстных или хулиганских целях.

    Для выполнения в Windows PS необходимо пройти контроль его запуска.

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

    Прежде чем пользоваться скриптами

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

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

    Всё происходит из-за элементарного незнания содержимого скриптового файла (ps1) и желания побыстрее решить свои задачи за счёт труда других. Объекты, контролирующие уровень безопасности выполнения сценариев, создают окружение, в котором запустить скрипт невозможно.

    Преднамеренный запуск макросов происходит после изменения уровня безопасности, если юзер даст добро, осознавая, что он делает, и зная наверняка, что в файле *.ps1 находится.

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

    Здесь можно как снизить защиту до минимума, так и разумно лавировать между возможность открыть дыры для проникновения и удобством в работе с PowerShell.

    Оболочка обладает тремя уровнями безопасности:

    • файлы с расширением ps1 не идентифицируются системой как исполняемые и обозначаются как неизвестные или текстовые (по двойному клику открываются в используемом на компьютере по умолчанию текстовом редакторе);
    • оболочка позволяет выполнять скрипты после указания к ним полного пути , скриптовые файлы в текущей директории не ищутся, делая невозможным выполнения макросов, расположенных в текущем каталоге;
    • запуск встроенного скрипта Execution Policy , отвечающего за добавление в перечень разрешенных скриптов требуемого.

    Даже не думайте изменять конфигурацию , понизив её хотя бы до второго уровня, не ознакомившись с основами PowerShell , пока не начнёте хотя бы поверхностно понимать содержимое файлов *. ps 1.

    Существует и понятие политики выполнения, созданной с целью предотвратить случайный запуск сценариев. Настроек политики запуска существует целых пять:

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

    Проверить текущее состояние политики запуска можно командой «Get-ExecutionPolicy» . Какой бы ни была политика безопасности, пользователь не сможет запустить скрипт, в котором содержатся команды, на выполнение коих у него недостаточно привилегий.

    Запуск PowerShell

    От теории пора переходить к практике. Итак, для выполнения скриптов необходимо получить цифровую подпись или (второй вариант попроще).

    Вызвать окно PowerShell можно несколькими путями.

    Представлено оно в двух видах:

    • классическая консоль;

    • PowerShell ISE – добавляет поддержку вкладок, синтаксиса, контекстной справки, контекстного и главного и меню, что в значительной мере облегчает работу в интерпретаторе.

    Пуск

    Проще всего вызвать PS через Пуск .

    1. Открываем меню (в Windows 7 кликаем «Все программы»).
    2. Идём в каталог Windows PowerShell и кликаем по нужной иконке.

    Рис. 6 – Запуск PS через диалог «Выполнить»

    Win+X

    В Windows 10 PS можно вызывать из меню WinX. Дело в том, что по умолчанию путём клика по команде «Командная строка» открываемся CMD. Её можно заменить на PowerShell.

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

    Можно вызывать PowerShell через командную строку, прописав в ней «powershell» или запуском исполняемого файла по пути: %WINDIR%\System32\ WindowsPowerShell\v1.0 для 32-битных систем и по адресу %WINDIR%\ syswow64\ WindowsPowerShell\v1.0 для 64-разрядных Windows любой редакции.

    Рис. 8 – Запуск PS из каталога, где хранится его исполняемый файл



  • Загрузка...