Глава 1. Введение в PowerShell Core

Содержание

Глава 1. Введение в PowerShell Core
Технические требования
Установка PowerShell Core в Windows
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Установка PowerShell Core в Linux
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Запуск PowerShell Core
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Получение подсказки
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Обойдём всё
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Как работают cmdlets?
Приготовление
Как это сделать...
Как это работает...
Выполнение операций только для чтения
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Внесение изменений в систему
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Обнаружение среды
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...

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

Хотя следующая за имевшей место на момент написания книги итерация PowerShell Core была намечена на май 2019 и она снизит версию Core, сама данная книга и её рецепты останутся точными и полезными. Новый выпуск PowerShell это всего лишь ребрендинг для унификации разработки PowerShell. В будущем мы продолжим видеть быстрые новые итерации PowerShell. {Прим. пер.: по состоянию на 01 июня 2019 последняя доступная версия - 6.2.1}

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

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

Данная глава предназначена новичкам, которые мало знакомы с PowerShell Core и поможет вам понять самые основы PowerShell, в то время как все последующие главы предполагают основательные знания по сценариям.

В этой главе мы рассмотрим следующие рецепты:

  • Установку PowerShell Core в Windows

  • Установку PowerShell Core в Linux

  • Запуск PowerShell Core

  • Получение подсказки

  • Обзор

  • Как работает cmdlet?

  • Выполнение операций ограниченных чтением

  • Внесение изменений в систему

  • Исследование среды

Технические требования

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

Установка PowerShell Core в Windows

В этом рецепте вы изучите как предоставлять PowerShell Core в системах Windows начиная с Windows 6.1 (Server 2008 R2/Windows 7).

Приготовление

Для прохождения данного рецепта вам понадобится машина с по крайне мере Windows Server 2008 R2 или Windows 7. Если данная машина не подключена к Интернету, ва требуется изыскать способ пренесения необходимого установщика на эту машину.

Как это сделать...

Пожалуйста, выполите следующие шаги:

  1. Для получения самого последнего выпуска PowerShell Core для Windows перейдите в https://github.com/powershell/powershell:

     

    Рисунок 1-1



  2. Выгрузите необходимую для вашей платфорvы редакцию. Я рекомендую по возможности воспользоваться стабильной версией с 64 битами (x64).

  3. Откройте сам файл установки, например, PowerShell-6.2.1-win-x64.msi.

  4. Для установки PowerShell Core следуюте появляющимся на экране инструкциям.

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

     

    Рисунок 1-2



  6. Pfgecnbnt PowerShell Core набрав pwsh в панели поиска!

Как это работает...

При помощи стандартного метода установки MSI, PowerShell Core будет установлен для вашей системы по умолчанию в 64- битном каталоге Program Files. Он не замещает Windows PowerShell , а вместо этого продолжает мирно сосуществовать и содержать самые последние обновления для PowerShell.

Если оставить настройки устанавливаемыми по умолчанию, в вашей системе будет зарегистрирован некий манифест событий, который включит регистрацию событий для PowerShell Core. Этот журнал будет помещён в %SystemRoot%\System32\Winevt\Logs\PowerShellCore%4Operational.evtx и его можно найти в Applications and Services Logs.

По умолчанию не выполняется настройка для удалённого доступа. Мы обсудим удалённую работу в Главе 8, Удалённое и Просто достаточное администрирование, в которой мы включим удалённый PowerShell для некой системы.

Также ознакомьтесь...

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

Приводимые ниже шаги установят Chocolatey и PowerShell Core в системе Windows. Для самой инициализации процесса этим шагам требуется применение Windows PowerShell:

  1. В Windows PowerShell выполните такую команду (подробности в https://chocolatey.org/docs/installation):

    
    Set-ExecutionPolicy Bypass -Scope Process -Force
    iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    		
  2. После установки Chocolatey просто выполните choco install powershell /y

  3. Запустите PowerShell Core отыскав pwsh через панель поиска!

Если вы предрасположены к этому, также имеется вариант компиляции всего кода с нуля. Просто следуйте приводимому ниже руководству, размещаемому в репозитории GitHub для выполнения этого:


# Клонируйте сам репозиторий
git clone https://github.com/powershell/powershell

Set-Location -Path .\powershell
Import-Module ./build.psm1

# Убедитесь что у вас имеется самая последняя версия .NET Core и прочие необходимые компоненты
Start-PSBootStrap

# Запустите сам процесс построения
Start-PSBuild

# Либо напрямую запустите PowerShell ...
& $(Get-PSOutput)

# ...либо скопируйте его в предпочитаемое вами место (здесь: Program Files в Windows, требуются необходимые права доступа)
$source = Split-Path -Path $(Get-PSOutput) -Parent
$target = "$env:ProgramFiles\PowerShell\$(Get-PSVersion)"
Copy-Item -Path $source -Recurse -Destination $target
		

Дополнительно

Установка PowerShell Core в Linux

С момента появления PowerShell Core его ключевой особенностью была возможность исполнения на множестве платформ и обеспечивать в точности тe же самую практику работы в любой операционной системе. Установка PowerShell в Linux почти так же проста, как и в Windows. Если ваш дистрибутив входит в список поддерживаемых дистрибутивов, таких как CentOS, openSUSE или Ubuntu, процесс довольно прост.

Приготовление

Для прохождения данного рецепта вам потребуется любой дистрибутив Linux (даже подсистема Windows для Linux), который предпочтительно подключён к Интернету и способен выгружать пакеты. Я применяю CentOS и Ubuntu чтобы показать некие весьма различные подходы.

На момент написания книги данный рецепт был правильным. Тем не менее, проверьте его применимость на официальной странице установки для вашей операционной системы, нпример, на https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-powershell-core-on-linux.

Как это сделать...

В CentOS 7.x выполните следующие шаги:

  1. Зарегистрируйте репозиторий RPM Microsoft:

    
    curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo.
    		
  2. Установите сам пакет:

    
    sudo yum install -y powershell
    		
  3. Запустите PowerShell исполнив pwsh, который теперь установлен.

В платформе Ubuntu 18.10 выполните сдедующие шаги:

  1. Откройте Ubuntu Software store.

  2. Отыщите powershell:

     

    Рисунок 1-3



  3. Установите и запустите PowerShell Core:

     

    Рисунок 1-4



Все шаги установки PowerShell в прочих дистрибутивах достаточно похожи по мере того как вы можете применять ваши системы управления пакетами дистрибутивов, такими как rpm или dpkg.

Как это работает...

Как правило, все инструкции установки для Linux требуют выполнения регистрации некого пакета репозиториев, который сопровождается Microsoft и применятес для публикации PowerShell Core. Эти настройки репозиторя содержать сам URL, некую ссылку на общедоступный ключ GPG и значение состояния этого репозитория.

В Linux исполняемые файлы обычно компилируются при помощи некого makefile в самой исполняемой ОС а заетм, например, связываются или копируются в один из путей исполняемых файлов (binary). Наилучшим примером этого, вероятно, является Gentoo, в котором компилируются ваше ядро и все на самом деле требуемые компоненты, библиотеки и программное обеспечение. С помощью пакетов RPM и DEB разработчики могут лучше разрешать зависимости и включать все требуемые инструкции для установки некого исполняемого пакета или компиляции какого- то иходного пакета.

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

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

В Ubuntu 18.10, PowerShell доступен в виде пакета Snap из Ubuntu Software store. Это делает установку PowerShell более дружественной и не требует восе командной строки - помимо применения самого PowerShell, естественно.

Также ознакомьтесь...

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

Дополнительно

Запуск PowerShell Core

Применять PowerShell Core очень просто. Данный рецепт покажет вам самые первые шаги и поможет вам в запуске PowerShell Core после его установки.

Приготовление

Для выполнения данного рецепта вам следует иметь завершённой установку PowerShell Core для вашей операционной системы.

Как это сделать...

Давайте выполним следующие шаги:

  1. В Windows запустите pwsh.exe. В Linux или macOS запускайте pwsh.

  2. Наберите свой первый cmdlet, Get-Process для выборки некого перечня запущенных в вашей системе процессов и нажмите Enter для подтверждения.

  3. Сопоставьте получаемый вывод этого cmdlet с выводом tasklist (в Windows) и ps (в Linux):

     

    Рисунок 1-5



  4. Наберите Get-Date и нажмите Enter в качечтве подтверждения.

  5. Сопоставьте полученный вывод с выводом date /t (в Windows) date (в Linux):

     

    Рисунок 1-6



  6. Выполните такую строку: Get-Process | Where-Object -Property WorkingSet -gt 100MB.

  7. Снова сопоставьте её вывод с выводом tasklist /FI "MEMUSAGE gt 102400" (в Windows) и ps -aux | awk -F" " '$5 > 102400' (в Linux):

     

    Рисунок 1-7



  8. Наконец, выполните этот cmdlet: Stop-Computer -WhatIf. На этот раз нет команды ни в Windows, ни в Linux

Как это работает...

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

Самый первый пример, Get-Process возвращает (Get - получает) некий список исполняемых процесов (Process). В то время как получаемый формат вывода кажется аналогичным тому что выдаёт команда

tasklist Windows, PowerShell не просто возвращает текст, а выдаёт объекты .NET.

Наш второй пример, Get-Date снова возвращает значения текущей даты и времени в виде некого объекта .NET. В .NET время вычисляется в тиках, которые являются интервалами в 100 наносекунд, начиная с 0001-01-01 00:00:00. Получаемый вывод форматируется в зависимости от культуры вашей операционной системы и может изменяться по запросу.

Наш третий пример имеет фильтр получаемого вывода для PowerShell, который очень просто сопоставляется как с Windows, так и с Linux. В особенности ярким этот пример делают безграничные возможности работы в Linux с текстом. Применяемая команда ps не допускает большой фильтрации, а следовательно вам требуется полагаться на подобные awk инструменты для обработки возвращаемого текста. Данный пример задач без PowerSell требует знания обработки текста и его фильтрации различными инструментами.

Самый последний пример, Stop-Computer, демонстрирует очень распространённый во многих cmdlet параметр с названием WhatIf. Этот параметр позволяет вам просто попробовать некий cmdlet прежде чем на самом деле выполнить что- то. Это исключительный способ для проверки изменений на общую правильность, например, прежде чем изменить ваших 10 000 учётных записей пользователей Active Directory:

 

Рисунок 1-8



Также ознакомьтесь...

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

Дополнительно

  • Вся официальная относящаяся к PowerShell документация.

  • Learn PowerShell Core 6.0 Дэвида дас Нивса и Жан-Эндрик Питерса в качестве дополнительного пособия по изучению самого языка. {Прим. пер.: рекомендуем также наш перевод 2 издания Полного руководства Windows Server 2019 Джордана Краузе.}

Получение подсказки

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

Приготовление

Чтобы следовать данному рецепту вам следует выполнить установку PowerShell в вашей операционной системе.

Как это сделать...

Выполните, пожалуйста, следующие шаги:

  1. Откройте PowerShell Core.

  2. Наберите cmdlet Get-Help и нажмите Enter. Данный cmdlet отобразит подсказку относительно самой системы подсказок.

  3. Воспользуйтесь параметром -? с любым из cmdlet, к примеру, Start-Process -?. Обратите внимание на получаемый вывод после данного cmdlet. Вы можете видеть сам синтаксис этого cmdlet, а также некие дополнительные замечания:

     

    Рисунок 1-9



  4. Наберите команду Get-Help Start-Process -Parameter FilePath. Обратите внимание на вывод на этот раз. Возвращается лишь подсказка для параметра FilePath. Из этого вывода вы можете видеть, что этот параметр обязателен, имеет два псевдонима и не выглядит как ввод конвейера:

     

    Рисунок 1-10



  5. Наберите команду Get-Help Start-Process -Full. Вы можете заметить, что файлы справки ещй пока не были выгружены.

  6. Наберите команду Update-Help -Scope CurrentUser для выгрузки всего текущего содержимого подсказок.

  7. Изучите содержимое папки $home\Documents\PowerShell\Help в Windows и ~/.local/share/powershell в Linux.

  8. Наберите команду Update-Help -Module CimCmdlets -UICulture ja-jp,sv-se. Обращаем ваше внимание что не все модули предоставляют локализацию содержимого подсказок - однако, содержимое en-us должно быть доступным для большинства модулей.

  9. Теперь, после того как выгружено содержимое подсказок, попробуйте снова Get-Help Start-Process -Full.

  10. Отметим, что теперь доступно всё содержимое, что делает для вас возможным получать информацию об cmdlet.

Как это работает...

Имеющаяся система подсказок PowerShell Core может применяться для обновления файлов подсказок из самого Интернета или из некого совместного ресурса CIFS. Без обновления содержимого подсказок, имеющаяся система подсказок всегда отображает название и синтаксис некого cmdlet, а также подробную справку по всем параметрам некого cmdlet.

Для обновления подсказок модулей в вашей локальной системе Update-Help опросит все модули из переменной среды PSModulePath чтобы отыскать все модули, имеющие установленным свойство HelpInfoUri. Он попытается разрешить данный URI, который должен указывать на некий просматриваемый вебсайт, в котором он далее должен выглядеть как некий файл XML с названием <ModuleName>_<ModuleGuid>_HelpInfo.xml. Внутри этого файла XML хранится местоположение файла Cabinet (*.cab), который впоследствии и применяется для выгрузки реального содержимого.

При помощи нового параметра Scope, введённого в PowerShell Core, всё содержимое подсказок будет помещаться в персональной папке пользователя, к примеру, в C:\Users\<UserName>\Documents\PowerShell вместо папки для всей системы, которая требовала бы полномочий администратора, например, C:\Program Files\PowerShell.

Сам по себе cmdlet Update-Help будет выгружать содержимое только один раз в день при вызове cmdlet. Чтобы выгружать искомое содержимое более часто вы можете применять параметр Force.

Также ознакомьтесь...

Содержимое подсказок также может размещаться на площадку при помощи особого cmdlet Save-Help и распространения своего содержимого. В системах Windows можно отыскать некую установку групповой политики, которая также способна управлять значением пути по умолчанию для Update-Help. Эта настройка хранится в Administrative Templates | Windows Components | System | Windows PowerShell. Данная установка допустима только для Windows PowerShell. Вне зависимости от применяемой редакции, сам cmdlet Update-Help поддерживает параметр SourcePath для определения источника выгрузки содержимого его подсказки.

Чтобы предоставлять надлежащим образом ваше собственное содержимое подсказик взгляните на модуль PlatyPS. Этот модуль делает очень простым выработку содержимого подсказок для ваших собственных модулей, упаковвая его в правильном формате, а также много чего ещё.

PlatyPS поддерживает справки markdown, позволяя вам составлять справки очень простым путём, который воспринимается более естественно, чем создание больших и сложных файлов MAML.

Дополнительно

Обойдём всё

В этом разделе мы изучим как обойти всё в любой системе запуская PowerShell Core через обнаружение cmdlet.

Приготовление

Чтобы следовать данному рецепту вам следует выполнить установку PowerShell в вашей операционной системе.

Как это сделать...

Выполните, пожалуйста, следующие шаги:

  1. Откройте PowerShell Core.

  2. Наберите команду Get-Command. Обратите внимание, что будут доступны все cmdlet из вашей системы. В зависимости от установленных в вашей системе модулей, их может быть очень много.

  3. Наберите Get-Command New-Item -Syntax. Отметим что на этот раз не будет вовращён определённый cmdlet, а только отобразится сам синтаксис:

     

    Рисунок 1-11



  4. Наберите Get-Command -Verb Get -Module Microsoft.PowerShell.Utility. Отметим что вовращаются все cmdlet, доступные только для чтения некого определённого модуля, что значительно сужает получаемые результаты:

     

    Рисунок 1-12



  5. Наберите Get-Command -CommandType Application. На этот раз возвращаются все внешние приложения (иными словами, исполняемые файлы - binaries). Попробуйте, где это возможно, применять натуральные cmdlet PowerShell вместо внешних приложений:

     

    Рисунок 1-13



  6. Наберите Get-Command -ParameterName ComputerName,CimSession,PSSession. Это одно из моих самых любимых; при помощи данного параметра выдаются только cmdlet, которые имеют определённые параметры. Для данного экземляра будут возвращены лишь cmdlet с возможностями удалённого доступа. Однако, данный параметр выполняет поиск только по всем cmdlet, доступным для данного текущего сеанса:

     

    Рисунок 1-14



  7. Наберите Get-Command *Process,*Item. Отметим, что теперь поиск по маске выполняется для всех cmdlet, которые присутсвуют в данной системе.

  8. Наберите New-Alias -Name Start-Process -Value hostname, а затем введите Get-Command Start-Process. В этот рах будет возвращён лишь псевдоним, действенно скрывая имеющийся cmdlet, Start-Process

  9. Введите Get-Command Start-Process -All. В этот раз будут возвращены как сам псевдоним, так и первоначальный cmdlet.

Как это работает...

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

Псевдонимы являются частью PowerShell, также как и cmdlet. порой некий псевдоним вводится когда такое название некого cmdlet изменяется для поддержки обратной совместимости до некоторой степени. Прочие псевдонимы создаются просто для более быстрой интерактивной работы или для более простой миграции из иного языка сценариев, например ьакие псевдонимы как dir и ls.

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

Вывод команды Get-Command может фильтроваться с помощью символов маски для выявления cmdlet, имеющих определённую цель, например, *Process перечислит все cmdlet, которые имеют нечто для работы с процессами.

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

Также ознакомьтесь...

Даже если вы обладающий опытом пользователь PowerShell, Get-Command способен помогать вам. Просто взгляните на тот объём данных, который может быть доступным для каждой команды при помощи Format-List. В дальнейшем мы также изучим и Get-Member:


# Дополнительно исследуйте некий cmdlet при помощи Format-List
Get-Command New-Item | Format-List -Property *

# Изучите прочие свойства, которые могут оказаться полезными
$cmd = Get-Command New-Item

# Откуда должно поступать содержимое справки данного cmdlet
$cmd.HelpUri

# Быстрый прыжок к местоположению модуля cmdlet
Set-Location -Path $cmd.Module.ModuleBase

# Сколько параметров имеет некий cmdlet содержащимися среди общих параметров?
$cmd.Parameters.Count

# Выявляние данных некого параметра, в данном случае выяснение того что
# New-Item допускает пустые строки или $null для передачи в значение параметра Name
$cmd.Parameters.Name
		

Взгляните на следующий снимок экрана того как выглядит вывод:

 

Рисунок 1-15



Дополнительно

  • Информация относительно последовательности команд и того как Get-Command отображает свои результаты.

Как работают cmdlets?

В противовес натуральным командам ОМ, таким как ps в Linux, или tasklist в Windows, PowerShell применяет cmdlet. Такие cmdlet всегда следуют одному и тому же, простому синтаксису. Более того, задание параметров и их значений также всегда работает одним тем же образом для любого cmdlet.

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

Приготовление

Чтобы следовать данному рецепту вам следует выполнить установку PowerShell в вашей операционной системе.

Как это сделать...

Выполните, пожалуйста, следующие шаги:

  1. Запустите PowerShell Core.

  2. Наберите New-Item -Path variable: -Name myVariable -Value "Isn't it great?"

  3. Введите $myVariable. $myVariable является переменной - временным пространством хранения для ваших данных. Простое исполнение этой переменной помещает её в вывод.

  4. Наберите Get-ChildItem $home *.*. Этот cmdlet не использует никаких имён параметров, а лишь значения параметров. $home является встроенной переменной, а *.* фильтрует все файлы, содержащие в названии точку.

  5. Наберите Get-ChildItem *.txt $home. На этот раз вы наблюдаете сообщение об ошибке. Вы не можете смешивать позиционные параметры.

  6. Введите Get-ChildItem -Filter *.txt -Path $home. За счёт названия параметра данный cmdlet вновь работает.

  7. Наберите $processName = 'powershell'. Назначение чего- то некой переменной, как в данном случае, сохранит результат в этой переменной.

  8. Наберите Get-Process $processName.

  9. Введите Get-Process $pid. В противоположность верному значению названия процесса, применение некого идентификатора вновь завершает неудачей данный cmdlet.

  10. Введите Get-Process -Id $pid. Применив верный параметр, мы вновь получили рабочий cmdlet.

  11. Наберите Get-Command -Syntax -Name Get-Process. Рассмотрите синтаксис данного cmdlet; имеется более одного способа исполнения cmdlet. Это имет название наборов параметров.

Как это работает...

Естественные cmdlet PowerShell всегда обязаны в точности следовать одному и тому же синтаксису: глагол-существительное. Значение глагола указывает само действие, а значение существительного указывает на того кто является получателем данного действия. Будет ли это cmdlet New-Item, либо Get-Process, их синтаксис всегда следует одному и тому же принципу.

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


Get-ChildItem $home -Filter *.txt -File
		

Get-ChildItem выступает в качестве названия самого cmdlet. $home является значением так называемого позиционного параметра, Path (пути). -Filter применяется в качестве названия определённого параметра, а *.txt является значением, предоставляемым этому параметру. -File является чем- то, именуемым параметром переключателя, который напоминает переключатель командной строки.

Выполнение операций только для чтения

Очень часто PowerShell применяется для выборки данных с целью составления отчётов, экспорта и просмотра настроек и тому подобного. Это обычно выполняется различными cmdlet Get. В Главе 2, Считывание и запись вывода мы потом увидим дополнительно как обрабатывать получаемые данные.

Так как cmdlet Get ничего не изменяет в вашей системе, это великолепный способ исследовать что должен предлагать PowerShell.

Приготовление

Чтобы следовать данному рецепту вам следует выполнить установку PowerShell в вашей операционной системе. Некоторые cmdlet являются специфичными для Windows и требууют какой- то операционной системы Windows/

Как это сделать...

Выполните, пожалуйста, следующие шаги:

  1. С помощью PowerShell Core вы можете применять в Windows множество встроенных cmdlet. попробуйте Import-Module Storage -SkipEditionCheck.

  2. В системе Windows наберите Get-Disk для перечисления всех дисков. Получаемый вывод должен выглядеть аналогично следующему:

     

    Рисунок 1-16



  3. В системе Windows введите Get-Disk -Number 0 | Get-Partition для выборки всех разделов на самом первом диске:

     

    Рисунок 1-17



  4. В любой из систем попробуйте cmdlet Get-Uptime для вычисления времени работы этой системы.

  5. Воспользуйтесь Get-Culture и Get-UICulture для просмотра текущих настроек языка.

  6. Просмотрите получаемый от Get-PackageProvider результат. В системе Windows видны дополнительные поставщики.

Как это работает...

PowerShell предоставляет доступ к некоторым различным источникам данных посредством cmdlet Get. После выборки полученных данных PowerShell обёртывает их в некую модель объекта, что позволяет вам сохранять, отображать, фильтровать и обрабатывать эти данные.

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

Также ознакомьтесь...

Только изучите Get-Command -Verb Get чтобы найти все cmdlet доступные только для чтения и просто взгляните на то чем являются возвращаемые значения. нет никакого вреда в этих попытках!

Вы пытаетесь создать вечный двигатель? Ради забавы заставьте PowerShell исполнить все cmdlet Get:


$ErrorActionPreference = 'SilentlyContinue'
Get-Command -Verb Get | ForEach-Object { & $_ }
		

Имеющийся оператор амперсанда (логического и, &) вызовет некое выражение. Выполняя итерации по всем cmdlet Get это выполнит возврат результатов от Get-Command, мы попробуем прочесть всё что мы можем получить в свои собственные руки. Имейте в виду, что это потербует значительного времени.

Внесение изменений в систему

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

Приготовление

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

Как это сделать...

Выполните, пожалуйста, следующие шаги:

  1. Просмотрите вывод Get-Command -Verb New,Set,Remove,Register,Unregister,Start,Stop для обзора некоторых из наиболее часто применяемых cmdlet.

  2. Для создания некого временного файла исполните $file = New-TemporaryFile.

  3. Для изменения содержимого этого файла примените 'SomeContent' | Set-Content -Path $file.

  4. Для добавления данных в самый конец этого файла данных воспользуйтесь 'More content!' | Add-Content -Path $file.

  5. Просмотрите содержимое с помощью $file | Get-Item | Get-Content -Path.

  6. Наконец воспользуйтесь $file | Remove-Item -Verbose чтобы вычистить этот файл снова.

  7. Примените $ping = Start-Process -FilePath ping -ArgumentList 'packtpub.com' -PassThru.

  8. Для останова имеющегося фонового процесса воспользуйтесь $ping | Stop-Process -PassThru.

  9. Примените Start-Job -Name Sleepy { Start-Sleep -Seconds 100; Get-Date}.

  10. Взгляните на созданное задание при помощи Get-Job -Name Sleepy - готово ли оно к доставке данных?

  11. Для ожидания результатов воспользуйтеь Get-Job -Name Sleepy | Wait-Job.

  12. В конце концов, для выборки результатов примените Get-Job -Name Sleepy | Receive-Job -Keep.

  13. В качестве адьтернативы попробуйте $job = Get-ChildItem -Recurse -Force -Path $home & and $job | Wait-Job | Receive-Job

  14. Очистите все остающиеся задания закрыв PowerShell или выполнив $job | Remove-Job; Get-Job -Name Sleepy | Remove-Job

Как это работает...

В PowerShell имеется множество глаголов, которые указывают на изменения, например, New, Set и Remove. Многие из этих cmdlet также возвращают объекты для изменённых или созданных данных. Если один из этих параметров не производит вывода, например, Stop-Process, вы можете попробовать воспользоваться соответствующим параметром PassThru, если он доступен. Обычно это означает что будут возвращены объекты.

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

При помощи обозначенного нами нового параметра, & вы можете запускать некое фоновое задание, во многом аналогично имеющемуся в Linux параметру ветвления (fork). Также позднее мы сможем собрать результаты этого задания.

Также ознакомьтесь...

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

Дополнительно

Обнаружение среды

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

Приготовление

Чтобы следовать данному рецепту вам следует выполнить установку PowerShell в вашей операционной системе.

Как это сделать...

Выполните, пожалуйста, следующие шаги:

  1. Ознакомьтесь с выводом $PSVersionTable. При помощи этой переменной вы всегда знаете с какой версией и редакцией вы работаете.

  2. Попробуйте исполнить Set-Location $PSHome; Get-ChildItem. Эта папка содержит все исполняемые файлы PowerShell, необходимые для запуска его оболочки.

  3. Взгляните на значение переменной $pid. Эта переменная всегда указывает на ваш собственный процесс PowerShell.

  4. Попробуйте исполнить cmdlet Get-Item DoesNotExist, а после этого просмотреть содержимое $Error. Эта переменная собирает ошибки, которые возникают в вашем сеансе. Не все собранные здесь ошибки можно просмотреть через CLI.

  5. попробуйте следующее: $true = $false. Вы будете приятно удивлены, что эти переменные являются так называемыми константами и не могут быть изменены.

  6. Взгляните на вывод Get-Process | Format-Table Name,Threads. Вы можете заметить, что все потоки всегда выглядят остановленными на четырёх элементах.

  7. Отобразите содержимое такой переменной как $FormatEnumerationLimit. Его начение не сучайно совпадает. Эта переменная обслуживает как форматировать список вывода.

  8. Взгляните на $PSScriptRoot. По какой- то причине эта переменная пустая. Основная причина состоит в том, что значение этой переменной устанавливается только когда исполняется некий сценарий. После этого она будет указывать на тот каталог, который содержит данный сценарий. $PSCommandPath будет содержать весь путь сценария.

  9. Выполните такую команду: Set-Content -Path ~/test.ps1 -Value '$PSScriptRoot;$PSCommandPath'; ~/test.ps1. Изучите её вывод; самая первая строка содержит значение каталога сценария, в то время как вторая строка отобразит полный путь исполняемого вами сценария.

  10. Наконец, попробуйте Get-Variable *Preference. Эти переменные контролируют поведение PowerShell в отношении ошибок, предупреждений и тому подобного. В Главе 2, Считывание и запись вывода мы ближе ознакомимся с ними.

Как это работает...

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

Также ознакомьтесь...

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