Я начинаяю новую рубрику — Power Shell скрипты. Это не просто командная строка, это конкретный интерпретатор логического языка. В интернете предлагают использовать его для выполения отдельных команд. Но это, как микроскопом колоть орехи, а это реальная среда для выполнения целых сценариев, таких как SH, BASH, ZSH и т.д. Кому это полезно — в первую очередь системным администратором ))) Ведь автоматизация процессов (рутина) — это их прерогатива.

Руководство по установке Server 2019

Yndex Brouser

Итак начнем:

Какой должен быть инструмент для автоматизации работы сервера для компании:

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

В UNIX-системах в качестве инструмента автоматизации выступает стандартная оболочка (sh) или ее модификации (bash, ksh, csh и т. д.).

Комментарии

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

Константы и системные переменные:

Системные (окружение среды)

Помимо объявленных пользователем существуют встроенные (системные) переменные, которые не удаляются после завершения текущего сеанса. Делятся они на два типа, при этом данные о состоянии PowerShell хранятся в автоматических переменных, которым нельзя самостоятельно присвоить произвольные значения. К их числу относится, например, $PWD:

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

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

или

Переменные среды хранят данные, используемые операционной системой и другими программами. PowerShell создает следующие переменные среды:

  • POWERSHELL_TELEMETRY_OPTOUT
  • POWERSHELL_DISTRIBUTION_CHANNEL
  • POWERSHELL_UPDATECHECK
  • PSExecutionPolicyPreference
  • PSModulePath
  • PSModuleAnalysisCachePath
  • PSDisableModuleAnalysisCacheCleanup

Полные описания этих переменных см. в переменных среды PowerShell этой статьи.

  • PATH

    Переменная $Env:PATH среды содержит список расположений папок, которые операционная система ищет исполняемые файлы. В Windows список расположений папок разделен символом с запятой (;). На платформах, отличных от Windows, двоеточие (:) отделяет расположения папок в переменной среды.

  • PATHEXT

    Переменная $Env:PATHEXT содержит список расширений файлов, которые Windows считает исполняемыми файлами. Если файл скрипта с одним из перечисленных расширений выполняется из PowerShell, скрипт выполняется в текущем сеансе консоли или терминала. Если расширение файла не указано, скрипт запускается в новом сеансе консоли.

    Чтобы убедиться, что скрипты для другого языка сценариев выполняются в текущем сеансе консоли, добавьте расширение файла, используемое языком сценариев. Например, чтобы запустить скрипты Python в текущей консоли, добавьте .py расширение в переменную среды. Для поддержки .py расширения в виде исполняемого файла необходимо зарегистрировать расширение с помощью ftype командной оболочки CMD и assoc команд. PowerShell не имеет прямого метода регистрации обработчика файлов. Дополнительные сведения см. в документации по команде ftype .

    Скрипты PowerShell всегда начинаются в текущем сеансе консоли. Вам не нужно добавлять .ps1 расширение.

Переменные среды, в отличие от других типов переменных в PowerShell, всегда хранятся в виде строк.

Использование синтаксиса переменной

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

Например, чтобы отобразить значение переменной windir среды:

Output

В этом синтаксисе знак доллара ($) указывает переменную, а имя диска (Env:) указывает переменную среды, за которой следует имя переменной (windir).

В следующем примере создается новая переменная среды с Fooзначением Bar , а затем возвращается его значение.

Константы:

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

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

Переменные и их типы

Переменные в PowerShell — это именованные объекты. Их названия могут включать символ подчеркивания, а также буквы и числа. Перед именем всегда используется символ $, а чтобы объявить переменную, достаточно указать интерпретатору допустимое имя:

Для инициализации переменной (присвоения ей значения) применяется оператор присваивания (символ =):

Объявить переменную можно с указанием ее типа в квадратных скобках (оператор приведения типов) перед именем или значением:

Важно понимать, что переменные в PowerShell — это полноценные объекты (классы) со свойствами и методами, типы которых основаны на имеющихся в .NET Core. Перечислим основные:

Тип (класс .NET) Описание Пример кода
[string]
System.String
строка Unicode  $test = «тест»
$test = ‘тест’
[char]
System.Char
символ Unicode (16 бит) [char]$test = ‘c’
[bool]
System.Boolean
булевский тип (логическое значение True или False) [bool]$test = $true
[int]
System.Int32
тридцатидвухразрядное целое число (32 бита) [int]$test = 123456789
[long]
System.Int64
шестидесятичетырехразрядное целое число (64 бита) [long]$test = 12345678910
[single]
System.Single
число с плавающей точкой длиною в 32 бита [single]$test = 12345.6789
[double]
System.Double
число с плавающей точкой длиною в 64 бита (8 байт) [double]$test = 123456789.101112
[decimal]
System.Decimal
число с плавающей точкой длиною в 128 бит (обязательно указывать d на конце) [decimal]$test = 12345.6789d
[DateTime]
System.DateTime
дата и время  $test = Get-Date
[array]
System.Object[]
массив, индекс элементов которого начинается с 0 $test_array = 1, 2, «тест», 3, 4
[hashtable]
System.Collections.Hashtable
хэш-таблицы — ассоциативные массивы с именованными ключами, построенные по принципу: @{ключ = «значение»} $test_hashtable = @{one=«один»; two=«два»; three=«три»}

PowerShell поддерживает неявное преобразование типов, кроме того тип переменной может меняться на ходу (например, при помощи оператора присваивания), если он не указан принудительно — в этом случае интерпретатор выдаст ошибку. Определить тип переменной из предыдущего примера можно при помощи вызова метода GetType():

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

Для просмотра объявленных переменных и их значений можно использовать специальный командлет:

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

Вот пример объявления переменных:

 

 

 

 

 

 

 

 

 

 

Синтаксис для определения констант

Чтобы определить константу в PowerShell, используется командлет New-Variable с параметром -Option, установленным в значение Constant. Вот основной синтаксис, который вы можете использовать:

Создание переменных

В самом простом варианте для создания новой переменной достаточно ввести в консоли ее допустимое имя. Имя переменной всегда начинается со знака $ и может содержать любые буквы и цифры, а также знак подчеркивания. К примеру, команда $var создаст переменную с именем $var. Однако созданная таким образом переменная не имеет значения. Создать переменную и присвоить ей какое-либо значение можно одним действием, например:

или

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *