Chapter 1 — getting started with powershell

Циклы в PowerShell

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

В Windows PowerShell есть несколько разновидностей циклов, а именно:

  • WHILE
  • DO WHILE
  • DO UNTIL
  • FOR
  • FOREACH

Цикл WHILE

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

 
   $TestVar = 1
   #Пока $TestVar меньше 10 цикл будет выполняться
   WHILE ($TestVar -lt 10){
      Write-Host $TestVar 
      $TestVar = $TestVar + 1 #Увеличиваем переменную на 1
   }

Цикл DO WHILE

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

 
   $TestVar = 1
   #Пока $TestVar меньше 10 цикл будет выполняться
   DO {
      Write-Host $TestVar
      $TestVar = $TestVar + 1 #Увеличиваем переменную на 1
   }
   WHILE ($TestVar -lt 10) #$TestVar < 10

Цикл DO UNTIL

Если цикл DO WHILE выполняется пока условие истина, то DO UNTIL выполняется пока условие ложно.

 
   $TestVar = 1
   #Когда $TestVar станет больше 10, цикл прекратится
   DO {
      Write-Host $TestVar
      $TestVar = $TestVar + 1 #Увеличиваем переменную на 1
   }
   UNTIL ($TestVar -gt 10) #$TestVar > 10

Цикл FOR

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

 
   #Пока $TestVar меньше 10 цикл будет выполняться
   FOR ($TestVar = 1; $TestVar -lt 10; $TestVar++){
       Write-Host $TestVar
   }

Перебор FOREACH

Это разновидность цикла, при которой происходит перебор элементов коллекции. В примере ниже мы сохраняем результат командлета Get-Service (т.е. список служб), а затем с помощь перебора FOREACH выводим название службы и ее статус.

 
   $TMPService = Get-Service
   FOREACH ($Service In $TMPService){
      $Service.Name + " - " + $Service.Status
 }

Запуск удаленного сеанса с помощью подсистемы Windows PowerShell 2.0How to start a remote session with the Windows PowerShell 2.0 Engine

Чтобы запустить подсистему Windows PowerShell 2.0 в удаленном сеансе, создайте конфигурацию сеанса (которая также называется конечной точкой) на удаленном компьютере, которая загружает подсистему Windows PowerShell 2.0.To run the Windows PowerShell 2.0 Engine in a remote session, create a session configuration (also known as an endpoint) on the remote computer that loads the Windows PowerShell 2.0 Engine. Конфигурация сеанса сохраняется на удаленном компьютере; любой авторизованный пользователь может использовать ее для создания сеансов на основе Windows PowerShell 2.0.The session configuration is saved on the remote computer and can be used by any authorized user to create sessions that use the Windows PowerShell 2.0 Engine.

Это сложная задача, которая обычно выполняется системным администратором.This is an advanced task that is typically performed by a system administrator.

Следующая процедура использует параметр PSVersion командлета Register-PSSessionConfiguration для создания конфигурации сеанса с подсистемой Windows PowerShell 2.0.The following procedure uses the PSVersion parameter of the Register-PSSessionConfiguration cmdlet to create a session configuration that uses the Windows PowerShell 2.0 Engine. Можно также использовать параметр PowerShellVersion командлета New-PSSessionConfigurationFile, чтобы создать файл конфигурации для сеанса, который загружает подсистему Windows PowerShell 2.0, и параметр PSVersion командлета Set-PSSessionConfiguration, чтобы изменить конфигурацию сеанса для использования подсистемы Windows PowerShell 2.0.You can also use the PowerShellVersion parameter of the New-PSSessionConfigurationFile cmdlet to create a session configuration file for a session that loads the Windows PowerShell 2.0 Engine and you can use the PSVersion parameter of the Set-PSSessionConfiguration parameter to change a session configuration to use the Windows PowerShell 2.0 Engine.

Дополнительные сведения о файлах конфигураций сеансов см. в разделе about_Session_Configuration_Files.For more information about session configuration files, see about_Session_Configuration_Files.
Дополнительные сведения о конфигурациях сеансов см. в разделе about_Session_Configurations.For information about session configurations, including setup and security, see about_Session_Configurations.

Установка и включение требуемых программInstalling and Enabling Required Programs

Перед запуском подсистемы Windows PowerShell 2.0 включите подсистему Windows PowerShell 2.0 и Microsoft .NET Framework 3.5 с пакетом обновления 1.Before starting the Windows PowerShell 2.0 Engine, enable the Windows PowerShell 2.0 Engine and Microsoft .NET Framework 3.5 with Service Pack 1. Инструкции см. в статье Установка Windows PowerShell.For instructions, see Installing Windows PowerShell.

Системы, где установлена Windows Management Framework 3.0 или более поздние версии, имеют все необходимые компоненты.Systems on which Windows Management Framework 3.0 or higher is installed have all of the required components. Никакая дополнительная настройка не требуется.No further configuration is necessary. Дополнительные сведения об установке Windows Management Framework см. в статье Установка и настройка WMF.For information about installing Windows Management Framework, see Install and configure WMF.

Обновление существующей версии Windows PowerShellUpgrading existing Windows PowerShell

В пакет установки для PowerShell входит установщик WMF.The installation package for PowerShell comes inside a WMF installer. Версия установщика WMF совпадает с версией PowerShell. Для Windows PowerShell нет отдельного установщика.The version of the WMF installer matches the version of PowerShell; there’s no stand alone installer for Windows PowerShell.

Если вам нужно обновить существующую версию PowerShell, в Windows используйте следующую таблицу, чтобы найти установщик для нужной версии PowerShell.If you need to update your existing version of PowerShell, in Windows, use the following table to locate the installer for the version of PowerShell you want to update to.

WindowsWindows PS 3.0PS 3.0 PS 4.0PS 4.0 PS 5.0PS 5.0 PS 5.1PS 5.1
Windows 10 (см. примечание 1)Windows 10 (see Note1)Windows Server 2016Windows Server 2016 установленоinstalled
Windows 8.1Windows 8.1Windows Server 2012 R2Windows Server 2012 R2 установленоinstalled WMF 5.0WMF 5.0 WMF 5.1WMF 5.1
Windows 8Windows 8Windows Server 2012Windows Server 2012 установленоinstalled WMF 4.0WMF 4.0 WMF 5.0WMF 5.0 WMF 5.1WMF 5.1
Windows 7 с пакетом обновления 1 (SP1)Windows 7 SP1Windows Server 2008 R2 с пакетом обновления 1 (SP1)Windows Server 2008 R2 SP1 WMF 3.0WMF 3.0 WMF 4.0WMF 4.0 WMF 5.0WMF 5.0 WMF 5.1WMF 5.1

Примечание

Если в начальном выпуске Windows 10 включены автоматические обновления, PowerShell обновляется с версии 5.0 до 5.1.On the initial release of Windows 10, with automatic updates enabled, PowerShell gets updated from version 5.0 to 5.1. Если оригинальная версия Windows 10 не обновлена в Центре обновления Windows, версия PowerShell будет 5.0.If the original version of Windows 10 is not updated through Windows Updates, the version of PowerShell is 5.0.

Поиск PowerShell в Windows 10, 8.1, 8.0 и 7Finding PowerShell in Windows 10, 8.1, 8.0, and 7

Иногда найти консоль или ISE (интегрированную среду сценариев) PowerShell в Windows бывает непросто, так как их расположение в разных версиях Windows отличается.Sometimes locating PowerShell console or ISE (Integrated Scripting Environment) in Windows can be difficult, as its location moves from one version of Windows to the next.

Следующие таблицы помогут найти PowerShell в вашей версии Windows.The following tables should help you find PowerShell in your Windows version. Все указанные версии являются оригинальными, сразу после выпуска и без обновлений.All versions listed here are the original version, as released, with no updates.

КонсольFor Console

ВерсияVersion LocationLocation
Windows 10Windows 10 Щелкните значок Windows в левом нижнем углу и начните вводить PowerShell.Click left lower corner Windows icon, start typing PowerShell
Windows 8.1, 8.0Windows 8.1, 8.0 На начальном экране начните вводить PowerShell.On the start screen, start typing PowerShell.Если вы находитесь на рабочем столе, щелкните значок Windows в левом нижнем углу и начните вводить PowerShell.If on desktop, click left lower corner Windows icon, start typing PowerShell
Windows 7 с пакетом обновления 1 (SP1)Windows 7 SP1 Щелкните значок Windows в левом нижнем углу и в поле поиска начните вводить PowerShell.Click left lower corner Windows icon, on the search box start typing PowerShell

ISEFor ISE

ВерсияVersion LocationLocation
Windows 10Windows 10 Щелкните значок Windows в левом нижнем углу и начните вводить ISE.Click left lower corner Windows icon, start typing ISE
Windows 8.1, 8.0Windows 8.1, 8.0 На начальном экране введите PowerShell ISE.On the start screen, type PowerShell ISE.Если вы находитесь на рабочем столе, щелкните значок Windows в левом нижнем углу и введите PowerShell ISE.If on desktop, click left lower corner Windows icon, type PowerShell ISE
Windows 7 с пакетом обновления 1 (SP1)Windows 7 SP1 Щелкните значок Windows в левом нижнем углу и в поле поиска начните вводить PowerShell.Click left lower corner Windows icon, on the search box start typing PowerShell

Обработка ошибок в Windows PowerShell

Для отслеживания и перехвата ошибок в Windows PowerShell есть механизм Try…Catch. Он представляет собой конструкцию, при которой Вы весь код, в котором может возникнуть исключительная ситуация (ошибка), помещаете в блок Try. В блоке Catch Вы пишите код, который должен выполниться при возникновении ошибки. Если ошибок не было, то блок Catch просто не выполнятся.

В примере ниже мы хотим защитить себя от ситуаций, когда пользователь может ввести какое-нибудь непонятное число, например 0 (или вообще текст), а как Вы знаете делить на ноль нельзя. Поэтому тот код, в котором может возникнуть такая ситуация мы поместили в блок Try. В блоке catch мы выводим короткое, понятное предупреждение пользователю.

 
   Try {
    
      $Number = Read-Host "Введите число"
      10 / $Number

   } catch {

     Write-Warning "Некорректное число"

   }

Вот мы с Вами и рассмотрели основы программирования на языке PowerShell, надеюсь, материал был Вам полезен, пока!

Нравится3Не нравится

Прекращение поддержки и соображения безопасностиDeprecation and security concerns

Поддержка Windows PowerShell 2.0 была прекращена в августе 2017 г.Windows PowerShell 2.0 was deprecated in August, 2017. Дополнительные сведения см. в объявлении в блоге, посвященном PowerShell.For more information, see the announcement on the PowerShell blog.

В Windows PowerShell 2.0 отсутствует целый ряд функций усиления защиты и обеспечения безопасности, добавленных в версии 3, 4 и 5.Windows PowerShell 2.0 is missing a significant amount of the hardening and security features added in versions 3, 4, and 5. Настоятельно рекомендуется не использовать эту версию продукта.We highly, highly recommend that users not use it if they can help it. Дополнительные сведения см. A Comparison of Shell and Scripting Language Security и в этой записи блога.For more information, see A Comparison of Shell and Scripting Language Security and PowerShell the Blue Team.

Массивы в PowerShell

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

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

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

 
   #Создаем массив
   $Array = 1, 3, "Пример", 7, 9
   #Выводим 3 элемент массива
   $Array

Пример создания строго типизированного массива.

 
   #Создаем массив
   ]$Array = 1, 3, 5, 7, 9
   #Выводим 3 элемент массива
   $Array

Пример перебора элементов массива.

   
   #Создаем массив
   ]$Array = 1, 3, 5, 7, 9
   #Циклом for перебираем массив. $Array.count - это количество элементов массива
   FOR ($i = 0; $i -lt $Array.count; $i++){
      $Array
   }

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

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

Adblock
detector