Powershell else if: If ( ) … elseif ( ) … else { } — PowerShell

Книга «PowerShell для сисадминов» / Хабр

Привет, Хаброжители! PowerShell — это одновременно язык сценариев и командная оболочка, которая позволяет управлять системой и автоматизировать практически любую задачу. В книге «PowerShell для сисадминов» обладатель Microsoft MVP Адам Бертрам aka «the Automator» покажет, как использовать PowerShell так, чтобы у читателя наконец-то появилось время на игрушки, йогу и котиков. Вы научитесь: -Комбинировать команды, управлять потоком выполнения, обрабатывать ошибки, писать сценарии, запускать их удаленно и тестировать их с помощью фреймворка тестирования Pester. -Анализировать структурированные данные, такие как XML и JSON, работать с популярными сервисами (например Active Directory, Azure и Amazon Web Services), создавать системы мониторинга серверов. -Создавать и проектировать модули PowerShell. -Использовать PowerShell для удобной, полностью автоматизированной установки Windows. -Создавать лес Active Directory, имея лишь узел Hyper-V и несколько ISO-файлов. -Создавать бесчисленные веб- и SQL-серверы с помощью всего нескольких строк кода! Реальные примеры помогают преодолеть разрыв между теорией и работой в настоящей системе, а легкий авторский юмор упрощает чтение. Перестаньте полагаться на дорогое ПО и невнятные советы из сети!

Для кого эта книга

Эта книга предназначена для ИТ-специалистов и системных администраторов, которым надоело постоянно использовать один и тот же интерфейс и выполнять одну и ту же задачу в пятисотый раз за этот год. Также она будет полезна для инженеров DevOps, которые испытывают затруднения с автоматизацией новых серверных сред, выполнением автоматических тестов или автоматизацией конвейера непрерывной интеграции / непрерывной доставки (CI/CD).

Не получится назвать отрасль, для которой PowerShell был бы полезен больше всего. Традиционная должность пользователя PowerShell в «магазине Windows» — системный администратор Microsoft, однако PowerShell хорошо вписывается в набор инструментов любого сотрудника в сфере ИТ. Если вы работаете в ИТ, но не считаете себя разработчиком, эта книга для вас.

Поток управления


Немного повторим. В главе 3 мы узнали, как можно комбинировать команды с помощью конвейера и внешних сценариев. В главе 2 рассмотрели переменные и как их использовать для хранения значений. Одним из основных преимуществ работы с переменными является возможность писать с их помощью код, который работает не со значением, а со «смыслом». Вместо того чтобы работать, например, с числом 3, вы будете работать с общим понятием $serverCount. За счет этого вы можете писать код, который работает одинаково, будь у вас один, два или тысяча серверов. Совместите эту способность с возможностью сохранять код в сценариях, которые можно запускать на разных компьютерах, и вы сможете начать решать задачи гораздо большего масштаба.

Однако в жизни порой имеет значение, работаете ли вы с одним сервером, с двумя или с тысячей. Пока что у вас нет подходящего способа учитывать это, и ваши сценарии работают просто «сверху вниз», не имея возможности адаптироваться в зависимости от определенных значений. В этой главе мы будем использовать поток управления и условную логику для написания сценариев, которые будут выполнять различные команды в зависимости от значений, с которыми они работают. К концу главы вы узнаете, как использовать операторы if/then и switch, а также различные циклы, чтобы придать вашему коду столь необходимую гибкость.

Немного о потоке управления

Мы напишем сценарий, который считывает содержимое файла, хранящегося на нескольких удаленных компьютерах. Чтобы продолжить работу, загрузите файл под названием App_configuration.txt из прилагаемых к книге материалов по ссылке github.com/adbertram/PowerShellForSysadmins/ и поместите его в корень диска C:\ на нескольких удаленных компьютерах. Если у вас нет удаленных компьютеров, пока просто продолжайте читать. В этом примере я буду использовать серверы с именами SRV1, SRV2, SRV3, SRV4 и SRV5.

Чтобы получить доступ к содержимому файла, воспользуемся командой Get-Content и укажем путь к файлу в значении аргумента параметра Path, как показано ниже:

Get-Content -Path «\\servername\c$\App_configuration. txt»

Для начала сохраним все имена наших серверов в массиве и запустим эту команду для каждого сервера. Откройте новый файл .ps1 и введите в него код из листинга 4.1.

Листинг 4.1. Извлечение содержимого файла с нескольких серверов

$servers = @('SRV1','SRV2','SRV3','SRV4','SRV5')
Get-Content -Path "\\$($servers[0])\c$\App_configuration.txt"
Get-Content -Path "\\$($servers[1])\c$\App_configuration.txt"
Get-Content -Path "\\$($servers[2])\c$\App_configuration.txt"
Get-Content -Path "\\$($servers[3])\c$\App_configuration.txt"
Get-Content -Path "\\$($servers[4])\c$\App_configuration.txt"


Теоретически, этот код должен работать без проблем. Но в этом примере предполагается, что у вас что-то идет не так. Что делать, если сервер SRV2 не работает? А если кто-то забыл положить App_configuration.txt на SRV4? А может, кто-то изменил путь к файлу? Вы можете написать отдельный сценарий для каждого сервера, но это решение не будет масштабироваться, особенно когда вы начнете добавлять все больше и больше серверов. Вам нужен код, который будет работать в зависимости от ситуации.

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

Мы начнем с рассмотрения самого простого типа потока управления — условного оператора.

Использование условных операторов

В главе 2 мы узнали, что существуют логические значения: истина и ложь. Логические значения позволяют создавать условные операторы, которые ставят задачу PowerShell выполнить определенный блок кода в зависимости от того, имеет ли выражение (называемое условием) значение True или False. Условие — это вопрос с вариантами ответов да/нет. У вас больше пяти серверов? Работает ли сервер 3? Существует ли путь к файлу? Чтобы начать использовать условные операторы, давайте посмотрим, как преобразовать такие вопросы в выражения.

Построение выражений с помощью операторов

Логические выражения можно писать с помощью операторов сравнения, которые сравнивают значения. Чтобы использовать оператор сравнения, нужно поместить его между двумя значениями, например:

PS> 1 –eq 1
True


В этом случае оператор –eq позволяет определить равнозначность двух значений.

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

-eq сравнивает два значения и возвращает True, если они равны.

-ne сравнивает два значения и возвращает True, если они не равны.

-gt сравнивает два значения и возвращает True, если первое больше второго.

-ge сравнивает два значения и возвращает True, если первое больше или равно второму.

-lt сравнивает два значения и возвращает True, если первое меньше второго.

-le сравнивает два значения и возвращает True, если первое меньше или равно второму.

-contains возвращает True, если второе значение является частью первого. Например, этот оператор позволяет определить, находится ли значение внутри массива.

В PowerShell есть и более продвинутые операторы сравнения. Здесь мы не будем на них останавливаться, но я рекомендую вам почитать о них в документации Microsoft по ссылке docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators или в разделе справки PowerShell (см. главу 1).

Вы можете использовать приведенные выше операторы для сравнения переменных и значений. Но выражение не обязательно должно быть сравнением. Иногда команды PowerShell можно использовать как условия. В предыдущем примере мы хотели узнать доступность сервера. С помощью командлета Test-Connection можно проверить наличие связи с сервером. Обычно в выходных данных командлета Test-Connection содержится много разной информации, но с помощью параметра Quiet вы можете заставить команду вернуть True или False, а с помощью параметра Count можно ограничить тест одной попыткой.

PS> Test-Connection -ComputerName offlineserver -Quiet -Count 1
False
PS> Test-Connection -ComputerName onlineserver -Quiet -Count 1
True


Чтобы узнать, отключен ли сервер, вы можете использовать оператор –not для преобразования выражения в противоположное:

PS> -not (Test-Connection -ComputerName offlineserver -Quiet -Count 1)
True


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

Оператор if

Оператор if работает просто: если выражение X истинно, то сделайте Y. Вот и все!

Чтобы использовать оператор в выражении, пишется ключевое слово if, за которым следуют круглые скобки, содержащие условие. После выражения следует блок кода, выделенный фигурными скобками. PowerShell выполнит этот блок кода только в том случае, если это выражение будет иметь значение True. Если выражение if имеет значение False либо вообще ничего не возвращает, блок кода не будет выполнен. Синтаксис оператора if/then показан в листинге 4.2.

Листинг 4.2. Синтаксис оператора if

if (условие) {
   # выполняемый код, если условие истинно
}


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

Теперь давайте еще раз посмотрим на код, показанный в листинге 4.1. Я расскажу вам о том, как использовать оператор if, чтобы не пытаться достучаться до неработающего сервера. В предыдущем разделе мы уже видели, что команду Test-Connection можно использовать в качестве выражения, которое возвращает True или False, поэтому сейчас давайте упакуем Test-Connection в оператор if, а затем воспользуемся командой Get-Content, чтобы не пытаться обращаться к неработающему серверу. Сейчас мы поменяем код только для первого сервера, как показано в листинге 4.3.

Листинг 4.3. Использование оператора if для выборочного обращения

$servers = @('SRV1','SRV2','SRV3','SRV4','SRV5')
if (Test-Connection -ComputerName $servers[0] -Quiet -Count 1) {
   Get-Content -Path "\\$($servers[0])\c$\App_configuration.txt"
}
Get-Content -Path "\\$($servers[1])\c$\App_configuration.txt"
--пропуск--


Поскольку у вас есть Get-Content в операторе if, вы не столкнетесь с какими-либо ошибками, если попытаетесь получить доступ к неработающему серверу; если тест завершится неудачно, ваш сценарий будет знать, что не следует пытаться считать файл. Код попытается получить доступ к серверу, только если он уже знает, что тот включен. Но обратите внимание, что этот код срабатывает только в том случае, если условие истинно. Достаточно часто вам нужно будет задать одно поведение сценария для истинного условия и другое для ложного. В следующем разделе вы увидите, как определить поведение для ложного условия с помощью оператора else.

Оператор else

Чтобы предоставить вашему оператору if альтернативу, можно использовать ключевое слово else после закрывающей скобки блока if, за которым будет следовать еще одна пара фигурных скобок, содержащая блок кода. Как показано в листинге 4.4, мы будем использовать оператор else, чтобы вернуть в консоль ошибку, если первый сервер не отвечает.

Листинг 4.4. Использование оператора else для запуска кода, если условие

не истинно

if (Test-Connection -ComputerName $servers[0] -Quiet -Count 1) {
   Get-Content -Path "\\$($servers[0])\c$\App_configuration.txt"
} else {
   Write-Error -Message "The server $($servers[0]) is not responding!"
}


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

Оператор elseif

Оператор else охватывает противоположную ситуацию: если if не срабатывает, значит, выполните это в любом случае. Такой подход работает для двоичных условий, то есть когда сервер либо работает, либо нет. Но иногда приходится иметь дело с большим числом вариантов. Например, предположим, что у вас есть сервер, на котором нет нужного вам файла, и вы сохранили имя этого сервера в переменной $problemServer (добавьте в свой сценарий эту строку кода!). Это означает, что вам нужна дополнительная проверка, позволяющая узнать, является ли сервер, который вы опрашиваете в данный момент, проблемным. Это можно реализовать с помощью вложенных операторов if, как показано в коде ниже:

if (Test-Connection -ComputerName $servers[0] -Quiet -Count 1) {
   if ($servers[0] –eq $problemServer) {
      Write-Error -Message "The server $servers[0] does not have the right
         file!"
   } else {
      Get-Content -Path "\\$servers[0]\c$\App_configuration.txt"
   }
} else {
   Write-Error -Message "The server $servers[0] is not responding!"
}
--пропуск--


Но есть и более аккуратный способ реализовать ту же логику — с помощью оператора elseif, который позволяет вам проверить дополнительное условие, перед тем как вернуться к коду в блоке else. Синтаксис блока elseif идентичен синтаксису блока if. Итак, чтобы проверить проблемный сервер с помощью оператора elseif, запустите код из листинга 4.5.

Листинг 4.5. Использование блока elseif

if (-not (Test-Connection -ComputerName $servers[0] -Quiet -Count 1)) { 
   Write-Error -Message "The server $servers[0] is not responding!"
} elseif ($servers[0] –eq $problemServer) 
   Write-Error -Message "The server $servers[0] does not have the right file!"
} else {
   Get-Content -Path "\\$servers[0]\c$\App_configuration.txt" 
}
--пропуск--


Обратите внимание, что мы не просто добавили оператор elseif, а заодно изменили логику кода. Теперь мы можем проверить, не находится ли сервер в автономном режиме, с помощью оператора –not. Затем, как только мы определили сетевой статус сервера, мы проверяем, является ли он проблемным. Если это не так, мы используем оператор else для запуска поведения по умолчанию — извлечения файла. Как видите, существует несколько способов структурировать код описанным образом. Важно то, что код работает и что он читабелен для человека со стороны, будь то ваш коллега, видящий его впервые, или вы сами спустя некоторое время после написания.

Вы можете объединить в цепочку сколько угодно операторов elseif, что позволяет учитывать самые разные сочетания обстоятельств. Однако операторы elseif являются взаимоисключающими: когда один из elseif принимает значение True, PowerShell запускает только его код и не проверяет остальные случаи. В листинге 4.5 это не вызвало никаких проблем, так как вам нужно было проверить сервер на предмет «проблемности» только после проверки работоспособности, но в дальнейшем я советую вам держать в уме эту особенность.

Операторы if, else и elseif отлично подходят для реализации ответа кода на простые вопросы типа «да/нет». В следующем разделе вы узнаете, как работать с более сложной логикой.

Оператор switch

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

Обратите внимание, что теперь мы будем работать с другим типом условия. Если раньше нам нужны были ответы на вопросы типа «да/нет», то теперь мы хотим получить конкретное значение одной вещи. Это сервер SRV1? SRV2? И так далее. Если бы вы работали только с одним или двумя конкретными значениями, оператор if подошел бы, но в данном случае оператор switch сработает гораздо лучше.

Оператор switch позволяет выполнять различные фрагменты кода в зависимости от некоторого значения. Он состоит из ключевого слова switch, за которым следует выражение в скобках. Внутри блока switch находится серия операторов, построенных по следующему принципу: сначала указывается значение, за ним следует набор фигурных скобок, содержащих блок кода, и наконец ставится блок default, как указано в листинге 4.6.

Листинг 4.6. Шаблон для оператора switch

switch (выражение) {
   значениевыражения {
      # Код
   }
   значениевыражения {
   }
   default {
     # Код, который выполняется при отсутствии совпадений
   }
}


Оператор switch может содержать практически неограниченное количество значений. Если выражение оценивается как значение, выполняется соответствующий код внутри блока. Важно то, что, в отличие от elseif, после выполнения одного блока кода PowerShell продолжит проверять и остальные условия, если не указано иное. Если ни одно из значений не подойдет, PowerShell выполнит код, указанный в блоке default. Чтобы прекратить перебор условий в операторе switch, используйте ключевое слово break в конце блока кода, как показано в листинге 4.7.

Листинг 4.7. Использование ключевого слова break в операторе switch

switch (выражение) {
   значениевыражения {
      # Код
      break
   }
--пропуск--


Ключевое слово break позволяет сделать условия в операторе switch взаимоисключающими. Вернемся к нашему примеру с пятью серверами и одним и тем же файлом, имеющим разные пути. Вы знаете, что сервер, с которым вы работаете, может иметь только одно значение (то есть он не может одновременно называться и SRV1, и SRV2), поэтому вам нужно использовать операторы break. Ваш сценарий должен выглядеть примерно так, как показано в листинге 4.8.

Листинг 4.8. Проверка различных серверов с помощью оператора switch

$currentServer = $servers[0]
switch ($currentServer) {
   $servers[0] {
      # Check if server is online and get content at SRV1 path.
      break
   }
   $servers[1] {
      ## Check if server is online and get content at SRV2 path.
      break
   }
   $servers[2] {
      ## Check if server is online and get content at SRV3 path.
      break
   }
--пропуск--


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

Использование циклов

Существует хорошее практическое правило для работы за компьютером: не повторяйся (don’t repeat yourself, DRY). Если вы обнаружите, что выполняете одну и ту же работу, то, скорее всего, существует способ ее автоматизировать. То же самое и с написанием кода: если вы используете одни и те же строки снова и снова, вероятно, существует решение получше.

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

PowerShell предлагает пять типов циклов: foreach, for, do/while, do/until и while. В этом разделе мы обсудим каждый тип цикла, отметим их уникальные черты и выделим лучшие ситуации для их использования.

Об авторе

Адам Бертрам (Adam Bertram) — опытный ИТ-специалист и эксперт в области интернет-бизнеса с 20-летним стажем. Предприниматель, ИТ-инфлюенсер, специалист Microsoft MVP, блогер, тренинг-менеджер и автор материалов по контент-маркетингу, сотрудничающий со многими ИТ-компаниями. Также Адам основал популярную платформу TechSnips для развития навыков ИТ-специалистов (techsnips.io).

Более подробно с книгой можно ознакомиться на сайте издательства

» Оглавление

» Отрывок

Для Хаброжителей скидка 25% по купону — PowerShell

По факту оплаты бумажной версии книги на e-mail высылается электронная книга.

Основы PowerShell: Оператор If (If, Else & Elseif)

Экспортировано в 11 ноября 2021 г. 12:13:43

Имя Тип Справочник по скрипту Значение по умолчанию Комментарий
Настроить узел Windows-сервер attuneNode Это узел настройки
Учетные данные узла Attune Учетные данные ОС Windows attuneNodeCredentials Это мои учетные данные узла Attune

Сведения о подключении изменились по сравнению с последним шагом.

Войти как пользователь
{Учетные данные узла Attune}
на узле
{Настроить узел}

  1. Подключиться через RDP
     mstsc /admin /v: узел Attune 
  2. Войти как пользователь {Учетные данные узла Attune}
  3. Затем откройте командную строку

Это
Сценарий PowerShell
убедитесь, что вы запускаете его с
powershell.exe
Нажмите меню «Пуск», введите «powershell» в строке поиска, затем выберите программу powerell

 #Region IF.
#===========================================================================
# Создает переменную "A" и присваивает ей числовое значение 5.
$А = 5
# Это блок операторов if, который проверяет, больше ли значение переменной A 3.
если ($A-gt 3) {
    # Если условие выполнено, текст перед CMDLET (Write-Host) будет напечатан на экране. 
    # Это печать на экран CMDLET [Write-Host].
    Write-Host "Значение $A больше 3."
}
#===========================================================================
#КонецОбласти, ЕСЛИ 

Войти как пользователь
{Учетные данные узла Attune}
на узле
{Настроить узел}

  1. Подключиться через RDP
     mstsc /admin /v: узел Attune 
  2. Войти как пользователь {Учетные данные узла Attune}
  3. Затем откройте командную строку

Это
Сценарий PowerShell
убедитесь, что вы запускаете его с
powershell.exe
Нажмите меню «Пуск», введите «powershell» в строке поиска, затем выберите программу powersell 9.0005

 #Регион Другое
#===========================================================================
# Создает переменную "A" и присваивает ей числовое значение 3. 
$А = 3
# Это оператор IF-Else, который проверяет, больше ли значение переменной A 3.
если ($A-gt 3) {
    # Если условие выполнено, текст перед CMDLET (Write-Host) будет напечатан на экране.
    # Это печать на экран CMDLET [Write-Host].
    Write-Host "Значение $A больше 3."
}
# Это оператор else, который запускается, если не выполняется ни одно условие.
еще {
    # Если условие не выполнено, текст перед CMDLET (Write-Host) будет напечатан на экране.
    # Это печать на экран CMDLET [Write-Host].
    Write-Host ("Значение $A меньше или равно 3 или "+" не создано или не инициализировано.")
}
#===========================================================================
#КонецРегиона Еще 

Войти как пользователь
{Учетные данные узла Attune}
на узле
{Настроить узел}

  1. Подключиться через RDP
     mstsc /admin /v: узел Attune 
  2. Войти как пользователь {Учетные данные узла Attune}
  3. Затем откройте командную строку

Это
Сценарий PowerShell
убедитесь, что вы запускаете его с
powershell. exe
Нажмите меню «Пуск», введите «powershell» в строке поиска, затем выберите программу powersell 9.0005

 #Регион ИначеЕсли
#===========================================================================
# Создает переменную "A" и присваивает ей числовое значение 3.
$А = 3
# Это блок операторов if, который проверяет, больше ли значение переменной A 3.
если ($A-gt 3) {
    # Если условие выполнено, текст перед CMDLET (Write-Host) будет напечатан на экране.
    # Это печать на экран CMDLET [Write-Host].
    Write-Host "Значение $A больше 3."
}
# Это блок операторов ElseIF, который проверяет, равно ли значение переменной A 3.
elseif ($A -eq 3) {
    # Если условие выполнено, текст перед CMDLET (Write-Host) будет напечатан на экране.
    # Это печать на экран CMDLET [Write-Host].
    Write-Host "Значение $A равно 3."
}
# Это блок операторов else, который запускается, если ни одно из вышеперечисленных условий не выполняется.
еще {
    # Если ни одно из вышеперечисленных условий не выполняется, текст перед CMDLET (Write-Host) будет напечатан на экране. 
    # Это печать на экран CMDLET [Write-Host].
    Write-Host ("Значение $A меньше 3 или" + " не было создано или инициализировано.")
}
#===========================================================================
#EndRegionиначеIF 

Оператор ElseIf с примерами кода

Введение в логику PowerShell Else If

Оператор PowerShell ElseIf относится к сфере управления потоком. Как только вы освоите базовую конструкцию «Если», вы сможете расширить область действия вашего скрипта, добавив дополнительные операторы «ElseIf» к логическому элементу управления.

Темы для оператора PowerShell ElseIf

  • Начните с простого оператора If
  • Пример 1. Обычный PowerShell If
  • Пример 2. PowerShell ElseIf
  • Пример 3. PowerShell ElseIf и Plain Else
  • Пример 4. Проверка того, установлена ​​ли служба и работает ли она
  • Краткое изложение построения ElseIf в PowerShell

Начните с простого утверждения «если»

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

Кстати, обратите внимание, что PowerShell использует разные типы скобок для каждого компонента, (круглые скобки относятся к первой части, а именно к условию), а {скобки относятся к блок-команде}.
If (условие) {команда блока}
Вот другое объяснение той же конструкции If:
If (проверка) {выполнять, когда истинно} истинность тестового выражения.

Пример 1: Обычная PowerShell «Если»

# Простой PowerShell, если пример
$Число = 10
if ($Number -gt 0) {"$Number больше нуля"}
 

Очки обучения

Примечание 1:  Разделите оператор If на два компонента: если (проверить) и {что делать}, затем изучите каждый компонент конструкции PowerShell.

Примечание 2:   Избегайте чрезмерных размышлений; помните, что в операторе PowerShell «если» нет «тогда». Кстати, для тех, кто знаком с VBScript, в PowerShell нет endif.

Пример 2: PowerShell ElseIf

Давайте расширим мой тривиальный пример If, введя оператор ElseIf. Между прочим, хотя ElseIf не чувствителен к регистру, он выделяет два слова «иначе» и «если».

# Простой пример PowerShell ElseIf
$Число = -10
If ($Number -gt 0) {"$Number больше нуля"}
ElseIf ($Number -lt 0) {"$Number отрицательно"}
 

Примечание 3. Обязательно проверяйте логику каждой строки, -gt – это способ PowerShell сказать «больше чем», а -lt означает «меньше чем».

Else If в PowerShell

В этом примере я не могу заставить Else If работать; я обнаружил, что когда между Else и If есть пробел, PowerShell выдает ошибку. Что происходит, так это то, что я получаю сообщение от PowerShell: «Отсутствует оператор блока».

Парень рекомендует: Бесплатный монитор WMI для PowerShell

(БЕСПЛАТНЫЙ ИНСТРУМЕНТ)

Инструментарий управления Windows (WMI) — одно из скрытых сокровищ операционных систем Microsoft. К счастью, SolarWinds создали Бесплатный монитор WMI для PowerShell , чтобы вы могли обнаружить эти жемчужины информации о производительности и, таким образом, улучшить свои сценарии PowerShell.

Избавьтесь от догадок, какие счетчики WMI следует использовать при написании сценариев для операционной системы, Active Directory или Exchange Server. Попробуйте этот монитор WMI — это бесплатно.

WMI-монитор SolarWinds
Скачать 100% бесплатный инструмент

Пример 3: PowerShell ElseIf и Plain Else

Рекомендуется добавить последний оператор Else. Этот универсал проверит все, что ускользает от вашей логики ElseIf. Например, что, если значение $Number равно нулю?

# Простой пример PowerShell ElseIf
$Число = -10 +10
если ($Number -gt 0) {
"$Число больше нуля"
}
ElseIf ($Число -lt 0) {
"$Число отрицательное"
}
Еще {
«Похоже, это число равно нулю»
}
 

Пример 4. Проверка того, установлена ​​ли служба и работает ли она

Вот реальный пример сценария PowerShell ElseIf, в котором используется свойство Display службы диспетчера очереди Windows.

# Скрипт PowerShell для проверки работы службы очереди печати
Clear-Host
$SrvName = "Диспетчер очереди печати"
$Service = Get-Service -display $SrvName -ErrorAction SilentlyContinue
if (-Not $Service) {$SrvName + " не установлен на этом компьютере."}
  ElseIf  ($Service.Status -eq «Выполняется») {$SrvName + «работает». }
  ElseIf  ($Service.Status -eq «Остановлено») {$SrvName + «не работает». }
Else {"Парень сбит с толку"}
 

Примечание 4:  В дополнение к этому последнему «иначе» в этом примере используется несколько условных тестов ElseIf, однако для сценариев, которым требуется еще более сложная логика, я предпочитаю «параметр переключения PowerShell».

Примечание 5:   Подробнее о -ErrorAction SilentlyContinue

Изучение логики PowerShell Else If

Дополнительные сведения об использовании этой логической конструкции см. во встроенном в PowerShell файле About_IF

. 
Get-Help About_If
 

Например, файл About_If напоминает нам о том, что если тест верен, то после выполнения {Statement} PowerShell завершает работу. Однако, если тест окажется ложным, PowerShell переходит к следующему тесту.

Получить дополнительную справку по PowerShell о файлах »

Парень рекомендует: Монитор производительности сети

(БЕСПЛАТНАЯ ПРОБНАЯ ВЕРСИЯ)

Монитор производительности сети SolarWinds ( NPM) поможет вам узнать, что происходит в вашей сети. Эта утилита также поможет вам устранить неполадки; на приборной панели будет указано, является ли основная причина неработающей связью, неисправным оборудованием или перегрузкой ресурсов.

Что мне больше всего нравится, так это то, как NPM предлагает решения сетевых проблем. Он также имеет возможность отслеживать работоспособность отдельных виртуальных машин VMware. Если вы заинтересованы в устранении неполадок и создании сетевых карт, я рекомендую вам попробовать NPM в рамках 30-дневной бесплатной пробной версии.

Монитор производительности сети SolarWinds
Скачать 30-дневную БЕСПЛАТНУЮ пробную версию

Пример 5: PowerShell ElseIf проверяет файл справки

В этом примере есть важная задача — проверить, что у нас есть имя фактического файла. Помните, что за вторым (тестовым оператором) следует второй {Block Script}.

# Справка по операторам PowerShell ElseIf
Clear-Host
$File = Get-Help About_scope
  If ($File -Match "Утверждение if")  {"У нас есть правильный файл справки"}
  ElseIf  ($File.Length -lt 1) {"Проверьте имя файла и его местоположение"}
  Else  {"Файл существует, но не содержит информации об операторе If"}
 

Очки обучения

Примечание 6:   Преимущество ElseIf по сравнению с простым Else заключается в том, что мы можем ввести несколько тестов. В приведенном выше примере мы используем ElseIf, чтобы проверить, меньше ли длина файла 1. Чтобы активировать блок ElseIf, задайте для $File несуществующий файл, например
$File = Get-Help about_ifxx.

Примечание 7: Чтобы вызвать последнее «Другое», попробуйте изменить:
$File = Get-Help About_If
на
$File = Get-Help about_scope

900 03 Примечание 8:   Кроме того, см. дополнительные сведения об операторе PowerShell ElseIf на сайте Microsoft.

Парень рекомендует: Пакет администратора SolarWinds для Active Directory

(БЕСПЛАТНЫЙ ИНСТРУМЕНТ)

Импорт пользователей из электронной таблицы. Просто предоставьте список пользователей с их полями в верхней строке и сохраните как файл .csv. Затем запустите эту БЕСПЛАТНУЮ утилиту и сопоставьте свои поля с атрибутами AD, нажмите и импортируйте пользователей.

При желании вы можете указать название организационной единицы, в которой будут создаваться новые учетные записи. Загрузите БЕСПЛАТНЫЙ инструмент массового импорта.

Пакет администратора SolarWinds
Загрузите 100% БЕСПЛАТНЫЙ набор инструментов

Если вам нужно более полное программное обеспечение для анализа приложений, загрузите бесплатную пробную версию SAM (Server & Application Monitor). После команды «Если» у вас часто есть несколько операторов ElseIf с последним простым оператором «else».

Подробнее об обычном операторе Else в PowerShell »

Краткое изложение конструкции PowerShell ElseIf

Одним из старейших и одним из лучших операторов для фильтрации данных является предложение If. Тем не менее, всегда стоит освежить в памяти основной оператор «Если», прежде чем переходить к более универсальному «ИначеЕсли». Секрет понимания реализации If и ElseIf в PowerShell заключается в том, чтобы обратить пристальное внимание на скобки стиля. ElseIf (круглые скобки для проверки) и {скобки для действия}.

Если вам понравилась эта страница, поделитесь ею с друзьями


Дополнительные примеры управления потоком в Windows PowerShell

• Оператор PowerShell Continue  • Оператор PowerShell If  • PowerShell ElseIf  • PowerShell Else

• Операторы сравнения PowerShell  • PowerShell If -And  • Power Shell If -Or   • PowerShell If -Not

• Условные операторы  • Where Filter  • Реальные методы PowerShell  • PowerShell Home

Пожалуйста, напишите мне, если у вас есть лучший пример сценария.