Что такое PowerShell
PowerShell – командная оболочка, которую представили в 2006 году. Спустя 10 лет Microsoft открыла исходный код этого интерпретатора команд.
PowerShell дает системным администраторам больше возможности для автоматизации рутинных задач: запуска и остановки сервисов, установки нужных параметров на рабочих станциях пользователей, обслуживания приложений и т.д. Считать его просто очередным интерпретатором не совсем верно – это полноценная оболочка с языком сценариев, построенная на .NET Core.
PowerShell работает с классами .NET, обеспечивает доступ к объектам COM, WMI и ADSI. В оболочке можно использовать хранилища вроде реестра Windows и файловой системы, встраивать исполняемые компоненты в другие приложения, получать доступ к интерфейсам совместимых приложений, настраивать роли и компоненты сервера, управлять процессами и службами.
Чтобы запустить PowerShell в конкретной папке, можно зажать Shift и кликнуть по пустому пространству правой кнопкой мыши, а в появившемся меню выбрать соответствующий пункт. Также инструмент вызывается командой powershell в окне «Выполнить» (открывается сочетанием клавиш Win + R) или в строке поиска.
В свежей версии Windows 10 работает PowerShell 5.1. Эта версия, как и CMD, находится в режиме обслуживания. Microsoft планирует заменить его PowerShell 7, и высока вероятность, что это приведет к проблемам с совместимостью.
Разработчики признают, что существует «разрыв в долгосрочной поддержке (LTS) между .NET и Windows». Пока этот разрыв не будет устранен, и PowerShell 5.1, и CMD будут доступны, но в режиме обслуживания.
Alpine 3.9 и 3.10
Установка PowerShell 7 в Alpine 3.9 и 3.10.
Примечание: Alpine 3.9 и 3.10 только поддерживаются в PowerShell 7.0 и более новых.
Загрузите пакет tar.gz package powershell-7.1.*-linux-alpine-x64.tar.gz со страницы выпусков на машину Alpine.
В терминале выполните следующие команды.
Установка зависимостей:
sudo apk add --no-cache ca-certificates less ncurses-terminfo-base krb5-libs libgcc libintl libssl1.1 libstdc++ tzdata userspace-rcu zlib icu-libs curl sudo apk -X https://dl-cdn.alpinelinux.org/alpine/edge/main add --no-cache lttng-ust
Загрузите архив powershell ‘.tar.gz’ (поменяйте адрес ссылки на актуальную версию):
curl -L https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell-7.1.3-linux-alpine-x64.tar.gz -o /tmp/powershell.tar.gz
Создайте целевую папку, где будет размещён powershell:
sudo mkdir -p /opt/microsoft/powershell/7
Распакуйте powershell в целевую папку:
sudo tar zxf /tmp/powershell.tar.gz -C /opt/microsoft/powershell/7
Добавьте разрешение на выполнение:
sudo chmod +x /opt/microsoft/powershell/7/pwsh
Создайте символическую ссылку, которая указывает на pwsh:
sudo ln -s /opt/microsoft/powershell/7/pwsh /usr/bin/pwsh
Запустите PowerShell:
pwsh
Управление переменными среды
PowerShell предоставляет несколько различных методов для управления переменными среды.
- Диск поставщика среды
- Командлеты элементов
- Класс .NET System. Environment
- на Windows панель управления системы
Использование поставщика среды
Каждая переменная среды представлена экземпляром класса System. Collections. DictionaryEntry . В каждом объекте DictionaryEntry имя переменной среды является ключом словаря. Значением переменной является значение словаря.
Чтобы отобразить свойства и методы объекта, представляющего переменную среды в PowerShell, используйте командлет. Например, чтобы отобразить методы и свойства всех объектов на диске, введите:
Поставщик среды PowerShell позволяет получить доступ к переменным среды на диске PowerShell ( диск). Этот диск выглядит примерно так же, как диск файловой системы. Чтобы открыть диск, введите:
Используйте командлеты Content, чтобы получить или задать значения переменной среды.
Можно просмотреть переменные среды на диске с любого другого диска PowerShell, а также можно перейти на диск, чтобы просмотреть и изменить переменные среды.
Использование командлетов Item
При ссылке на переменную среды введите имя диска, за которым следует имя переменной. Например, чтобы отобразить значение переменной среды, введите:
Чтобы отобразить значения всех переменных среды, введите:
Так как переменные среды не имеют дочерних элементов, выходные данные и одинаковы.
По умолчанию PowerShell отображает переменные среды в том порядке, в котором они извлекаются. Чтобы отсортировать список переменных среды по имени переменной, необходимо передать выходные данные команды в командлет. Например, с любого диска PowerShell введите:
Вы также можете войти на диск с помощью командлета:
Если вы используете диск, можно опустить имя диска из пути. Например, чтобы отобразить все переменные среды, введите:
Чтобы отобразить значение переменной в пределах диска, введите:
Сохранение изменений в переменных среды
чтобы внести устойчивое изменение в переменную среды на Windows, используйте панель управления системы. выберите расширенный системный Параметры. На вкладке Дополнительно щелкните переменная среды…. Можно добавлять или изменять существующие переменные среды в области пользователя и системы (компьютера). Windows записывает эти значения в реестр, чтобы они сохранялись в сеансах и перезапусках системы.
Кроме того, можно добавить или изменить переменные среды в профиле PowerShell. Этот метод работает для любой версии PowerShell на любой поддерживаемой платформе.
Использование методов System. Environment
Класс System. Environment предоставляет методы GetEnvironmentVariable и SetEnvironmentVariable , позволяющие указать область действия переменной.
В следующем примере метод GetEnvironmentVariable используется для получения параметра компьютера, а метод SetEnvironmentVariable — для добавления пути к значению.
Дополнительные сведения о методах класса System. Environment см. в разделе методы среды.
Архивы двоичных файлов
Для поддержки расширенных сценариев развертывания на платформах Linux доступны архивы двоичных файлов PowerShell.
Примечание
Этот метод можно использовать для установки любой версии PowerShell, в том числе последней:
- Стабильный выпуск: https://aka.ms/powershell-release?tag=stable
- Предварительный выпуск: https://aka.ms/powershell-release?tag=preview
- Выпуск LTS: https://aka.ms/powershell-release?tag=lts
Зависимости
PowerShell создает переносимые двоичные файлы для всех дистрибутивов Linux. Но среда выполнения .NET Core, как и PowerShell, требует различные зависимости для разных дистрибутивов.
На следующей диаграмме показаны официально поддерживаемые зависимости .NET Core 2.0 для различных дистрибутивов Linux.
OS | Зависимости |
---|---|
Ubuntu 16.04 | libc6, libgcc1, libgssapi-krb5-2, liblttng-ust0, libstdc++6, libcurl3, libunwind8, libuuid1, zlib1g, libssl1.0.0, libicu55 |
Ubuntu 17.10 | libc6, libgcc1, libgssapi-krb5-2, liblttng-ust0, libstdc++6, libcurl3, libunwind8, libuuid1, zlib1g, libssl1.0.0, libicu57 |
Ubuntu 18.04 | libc6, libgcc1, libgssapi-krb5-2, liblttng-ust0, libstdc++6, libcurl3, libunwind8, libuuid1, zlib1g, libssl1.0.0, libicu60 |
Debian 8 (Jessie) | libc6, libgcc1, libgssapi-krb5-2, liblttng-ust0, libstdc++6, libcurl3, libunwind8, libuuid1, zlib1g, libssl1.0.0, libicu52 |
Debian 9 (Stretch) | libc6, libgcc1, libgssapi-krb5-2, liblttng-ust0, libstdc++6, libcurl3, libunwind8, libuuid1, zlib1g, libssl1.0.2, libicu57 |
CentOS 7 Oracle Linux 7 RHEL 7 | libunwind, libcurl, openssl-libs, libicu |
openSUSE 42.3 | libcurl4, libopenssl1_0_0, libicu52_1 |
openSUSE Leap 15 | libcurl4, libopenssl1_0_0, libicu60_2 |
Fedora 27 Fedora 28 | libunwind, libcurl, openssl-libs, libicu, compat-openssl10 |
Чтобы развернуть двоичные файлы PowerShell в дистрибутивах Linux, для которых официальная поддержка не предусмотрена, необходимо специально установить необходимые пакеты, чтобы выполнить все требования, касающиеся зависимостей, для целевой ОС. Например, наш Dockerfile для Amazon Linux сначала устанавливает зависимости, а затем извлекает архив Linux .
Установка — архивы двоичных файлов
В приведенном ниже примере показано, как установить двоичный архив для 64-разрядных версий. Выберите правильный двоичный архив, соответствующий типу процессора для вашей платформы.
- powershell-7.1.4-linux-arm32.tar.gz
- powershell-7.1.4-linux-arm64.tar.gz
- powershell-7.1.4-linux-x64.tar.gz
Windows 7 — вспомнить все.
Раньше в Windows 7 использовал PSReadline (в Windows 10 уже по умолчанию он присутствует), очень удобная штука для запоминания команд и перехода к ним стрелками управления. PSReadline позволяет запоминать команды и воспроизводить их даже после перезапуска консоли PowerShell.
Устанавливается модуль командой:
PowerShell
install-module PSReadline
1 | install-modulePSReadline |
После установки, необходимо добавить команды для работы с модулем в профиль пользователя Powershell:
PowerShell
$HistoryFilePath = Join-Path (::GetFolderPath(‘UserProfile’)) .ps_history
Register-EngineEvent PowerShell.Exiting -Action { Get-History | Export-Clixml $HistoryFilePath } | out-null
if (Test-path $HistoryFilePath) { Import-Clixml $HistoryFilePath | Add-History }
Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward
1 |
$HistoryFilePath=Join-Path(Environment::GetFolderPath(‘UserProfile’)).ps_history Register-EngineEventPowerShell.Exiting-Action{Get-History|Export-Clixml$HistoryFilePath}|out-null if(Test-path$HistoryFilePath){Import-Clixml$HistoryFilePath|Add-History} Set-PSReadlineKeyHandler-KeyUpArrow-FunctionHistorySearchBackward Set-PSReadlineKeyHandler-KeyDownArrow-FunctionHistorySearchForward |
Перезапускаем консоль PowerShell и получаем возможность работы с ранее введенными командами.
Сравнение cmdlets с аналогичными командами
В следующей таблице содержится выборка cmdlets, поставляющихся с PowerShell, с приведением максимально похожих команд из других широко известных оболочек командной строки.
Следует отметить, что данная таблица приводится для поверхностного ознакомления, она не охватывает всех возможностей представленных оболочек.
Windows PowerShell(Cmdlet) | Windows PowerShell(Alias) | cmd.exe / COMMAND.COM(MS-DOS, Windows, OS/2, etc.) | Bash(Unix, BSD, Linux, Mac OS X и т. п.) | Описание |
---|---|---|---|---|
Get-Location | gl, pwd | cdcd без параметров выводит текущий каталог. | pwd | Отображает текущий рабочий каталог |
Set-Location | sl, cd, chdir | cd, chdir | cd | Меняет текущий каталог |
Clear-Host | cls, clear | cls | clear | Очищает экранClear-Host реализован как предопределённая функция PowerShell. |
Copy-Item | cpi, copy, cp | copy | cp | Копирует один или несколько файлов или дерево директорий (в PowerShell также можно копировать объекты других поставщиков данных) |
Get-Help | help, man | help | man | Справка по командам |
Remove-Item | ri, del, erase, rmdir, rd, rm | del, erase, rmdir, rd | rm, rmdir | Удаляет файл/каталог (или другой элемент в поставщиках данных PowerShell). |
Rename-Item | rni, ren | ren, rename | mv | Переименовывает файл/каталог |
Move-Item | mi, move, mv | move | mv | Перемещает файл/каталог в новое местоположение |
Get-ChildItem | gci, dir, ls | dir | ls | Выводит все файлы/каталоги в текущем каталоге |
Write-Output | echo, write | echo | echo | Выводит строки, переменные на стандартный вывод |
Pop-Location | popd | popd | popd | Изменяет текущий каталог на тот, который был последним помещён в стек |
Push-Location | pushd | pushd | pushd | Помещает текущий каталог в стек |
Set-Variable | sv, set | set | set | Установка значения переменной/создание переменной |
Get-Content | gc, type, cat | type | cat | Получает содержимое файла |
Select-String | sls | find]], findstr | grep | Выводит строки, подходящие под условие |
Get-Process | gps, ps | tlist,Available in Windows NT4, Windows 98 Resource Kit, Windows 2000 Support Tools tasklist Available in Windows XP Professional Edition and later | ps | Выводит все запущенные процессы |
Stop-Process | spps, kill | kill, taskkill | kill | Останавливает запущенный процесс |
Tee-Object | tee | n/a | tee | Передаёт входные данные в файл или переменную, затем передаёт их дальше по конвейеру |
Переменные среды PowerShell
Функции PowerShell могут использовать переменные среды для хранения настроек пользователя.
Эти переменные работают подобно переменным предпочтений, но они наследуются дочерними сеансами сеансов, в которых они созданы. Дополнительные сведения о переменных предпочтений см. в разделе about_Preference_Variables.
Ниже перечислены переменные среды, в которых хранятся настройки.
-
PSExecutionPolicyPreference
Хранит политику выполнения, заданную для текущего сеанса. Эта переменная среды существует только в том случае, если задана политика выполнения для одного сеанса.
Это можно сделать двумя разными способами.-
Запустите сеанс из командной строки с помощью параметра ExecutionPolicy , чтобы задать политику выполнения для сеанса.
-
Используйте командлет . Используйте параметр Scope со значением «Process».
Подробнее см. в разделе about_Execution_Policies.
-
-
псмодулеаналисискачепас
PowerShell обеспечивает контроль над файлом, используемым для кэширования данных о модулях и их командлетах. Кэш считывается при запуске во время поиска команды и записывается в фоновом потоке после импорта модуля.
Расположение кэша по умолчанию:
- Windows PowerShell 5.1: .
- PowerShell 6,0 и более поздние версии:
- значение по умолчанию не Windows:
По умолчанию для кэша используется имя файла . Если установлено несколько экземпляров PowerShell, имя файла включает в себя шестнадцатеричный суффикс, чтобы для каждой установки существовало уникальное имя файла.
Примечание
Если обнаружение команд работает неправильно, например, в IntelliSense отображаются несуществующие команды, можно удалить файл кэша. Кэш создается повторно при следующем запуске PowerShell.
Чтобы изменить расположение кэша по умолчанию, задайте переменную среды перед запуском PowerShell. Изменения этой переменной среды влияют только на дочерние процессы. Значение должно быть полным путем (включая имя файла), на создание и запись файлов по которому у среды PowerShell есть разрешение.
Чтобы отключить файловый кэш, укажите в качестве этого значения недопустимое расположение, например:
Это задает путь к устройству NUL . PowerShell не удается выполнить запись в путь, но ошибка не возвращается. Вы можете увидеть ошибки, о которых сообщили с помощью трассировки:
-
псдисаблемодулеаналисискачеклеануп
При вызаписи кэша анализа модуля PowerShell проверяет наличие модулей, которые больше не существуют, чтобы избежать необязательного большого объема кэша. Иногда эти проверки нежелательны. в этом случае их можно отключить, задав для этого значения переменной среды значение .
Установка этой переменной среды вступает в силу немедленно в текущем процессе.
-
PSModulePath
Переменная среды содержит список расположений папок, в которых выполняется поиск модулей и ресурсов.
По умолчанию действующие расположения, назначенные, являются:
-
Расположения на уровне системы. Эти папки содержат модули, поставляемые с PowerShell. Модули хранятся в расположении. кроме того, это расположение, в котором устанавливаются модули управления Windows.
-
Модули, установленные пользователем: это модули, установленные пользователем.
имеет параметр области , который позволяет указать, установлен ли модуль для текущего пользователя или для всех пользователей. Дополнительные сведения см. в разделе Install-Module.- в Windows расположением определяемой пользователем области CurrentUser является папка. Областью ALLUSERS является расположение .
- в системах, отличных от Windows, расположением определенной пользователем области CurrentUser является папка. Областью ALLUSERS является расположение .
Кроме того, программы установки, устанавливающие модули в других каталогах, например каталог Program Files, могут добавлять свои расположения к значению .
Дополнительные сведения см. в разделе about_PSModulePath.
-
-
POWERSHELL_UPDATECHECK
Настроить уведомления об обновлениях можно с помощью переменной среды . Поддерживаются следующие значения.
- отключает функцию уведомления об обновлении
-
то же самое, что не определяет :
- В общедоступных выпусках выводятся уведомления об обновлениях для общедоступных выпусков.
- В предварительных выпусках и релизах-кандидатах выводятся уведомления об обновлениях для общедоступных и предварительных выпусков.
- уведомления об обновлениях только для выпусков долгосрочного обслуживания (LTS)
Дополнительные сведения см. в разделе about_Update_Notifications.
-
POWERSHELL_TELEMETRY_OPTOUT
Чтобы отказаться от телеметрии, задайте для переменной среды значение , или .
Дополнительные сведения см. в разделе about_Telemetry.
Что такое Windows PowerShell?
Прежде чем мы углубимся в PowerShell, давайте сначала ответим на другой вопрос: «Что такое оболочка?»
Оболочка — это компьютерная программа, которая принимает команды с клавиатуры, интерпретирует их и передает их операционной системе для выполнения. По сути, он действует как интерфейс между вами и операционной системой. Он может быть основан на графическом интерфейсе пользователя (GUI ) или может быть построен поверх CLI (интерфейса командной строки).
Хотя оболочка существует с момента выпуска операционной системы Multics в 1969 году, Windows представила ее версию, Shell, в ноябре 1985 года. Это была базовая оболочка, которая была полезна для управления файлами и называлась MS-DOS Executive. Затем последовала разработка этой базовой оболочки, но всегда требовалось что-то более мощное.
Ранее в истории Windows пользователи прибегали к использованию различных инструментов для системного администрирования и автоматизации. В 2006 году в качестве решения было представлено серьезное усовершенствование концепции оболочки: Windows PowerShell.
Windows PowerShell позволяет выполнять различные операции, от автоматизации повторяющихся задач, сетевого администрирования и т. Д. До задач, требующих большего внимания и творчества (например, публикация контента веб-сайтов, проектирование и т. Д.).
Это не только экономит ваше время, но также дает вам больший контроль над операционной системой и ее процессами.
Что такое командлет PowerShell?
Теперь, когда вы знакомы с PowerShell, давайте рассмотрим один из наиболее важных аспектов PowerShell: командлет .
Командлеты (произносится как command-let) — это легкие и эффективные команды Windows PowerShell. Они существуют как строительные блоки, которые вы можете использовать для выполнения определенных действий, таких как копирование и перемещение файлов, или как часть более крупного и более сложного сценария PowerShell.
Get-Help Командлет, например, является наиболее полезным Командлет как это позволяет увидеть , что делает конкретный Командлет, посмотрите на его параметры, и показать различные способы , в которых используется командлет.
Подобно Get-Help , Get-Command — это еще один командлет, который можно использовать для устранения различных проблем из оболочки. В частности, он показывает все команды, установленные в вашей системе. Отображаемые команды включают командлеты, функции, псевдонимы, фильтры, сценарии и приложения. При использовании с параметрами он покажет вам все конкретные команды, связанные с этим параметром.
Например, следующая команда захватит команды всех типов, доступных на вашем локальном компьютере, и отобразит их:
С другой стороны, Get-Command с параметром ListImported будет получать команды только из текущих сеансов.
Терминал открыт
Прежде чем продолжить, стоит сделать краткий обзор того, что такое терминал на самом деле. Это потому, что мы, разработчики, работающие в Windows, привыкли объединять терминалы и программы оболочки в одну расплывчатую идею. Например, вы можете подумать, что когда Windows перешла со старой командной строки на объектно-ориентированную оболочку PowerShell, она заменила программу терминала. Но на самом деле это неправда.
Терминал — это часть программного обеспечения, которое обрабатывает текстовый ввод и отображение. Вы вводите текст в командной строке терминала. Вы смотрите в окно терминала. Но за кулисами ваш терминал взаимодействует с программой оболочки, которая действительно выполняет эту работу. В современной Windows стандартная программа терминала — ConHost.exe, и, черт возьми, она старая.
Microsoft очень не хочет что-либо менять в работе ConHost, потому что это стержень вековой обратной совместимости. Фактически, основной принцип дизайна ConHost — не нарушать обратной совместимости любой ценой. Даже исправление ошибок рискует уничтожить век сценариев и инструментов, которые каким-то образом все еще работают в режиме совместимости в современной Windows.
Вместо этого Microsoft начала создавать новый терминал под названием Windows Terminal. Он существует уже почти год, но еще не дошел до включения в ОС Windows. Это означает, что если вам нужен Терминал Windows, вы должны установить его из Windows Store. (Или вы можете загрузить его с GitHub и собрать самостоятельно, потому что новый терминал, естественно, имеет открытый исходный код.)
Краткое примечание о терминале VS Code
Если вы используете Visual Studio Code, вы, вероятно, знакомы с его интегрированным терминалом. Вы можете выбрать, какую оболочку использовать (например, PowerShell или bash), но вы всегда используете терминал VS Code, а не ConHost.
Тем не менее, терминал VS Code довольно прост. Терминал Windows не может заменить встроенный терминал. Однако вы можете настроить Windows Terminal так, чтобы он работал как внешний терминал для VS Code. Таким образом, когда вы запускаете терминал из VS Code, вы откроете отдельное окно Windows Terminal, что даст вам больше места для передышки и современные функции, которые вам действительно нужны.
Перечисление файлов, папок и разделов реестра (Get-ChildItem)
Так как получение коллекции элементов из определенного расположения является обычной задачей, командлет предназначен специально для возврата всех элементов, найденных в контейнере, например в папке.
Если необходимо вернуть все файлы и папки, которые находятся непосредственно в папке C:\Windows, введите:
Списки выглядят аналогично тем спискам, которые появляются при вводе команды в Cmd.exe или команды в командной оболочке UNIX.
С помощью параметров командлета можно создавать очень сложные списки. Далее рассмотрим несколько сценариев. Синтаксис командлета можно увидеть, введя следующее.
Эти параметры можно скомбинировать и сопоставить для получения настраиваемых выходных данных.
Перечисление всех элементов в контейнере (-Recurse)
Чтобы увидеть оба элемента в папке Windows и все элементы во вложенных папках, используйте параметр Recurse для . В списке отображается все, что находится в папке Windows, а также элементы в ее вложенных папках. Пример:
Принудительное перечисление скрытых элементов (-Force)
В выходных данных команды не отображаются элементы, которые обычно невидимы в проводнике или Cmd.exe. Чтобы показать скрытые элементы, используйте параметр Force для .
Пример:
Этот параметр называется Force, так как позволяет принудительно переопределить обычное поведение команды . Параметр Force широко используется для принудительного выполнения действия командлетом. Тем не менее, он не будет выполнять действия, компрометирующие систему безопасности.
Сопоставление имен элементов с подстановочными знаками
Команда принимает подстановочные знаки в пути к элементам списка.
Так как сопоставление с подстановочными знаками обрабатывается подсистемой Windows PowerShell, все командлеты, которые принимают подстановочные знаки, используют одну нотацию и имеют одно поведение сопоставления. В нотацию подстановочных знаков Windows PowerShell входит:
-
Звездочка () соответствует нулю или большему количеству вхождений любого символа.
-
Знак вопроса () соответствует ровно одному символу.
-
Открывающая квадратная скобка () и закрывающая квадратная скобка () заключают в себя набор символов для сопоставления.
Далее приводится несколько примеров работы спецификации из подстановочных знаков.
Чтобы найти в каталоге Windows все файлы, имеющие суффикс и ровно пять символов в основном имени, введите следующую команду.
Чтобы найти в каталоге Windows все файлы с именами, начинающимися на букву , введите следующее.
Чтобы найти все файлы с именами, начинающимися на x или z, введите следующее.
Дополнительные сведения о подстановочных знаках см. в разделе about_Wildcards.
Исключение элементов (-Exclude)
Вы можете исключить определенные элементы с помощью параметра Exclude для . Это позволит вам выполнить сложную фильтрацию в одном операторе.
Например, вы пытаетесь найти библиотеку службы времени Windows в папке System32 и все, что вам известно об имени библиотеки, — то, что оно начинается с W и содержит 32.
Такое выражение, как , найдет все библиотеки DLL, которые отвечают этим условиям, но вам может потребоваться дополнительно отфильтровать файлы и пропустить все файлы win32. Эти файлы можно пропустить с помощью параметра Exclude с шаблоном .
Смешение параметров Get-ChildItem
В одной команде можно использовать несколько параметров командлета . Перед тем как комбинировать параметры, убедитесь, что понимаете принципы сопоставления подстановочных знаков. Например, следующая команда не возвращает результатов:
Результаты отсутствуют, даже если существуют две библиотеки, которые начинаются на букву z в папке Windows.
Результаты не возвращены, так как подстановочный знак указан как часть пути. Хотя команда и была рекурсивной, командлет ограничил элементы до тех, которые находятся в папке Windows с именами, заканчивающимися на .
Чтобы указать рекурсивный поиск для файлов, имена которых соответствуют специальному шаблону, используйте параметр Include.
История
Каждая выпущенная версия MS-DOS и Microsoft Windows для персональных компьютеров содержала утилиту, предоставляющую интерфейс командной строки. Это были COMMAND.COM (в системах, основанных на MS-DOS, включая Windows 9x) и cmd.exe (в системах семейства Windows NT). Это были обычные интерпретаторы командной строки, имевшие лишь несколько базовых команд. Для других задач требовались отдельные консольные приложения, которые вызывались из этих оболочек. Они также имели язык сценариев (пакетные файлы), при помощи которого можно было автоматизировать различные задачи. Однако эти интерпретаторы не годились для полноценной автоматизации — частично потому, что в них отсутствовали эквиваленты многих операций графического интерфейса, а также из-за слабой функциональности языка сценариев, не позволявшего описывать достаточно сложные алгоритмы. В Windows Server 2003 ситуация была улучшена, однако поддержка сценариев всё ещё считалась недостаточной.
Microsoft пыталась решить некоторые из этих недостатков с помощью Windows Script Host, вышедшего в 1998 году в составе Windows 98, и утилиты для работы с ним из командной строки cscript.exe. Он интегрируется с Active Script и позволяет писать сценарии на совместимых языках, таких, как JScript и VBScript, используя API, предоставляемое приложениями через Component Object Model (COM). Однако у этого решения свои недочёты. Windows Script Host не интегрирован с оболочкой, отсутствует встроенная документация. Различные версии Windows также предоставляют командные интерпретаторы специального назначения (такие, как netsh.exe и WMIC) со своими собственными наборами команд. Они не интегрированы с командной оболочкой и не дают возможностей для взаимодействия.
В 2003 Microsoft начала разработку новой оболочки, называемой Monad (также известной как Microsoft Shell или MSH). Monad должен был стать новой расширяемой оболочкой командой строки, со свежим дизайном, который позволял бы автоматизировать весь спектр административных задач. Microsoft опубликовала первую публичную бета-версию Monad 17 июня 2005 года. Вторая и третья бета-версии были выпущены 11 сентября 2005 и 10 января 2006 соответственно. 25 апреля 2006 года было объявлено, что Monad переименован в Windows PowerShell для позиционирования его в качестве значительной части их технологий управления. В это же время была выпущена версия Release Candidate 1 («кандидат на выпуск»). Release Candidate 2 последовал 26 сентября 2006 года. Финальная версия (Release to Web, RTW) была выпущена 14 ноября 2006 года для Windows XP SP2 и Windows 2003. Финальная версия для Windows Vista стала доступна только 30 января 2007 года.
Последний CTP выпуск Windows PowerShell версии 2.0 был выпущен в декабре 2008 года. Финальная версия второй версии PowerShell была выпущена в составе систем Windows 7 и Windows Server 2008 R2 одновременно с их выпуском. Для остальных систем (Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008), вторая версия PowerShell стала доступна в составе комплекта Windows Management Framework 27 октября 2009 года. Кроме Windows PowerShell второй версии, в этот комплект также входят WinRM версии 2.0 и BITS 4.0 (последний доступен только для Windows Vista и Windows 2008; в Windows 7 и Windows Server 2008 R2 он встроен).
Создание файлов и папок
Создание новых элементов осуществляется одинаковым образом всеми поставщиками Windows PowerShell. Если поставщик Windows PowerShell поддерживает более одного типа элементов (например, поставщик Windows PowerShell FileSystem различает каталоги и файлы), необходимо указать тип элемента.
Эта команда создает папку :
Эта команда создает пустой файл .
Важно!
При использовании параметра Force с командой для создания папки, которая уже существует, она не перезапишет и не заменит папку. Будет просто возвращен имеющийся объект папки. Однако, если использовать в уже имеющимся файле, файл будет полностью перезаписан.
hashtable
Не все объекты Powershell могут проходить через конвейер. Как написано в документации у всех типов Powershell, кроме hashtable, есть поддержка работы через конвейеры (IEnumerable). При попытке пропустить хэш-таблицу через конвейер возникнет ошибка:
Get-Service : Не удается найти службу с именем службы «System.Collections.Hashtable».
Исправить ее можно несколькими способами. Самый простой — использовать метод ‘GetEnumerator()’. Благодаря этому методу хэш-таблица становится итерируемой и вы сможете использовать индексы и ключи в следующем виде:
Параметр «ErrorAction» нужен т.к. у нас произойдет ошибка из-за ключа ‘State’. Значения хэш таблицы передаются не как целый массив (как в случае с PSCustomObject), а по отдельности. Сначала передается ключ ‘Name’ со значением ‘WinRM’, а затем ‘State’ со значением ‘Restarted’.
Еще два способа получить только ключи или только значения:
Installing the ZIP package
PowerShell binary ZIP archives are provided to enable advanced deployment scenarios. Download one of
the following ZIP archives from the current release page.
- PowerShell-7.2.0-win-x64.zip
- PowerShell-7.2.0-win-x86.zip
- PowerShell-7.2.0-win-arm64.zip
- PowerShell-7.2.0-win-arm32.zip
Depending on how you download the file you may need to unblock the file using the
cmdlet. Unzip the contents to the location of your choice and run from there. Unlike
installing the MSI packages, installing the ZIP archive doesn’t check for prerequisites. For
remoting over WSMan to work properly, ensure that you’ve met the
.
Use this method to install the ARM-based version of PowerShell on computers like the Microsoft
Surface Pro X. For best results, install PowerShell to the to
folder.
General setup information
PowerShell 6 or higher, and SSH must be installed on all computers. Install both the SSH client
() and server () so that you can remote to and from the computers. OpenSSH for
Windows is now available in Windows 10 build 1809 and Windows Server 2019. For more information, see
Manage Windows with OpenSSH. For Linux,
install SSH, including sshd server, that’s appropriate for your platform. You also need to install
PowerShell from GitHub to get the SSH remoting feature. The SSH server must be configured to create
an SSH subsystem to host a PowerShell process on the remote computer. And, you must enable
password or key-based authentication.
Профиль PowerShell.
Для начала открываем консоль и пишем
PowerShell
New-Item -path $profile -type file –force
1 | New-Item-path$profile-typefile–force |
Создается файл с профилем, который находится по адресу: «C:\Users\username\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1». Если файл не создается по данному пути, придется создать его вручную.
Пример файла профиля:
PowerShell
# Указание корневой папки запуска powershell
Set-Location C:\
# Приветствие
«Welcome: » + $env:Username
# Заголовок окна
$host.UI.RawUI.WindowTitle = «ПоверШелка :)»
# Размер окна
$Shell = $Host.UI.RawUI
$Size = $Shell.WindowSize
$Size.Width = 1000
$Size.Height = 36
# Размер буфера
$Buf = $Shell.BufferSize
$Buf.Width = 120
$Buf.Height = 3000
# Цвет фона и шрифта
$Shell.foregroundcolor = «Yellow»
$Shell.backgroundcolor = «Black»
# Открытие файла в Notepad++ (версия x64)
function edit ($file) { & «C:\Program Files\Notepad++\notepad++.exe» $file }
1 |
# Указание корневой папки запуска powershell Set-LocationC\ # Приветствие «Welcome: «+$envUsername # Заголовок окна $host.UI.RawUI.WindowTitle=»ПоверШелка :)» # Размер окна $Shell=$Host.UI.RawUI $Size=$Shell.WindowSize $Size.Width=1000 $Size.Height=36 $Buf=$Shell.BufferSize $Buf.Width=120 $Buf.Height=3000 $Shell.foregroundcolor=»Yellow» $Shell.backgroundcolor=»Black» # Открытие файла в Notepad++ (версия x64) functionedit($file){&»C:\Program Files\Notepad++\notepad++.exe»$file} |
Install the SSH service on a Windows computer
-
Install the latest version of PowerShell. For more information, see
.You can confirm that PowerShell has SSH remoting support by listing the parameter
sets. You’ll notice there are parameter set names that begin with SSH. Those parameter sets
include SSH parameters. -
Install the latest Win32 OpenSSH. For installation instructions, see
Getting started with OpenSSH.Note
If you want to set PowerShell as the default shell for OpenSSH, see
Configuring Windows for OpenSSH. -
Edit the file located at .
Make sure password authentication is enabled:
Create the SSH subsystem that hosts a PowerShell process on the remote computer:
Note
The default location of the PowerShell executable is . The
location can vary depending on how you installed PowerShell.You must use the 8.3 short name for any file paths that contain spaces. There’s a bug in
OpenSSH for Windows that prevents spaces from working in subsystem executable paths. For more
information, see this GitHub issue.The 8.3 short name for the folder in Windows is usually . However,
you can use the following command to make sure:Optionally, enable key authentication:
For more information, see Managing OpenSSH Keys.
-
Restart the sshd service.
-
Add the path where OpenSSH is installed to your Path environment variable. For example,
. This entry allows for the to be found.