Контроль выполнения кода при помощи оператора if PowerShell. Операторы powershell


Логические операторы и управляющие инструкции в PowerShell, часть 3

Продолжаем разбирать управляющие инструкции в Windows PowerShell. Предыдущие части статьи вы можете найти здесь и здесь.

Инструкция Switch

Инструкция Switch объединяет несколько проверок условий внутри одной конструкции. В PowerShell эта Switch обладает широкими возможностями, а именно:

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

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

$a = 2 Switch ($a) { 1 {"Один"} 2 {"Два"} 3 {"Три"} }
Инструкция Switch

Здесь значение переменной $a последовательно сравнивается с числами 1, 2 и 3. При совпадении значений, отрабатывается блок кода в фигурных скобках.

Если проверяемое значение совпадает с несколькими значениями из списка, то будет выполнен весь код.

$a = 1 Switch ($a) { 1 {"Один"} 2 {"Два"} 3 {"Три"} 1 {"И еще раз один"} }

Если нужно ограничиться только первым совпадениям, то тут нам поможет функция Break.

$a = 1 Switch ($a) { 1 {"Один"; Break} 2 {"Два"} 3 {"Три"} 1 {"И еще раз один"} }

Если ни одно соответствие не будет найдено, инструкция Switch не выполнит никаких действий.

$a = 1 Switch ($a) { 2 {"Два"} 3 {"Три"} }

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

Switch (5) { 1 {"Один"} 2 {"Два"} 3 {"Три"} Default {"Совпадений нет"} }

Нужно отметить, что сравнение происходит без учета регистра.

Если регистр всё же нужно учитывать, то сделать это при помощи параметра -CaseSensitive.

Switch -CaseSensitive ('abc') { 'abc' {"Раз"} 'ABC' {"Два"} }

Можно проверять элементы на соответствие шаблону. Для этого используется параметр -Wildcard.

Switch -Wildcard ('abc') { 'a*' {"Начинается с a"} '*c' {"Оканчивается на c"} }

Как и предыдущих примерах, проверяемому объекту соответствует переменная $_. В этом мы можем убедиться через следующий пример:

Switch -Wildcard ('abc') {

Если мы проверяем регулярные выражения, то предыдущий пример будет иметь вид:

Switch -Regex ('abc') { '^a' {"$_ начинается с a"} 'c$' {"$_ оканчивается на c"} }

Кроме проверок на простое совпадение или соответствие шаблону, PowerShell позволяет выполнять более сложные проверки, указывая вместо шаблонов блоки кода.

Switch (7) { {$_ -gt 3} {"$_ больше 3"} {$_ -lt 10} {"$_ меньше 10"} 7 {"$_ равно 7"} }

Язык PowerShell допускает использование в качестве проверяемых значений массивов элементов. При этом массивы могут быть заданы явно или использованы путём считывания строк из текстового файла.

Switch -Wildcard (dir $env:SystemRoot) { *.txt {$txt++} *.log {$log++} }

В данном случае мы просматриваем файлы системного каталога при помощи dir $env:SystemRoot. Отбираются файлы с расширением .txt и .log. Количество этих файлов суммируется и выводится по команде «txt-файлы: $txt log-файлы: $log».

Для использования в качестве массива строк из определённого файла нужно указать параметр -File и путь к этому файлу.

Итак, пусть в системном каталоге есть файл DPINST.LOG, и нам нужно вывести все строки, содержащие слово Install.

Switch -Wildcard -File $env:SystemRoot\DPINST.LOG { *Install* {$_} }

Для этого мы используем параметры -Wildcard и -File, указываем путь к файлу и искомое слово в переменной $_.

На этом обширная тема логических операторов и управляющих инструкций завершена. 🙂

webistore.ru

Контроль выполнения кода при помощи оператора if PowerShell | Windows IT Pro/RE

Windows PowerShell предоставляет несколько способов выполнения кода, включая операторы if, for и while. Можно использовать эти три оператора для определения состояний и действий, которые выполняются, когда эти состояния встречаются. Вы даже можете точно установить те действия, которые осуществляются, когда состояние не появляется. .

Условные операторы

Условные операторы if содержат блок кода условия, который заключен в круглые скобки, и блок команд, заключенный в фигурные скобки. Блок условия задает условие, тогда как блок команд задает одно или несколько действий. Когда условие выполняется (в этом случае блок условия выдает значение true), PowerShell запускает блок команд. Когда блок условия выдает значение false, PowerShell игнорирует блок команд.

Например, следующий код инициализирует переменную $files, затем формулирует базовое условие оператора if:

$files = dir c:\archivedfiles\*.txt if ($files -ne $null) { "There are files in this folder." write-host }

Первая строка присваивает коллекцию текстовых файлов в $files. Предложение if использует переменную $files в своем блоке условия ($files -ne $null), для того чтобы определить, что переменная не должна быть нулевой. Когда есть текстовые файлы, блок условия выдает true, и вступает в дело блок команд, который выводит сообщение There are files in this folder. Когда блок условия выдает значение false, оператор if прекращает работу. В результате никакое сообщение не выводится на экран, если папка не содержит текстовых файлов.

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

$files = dir c:\archivedfiles\*.doc if ($files -ne $null) { "There are Word" + "files in this folder." write-host } else { "No Word files in this folder." write-host }

Когда блок условия (($files -ne $null) выдает значение false, блок команд else запускает и выводит на экран сообщение No Word files in this folder.

В этом примере оператор if рассматривает два варианта: содержит папка файлы Microsoft Word и не содержит их. Но, возможно, вы захотите, чтобы оператор обрабатывал больше, чем два сценария. Тогда вы можете добавить несколько операторов elseif (если нужно использовать много операторов elseif, требуется решить, использовать ли оператор переключения switch). Для каждого оператора elseif вы определяете блок условия и блок команд. Когда блок условия выдает true, запускается блок команд.

Например, код в листинге 1 использует операторы elseif, чтобы определить, как много файлов в папке. В этом коде один оператор if помещен в другой. Код начинается с присваивания коллекции файлов в $files. Затем внешний оператор if проверяет, не является ли $files пустой. Я произвожу такую проверку и не использую свойство Count, чтобы определить количество файлов, поскольку я должен предусмотреть случай, если в папке будет только один файл. Свойство Count доступно только тогда, когда в папке два или более файлов. Когда файлов более одного, PowerShell обращается с $files как с массивом, который поддерживает свойство Count. Когда есть только один файл, PowerShell обращается с $files как со скалярной величиной (то есть единственной), а это означает, что свойство Count недоступно.

Когда внешний оператор if обнаруживает, что $files пуста, запускается оператор else из фрагмента В. Блок команд этого оператора выводит сообщение No files in folder. Когда $files не пуста, запускается внутренний оператор if из фрагмента А. Блок условия внутреннего оператора if определяет три состояния: условие if и два условия elseif.

Условие if ($files.count -gt 10) определяет, что число текстовых файлов должно быть более десяти. Когда блок условия выдает true, блок команд выводит сообщение More than 10 files in folder.

Первый оператор elseif ($files.count -gt 7 и $files.count -le 10) определяет, что число текстовых файлов должно быть больше 7, но меньше или равно 10. Когда блок условия выдает true, блок команд выводит сообщение «5-7 files in folder».

Если ни один из блоков условий не выдает значение true, запускается блок команд оператора else. Он выводит сообщение Fewer than 5 files in folder.

Как видно из листинга 1, вы можете вставить оператор if в блок команд другого оператора if, но вы не ограничены только этими типами операторов. Можно, например, вставить оператор foreach в блок команд оператора if, как показано в листинге 2. Foreach-оператор запускается только тогда, когда блок условия оператора if выдает true. Другими словами, когда папка содержит текстовые файлы, оператор foreach будет выполнять цикл по этим текстовым файлам. Каждый раз, когда цикл повторяется, оператор foreach возвращает размер текстового файла, как показано на экране 1.

 

Экран 1. Результаты работы встроенного оператора foreach в операторе if

Оператор for

Я уже рассказывал о том, как реализовать оператор цикла foreach, чтобы произвести перебор коллекции. Оператор for запускает пошаговый цикл, который повторяется по всей коллекции, как только условие подтверждается. Подобно условным операторам if, операторы for включают блок условия и блок команд. Однако блок условия здесь гораздо сложнее.

Давайте посмотрим па простой пример. Следующий оператор for показывает значения, заданные для переменной $a:

for ($a = 1; $a -le 5; $a++) {$a}

Оператор начинается с ключевого слова for, за которым следует блок условия ($a = 1; $a -le 5; $a++). Блок условия оператора for состоит из трех частей, которые разделены точкой с запятой. Первая часть ($a = 1) инициализирует переменную $a значением 1. Переменная $a обеспечивает базовую, или начальную, величину для других элементов блока кода.

Вторая часть ($a -le 5) — это само условие. В данном случае значение в $a должно быть меньше 5, чтобы получить true. Третья часть ($a++) увеличивает $a на единицу в конце каждого цикла. В итоге оператор будет двигаться через коллекцию, пока значение $a меньше или равно 5. Когда $a равно 6, оператор for прекращает работу. На экране 2 показан простой вывод этого оператора.

 

Экран 2. Результаты работы оператора for при реализации цикла по коллекции

В некоторых случаях вы не можете знать количество элементов в коллекции. Код в листинге 3 показывает, как можно использовать оператор for, чтобы произвести итерацию по такой коллекции. Этот код начинается с присваивания коллекции текстовых файлов в переменной $files. Оператор if использует переменную $files и ее свойство Count ($files.count), чтобы проверить число файла. Как уже говорилось, если в коллекции только один файл, PowerShell вернет объект (например, объект System.IO.FileSystemInfo), у которого есть скалярное значение. Если файлов нет, PowerShell не возвращает объект. В любом случае свойство Count не существует. В результате вы получаете пустое значение, если пытаетесь вызвать свойство Count, поэтому можете использовать его как условие в операторе if.

Когда $files.count возвращает значение null, оператор else из фрагмента В проверяет, действительно ли там только один файл. Если файлов там нет, запускается оператор else из фрагмента С.

Когда $files.count не возвращает значение null (то есть PowerShell возвращает объект System.Array, таким образом, свойство Count существует), запускается код из фрагмента А, поскольку есть по меньшей мере два файла. Во фрагменте А код условия цикла внутреннего оператора for использует свойство Count для определения точного количества файлов (то есть элементов) в коллекции. Как только $i становится меньше, чем число элементов, условие выдает true.

Заметьте, что я инициализировал $i с нуля. Я использую нуль, поскольку коллекции, такие как $files, используют как базу для индексации нуль. В блоке команд я применял $i, чтобы установить, какой элемент извлечь из коллекции. Например, в течение первого шага цикла $i равна нулю. Это означает, что $files [$i] — такая же, как $files [0]. На втором шаге цикла $i равно 1, таким образом, значение становится $files [1] и т. д. На экране 3 показаны результаты работы кода, приведенного в листинге 3.

 

Экран 3. Получение списка текстовых файлов и их размеров

Еще следует обратить внимание на то, что вы можете задать имя и тип используемой в программе переменной и инициализировать базовую переменную до запуска оператора for. Например, в листинге 4 переменной $i задано имя и тип, и она инициализирована в строке, выделенной во фрагменте А. Очевидно, что код в этом случае читать легче.

Операторы while

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

$count = 0 while ($count -lt 5) { $count++ "The count is $count." }

Первая строка кода инициализирует $count нулем. Эта переменная используется как база или начальная величина для организации цикла. Блок условия ($count -lt 5) определяет, что $count должно быть меньше 5.

Когда блок условия выдает true, запускается блок команд. Первый оператор в блоке команд увеличивает $count на 1. Второй оператор выводит строку, которая показывает текущее значение $count, как мы видим в результатах:

The count is 1. The count is 2. The count is 3. The count is 4. The count is 5.

Заметим, что, когда $count равна 4 в блоке условия, блок команд увеличивает $count на 1 и выводит в итоге значение 5. И только на следующем шаге блок условия вернет false и тем самым остановит цикл while.

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

$proc = Get-Process $count = 0 while ($count -lt $proc.count) { "The" + $proc [$count].name + "process uses" + $proc [$count].handles + "handles." $count ++ }

Этот код вначале присваивает результаты команды Get-Process переменной $proc. Эта команда возвращает список процессов, запущенных на локальной системе. Блок условия в цикле while определяет, что величина в $сount должна быть меньше, чем общее количество процессов ($proc.count). На экране 4 показаны результаты запуска этого кода. Вы можете использовать переменную $proc, чтобы найти не только количество процессов, но и имя каждого процесса и количество дескрипторов.

 

Экран 4. Получение списка процессоров и числа их дескрипторов

В этой статье я рассказал об условных операторах if, for и while. Эти операторы, наряду с foreach- и командой ForEach-Object, дают нам возможность выбора инструментов для реализации управления исполнением кода. Вы можете использовать эти операторы и пытаться комбинировать их разными способами, например добавляя условные операторы if к операторам foreach.

Листинг 1. Оператор if, содержащий оператор elseif

$files = dir c:\archivedfiles\*.txt if ($files -ne $null) Начало фрагмента А {   if ($files.count -gt 10)   {     "More than 10 files in folder."     write-host   }   elseif ($files.count -gt 7 -and     $files.count -le 10)   {     "8-10 files in folder."     write-host   }   elseif ($files.count -gt 4 -and     $files.count -le 7)   {     "5-7 files in folder."     write-host   }   else   {     "Fewer than 5 files in folder."     write-host   } } Конец фрагмента A Начало фрагмента B else {   "No files in folder."   write-host } Конец фрагмента B

Листинг 2. Оператор if со встроенным оператором foreach

$files = dir c:\archivedfiles\*.txt if ($files -ne $null) {   write-host   foreach ($file in $files)   {     "The $file file is " +       $file.length + " bytes."   }   write-host } else {   "No files in this folder."   write-host }

Листинг 3. Оператор for

$files = dir c:\archivedfiles\*.txt if ($files.count -ne $null) Начало фрагмента A {   for ($i = 0; $i -lt $files.count;     $i++)   {     $files[$i].name + " = " +       $files[$i].length + " bytes"   }   write-host } Конец фрагмента A Начало фрагмента B elseif ($files -ne $null `     -and $files.count -eq $null) {   $files.name + " = " +     $files.length + " bytes"   write-host } Конец фрагмента B Начало фрагмента C else {   "No text files in this folder."   write-host } Конец фрагмента C

Листинг 4. Код для объявления и инициализации $i перед оператором for

$files = dir c:\archivedfiles\*.txt Начало фрагмента A $i = 0 Конец фрагмента A if ($files.count -ne $null) {   for ($i; $i -lt $files.count;     $i++)   {     $files[$i].name + " = " +       $files[$i].length + " bytes"   }   write-host } elseif ($files -ne $null `     -and $files.count -eq $null) {   $files.name + " = " +     $files.length + " bytes"   write-host } else {   "No text files in this folder."   write-host }

Роберт Шелдон ([email protected]) — технический консультант и автор книг по технологиям Microsoft Windows и базам данных

www.osp.ru

Операторы сравнения в PowerShell

По умолчанию все операторы сравнения не являются чувствительными к регистру.
-eq Equal Равно
-ne Not equal Не Равно
-ge Greater than or equal Больше или Равно
-gt Greater than Больше
-lt Less than Меньше
-le Less than or equal Меньше или Равно
-like Wildcard comparison Использование символов подстановки для поиска соответствия образцу
-notlike Wildcard comparison Использование символов подстановки для поиска несоответствия образцу
-match Regular expression comparison Использование регулярных выражений для поиска соответствия образцу
-notmatch Regular expression comparison Использование регулярных выражений для поиска несоответствия образцу
-replace Replace operator Заменяет часть или все значение слева от оператора
-contains Containment operator Определение, содержит ли значение слева от оператора значение справа. В отличие от предыдущих операторов, результатом является булево значение
-notcontains Containment operator Определение того, что значение слева от оператора не содержит значение справа. Результатом является булево значение

 

Для сравнения с учетом регистра к команде подставляется префикс "c". Для примера, оператор -eq с зависимостью от регистра изменяется на "-ceq".

Для явно заданного независящего от регистра сравнения к команде подставляется префикс "i". Пример: оператор -replace без зависимости от регистра будет -ireplace

Типы
-is Является типом
-isnot Не является типом
-as Как тип, без ошибки если возникает неудача преобразования
Логические операторы PowerShell
-and Оба условия должны быть истины, чтобы выражение было истинно
-or Одно или оба условия должны быть истины, чтобы выражение было истинно
-xor Одно условие должно быть истинно, а второе должно иметь значение "ложь", чтобы выражение было истинно
-not Указанные условия должны иметь значение "ложь", чтобы выражение было истинно
! Указанное условие должно иметь значение "ложь", чтобы выражение было истинно

 

Примеры

$myVar -is "String" $myVar -eq 123 $myVar -ceq $myVar2 "abcdef" -like "abc*" "abcdef" -replace "dEf","xyz" $myVar1 -is "String" -and $myVar2 -is "Int" (1 -eq 1) -and -not (2 -gt 2)

Комментарии:

vam.in.ua

powershell - Тернарный оператор в PowerShell

$result = If ($condition) {"true"} Else {"false"}

Все остальное является случайной сложностью и, следовательно, его следует избегать.

Для использования в выражении или в качестве выражения, а не просто для присвоения, оберните его в $() , таким образом:

write-host $(If ($condition) {"true"} Else {"false"})

В этом блоге PowerShell вы можете создать псевдоним, чтобы определить оператор ?:

set-alias ?: Invoke-Ternary -Option AllScope -Description "PSCX filter alias" filter Invoke-Ternary ([scriptblock]$decider, [scriptblock]$ifTrue, [scriptblock]$ifFalse) { if (&$decider) { &$ifTrue } else { &$ifFalse } }

Используйте его так:

$total = ($quantity * $price ) * (?: {$quantity -le 10} {.9} {.75})

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

[email protected]("value if false","value if true")[[byte](condition)]

Глупый, но рабочий. Также эта конструкция может быть использована для быстрого превращения int в другое значение, просто добавьте элементы массива и укажите выражение, которое возвращает 0-основанные неотрицательные значения.

Вот альтернативный подход к пользовательским функциям:

function Test-TernaryOperatorCondition { [CmdletBinding()] param ( [Parameter(ValueFromPipeline = $true, Mandatory = $true)] [bool]$ConditionResult , [Parameter(Mandatory = $true, Position = 0)] [PSObject]$ValueIfTrue , [Parameter(Mandatory = $true, Position = 1)] [ValidateSet(':')] [char]$Colon , [Parameter(Mandatory = $true, Position = 2)] [PSObject]$ValueIfFalse ) process { if ($ConditionResult) { $ValueIfTrue } else { $ValueIfFalse } } } set-alias -Name '???' -Value 'Test-TernaryOperatorCondition'

пример

1 -eq 1 |??? 'match' : 'nomatch' 1 -eq 2 |??? 'match' : 'nomatch'

Различия Разъяснения

  • Почему это 3 вопросительных знака вместо 1?
    • ? символ уже является псевдонимом для Where-Object .
    • ?? используется на других языках в качестве оператора нулевой коалесценции, и я хотел избежать путаницы.
  • Зачем нам нужна труба перед командой?
    • Поскольку я использую конвейер для оценки этого, нам все еще нужен этот символ, чтобы передать условие в нашу функцию
  • Что произойдет, если я пройду массив?
    • Мы получаем результат для каждого значения; т.е. -2..2 |??? 'match' : 'nomatch' -2..2 |??? 'match' : 'nomatch' дает: match, match, nomatch, match, match (т.е., поскольку любой ненулевой int вычисляет true , а zero - false ).
    • Если вы этого не хотите, преобразуйте массив в bool; ([bool](-2..2)) |??? 'match' : 'nomatch' ([bool](-2..2)) |??? 'match' : 'nomatch' (или просто: [bool](-2..2) |??? 'match' : 'nomatch' )

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

Пример,

$var = q(condition) ? condtion_is_true : condition_is_false

code-examples.net

about_Comparison_Operators

РАЗДЕЛ about_Comparison_Operators КРАТКОЕ ОПИСАНИЕ Описание операторов сравнения, используемых в Windows PowerShell. ПОЛНОЕ ОПИСАНИЕ Операторы сравнения позволяют указать условия сравнения и включения, удовлетворяющих указанным шаблонам. При использовании оператора сравнения необходимо указать величины, которые требуется сравнивать, а также оператор, который будет разделять эти величины. По умолчанию во всех операторах сравнения не учитывается реестр символов. Для учета реестра символов в операторе сравнения необходимо указать перед именем оператора букву "c".Например, "-ceq" - это версия оператора "-eq", учитывающая реестр символов. Чтобы отменить учет реестров символов в явном виде укажите перед именем оператора букву "i". Например, "-ieq" - это версия оператора "-eq", в которой явно отключен учет реестра символов. Все операторы сравнения, кроме операторов включения (-contains, -notcontains) и операторов типа (-is, -isnot), возвращают логическое значение, если в качестве входных данных оператора (значение слева от оператора) используется одно значение (скаляр). Если в качестве входных данных используется коллекция значений, операторы включения и операторы типа возвращают все соответствующие значения. Если в коллекции не найдено соответствий, эти операторы не вернут ничего. Операторы включения и типа всегда возвращают логическое значение. Оболочка Windows PowerShell поддерживает следующие операторы сравнения. --eq Описание. Равенство. Распространяется на случай совпадения значений. Пример: C:\PS> "abc", "def" -eq "abc" abc -ne Описание. Неравенство. Распространяется на случай несовпадения значений. Пример: C:\PS> "abc", "def" -ne "abc" def -gt Описание. Больше. Пример: C:\PS> 8 -gt 6 True -ge Описание. Больше или равно. Пример: C:\PS> 8 -ge 8 True -lt Описание. Меньше. Пример: C:\PS> 8 -lt 6 False -le Описание. Меньше или равно. Пример: C:\PS> 6 -le 8 True -like Описание. Соответствие с использованием подстановочного знака (*). Пример: C:\PS> "Windows PowerShell" -like "*shell" True -notlike Описание. Несоответствие с использованием подстановочного знака (*). Пример: C:\PS> "Windows PowerShell" -notlike "*shell" False -match Описание. Соответствие строк с учетом регулярных выражений. Если в качестве входных данных используется скалярное значение, оператор заносит результат в автоматическую переменную $Matches. Пример: C:\PS> "Sunday" -match "sun" True C:\PS> $matches Имя Значение --- -------- 0 sun -notmatch Описание. Несоответствие строк. Используются регулярные выражения. Если в качестве входных данных используется скалярное значение, оператор заносит результат в автоматическую переменную $Matches. Пример: C:\PS> "Sunday" -notmatch "sun" False C:\PS> $matches Имя Значение --- -------- 0 sun -contains Описание. Оператор включения. Распространяется на случай совпадения значений, которые не являются фрагментом значения. Всегда возвращает логическое значение. Пример: C:PS> "abc", "def" -contains "def" True -notcontains Описание. Оператор включения. Не распространяется на случай совпадения значений. Всегда возвращает логическое значение. Пример: C:PS> "Windows", "PowerShell" -notcontains "Shell" True -replace Описание. Оператор замены. Изменяет указанные элементы значения. Пример: C:\PS> "Get-Process" -replace "Get", "Stop" Stop-Process Операторы равенства Операторы равенства (-eq, -ne) возвращают значение TRUE или соответствующие элементы, если одно или несколько входных значений совпадают с указанным шаблоном. Весь шаблон должен соответствовать всему значению. В следующих примерах показано функционирование оператора равенства. C:PS> 1,2,3 -eq 2 2 C:PS> "PowerShell" -eq "Shell" False C:PS> "Windows", "PowerShell" -eq "Shell" C:PS> C:\PS> "abc", "def", "123" -eq "def" def Операторы включения Операторы включения (-contains и -notcontains) сходны с операторами равенства. Однако операторы включения всегда возвращают логическое значение, даже если в качестве входных данных использовалась коллекция. Кроме того, в отличие от операторов равенства, операторы включения возвращают значение при обнаружении первого совпадения. Операторы равенства оценивают все входные данные и затем возвращают все совпадения в коллекции. В следующих примерах показано функционирование оператора -contains. C:PS> 1,2,3 -contains 2 True C:PS> "PowerShell" -contains "Shell" False C:PS> "Windows", "PowerShell" -contains "Shell" False C:\PS> "abc", "def", "123" -contains "def" True C:\PS> "true", "blue", "six" -contains "true" True В следующем примере продемонстрировано отличие операторов включения от оператора равенства. Операторы включения всегда возвращают значение TRUE при первом совпадении. C:\PS> 1,2,3,4,5,4,3,2,1 -eq 2 2 2 C:\PS> 1,2,3,4,5,4,3,2,1 -contains 2 True При обработке коллекции очень большого объема оператор -contains возвращает результаты быстрее, чем оператор равенства. Операторы совпадения Операторы совпадения (-match и -notmatch) выполняют поиск элементов, которые соответствуют или не соответствуют указанному шаблону при использовании регулярных выражений. Синтаксис: <string[]> -match <регулярное_выражение> <string[]> -notmatch <регулярное_выражение> Ниже показаны примеры использования оператора -match. C:\PS> "Windows", "PowerShell" -match ".shell" PowerShell C:\PS> (get-command get-member -syntax) -match "-view" True C:\PS> (get-command get-member -syntax) -notmatch "-path" True C:\PS> (get-content servers.txt) -match "^Server\d\d" Server01 Server02 Операторы совпадения выполняют поиск только по строкам. Они не могут выполнять поиск по массивам целых чисел и другим объектам. Операторы -match и -nomatch заполняют автоматическую переменную $Matches, если входные данные (аргумент с левой стороны) оператора представляют собой один скалярный объект. Если входные данные являются скаляром, операторы -match и -nomatch возвращают логическое значение и устанавливают в качестве значения автоматической переменной $Match совпавшие компоненты аргумента. Если входные данные являются коллекцией, операторы -match и -nomatch возвращают соответствующие элементы коллекции, но не изменяют значение автоматической переменной $Match. Например, следующая команда отправляет коллекцию строк в оператор -match. Оператор -match возвращает элементы коллекции, которые соответствуют шаблону. При этом значение автоматической переменной $Matches не изменяется. C:\PS> "Sunday", "Monday", "Tuesday" -match "sun" Sunday C:\PS> $matches C:\PS> Напротив, следующая команда отправляет в оператор -match одну строку. Оператор -match возвращает логическое значение и изменяет значение автоматической переменной $Matches. C:\PS> "Sunday" -match "sun" True C:\PS> $matches Имя Значение --- -------- 0 Sun Оператор -nomatch устанавливает значение автоматической переменной $Matches, если входные данные являются скаляром, а результат выполнения оператора равняется False, т. е. при обнаружении совпадения. C:\PS> "Sunday" -notmatch "rain" True C:\PS> $matches C:\PS> C:\PS> "Sunday" -notmatch "day" False C:\PS> $matches C:\PS> Имя Значение --- -------- 0 day Оператор замены Оператор -replace заменяет часть исходного значения или все значение целиком на указанное значение с использованием регулярных выражений. Оператор -replace может оказаться полезным при выполнении многих административных задач, например при переименовании файлов. Например, следующая команда изменяет расширения всех файлов GIF на JPG. Get-ChildItem | Rename-Item -NewName { $_ -replace '.gif$','.jpg$' } Ниже описан синтаксис оператора -replace, при этому <оригинал> соответствует символам, которые необходимо заменить, а <замена> - символам, которыми необходимо заменить оригинал. <входные_данные> <оператор> <оригинал>, <замена> По умолчанию оператор замены не учитывает регистр символов. Для учета регистра символов используйте -creplace. Для явного отключения учета регистра символов используйте -ireplace. Рассмотрим следующие примеры. C:\PS> "book" -replace "B", "C" Cook C:\PS> "book" -ireplace "B", "C" Cook C:\PS> "book" -creplace "B", "C" book Побитовые операторы Оболочка Windows PowerShell поддерживает стандартные побитовые операторы, включая побитовое И (-band), побитовое ИЛИ и побитовое исключающее ИЛИ (-bor и -bxor). Начиная с версии Windows PowerShell 2.0, все побитовые операторы работают с 64-разрядными целыми числами. Windows PowerShell поддерживает следующие побитовые операторы: Оператор Описание Пример -------- -------------------------- ------------------- -band Побитовое И C:\PS> 10 -band 3 2 -bor Побитовое ИЛИ (включающее) C:\PS> 10 -bor 3 11 -bxor Побитовое ИЛИ (исключающее) C:\PS> 10 -bxor 3 9 Побитовые операторы используют двоичный формат значений. Например, для числа 10 используется битовая структура 00001010 (с учетом 1 байта), а для числа 3 - 00000011. При использовании побитового оператора для сравнения 10 и 3 выполняется сравнение отдельных битов в каждом байте. При операции побитового И результирующий бит устанавливается в 1 только в том случае, если оба входных бита равняются 1. 00001010 (10) 00000011 ( 3) ------------------ bAND 00000010 ( 2) При операции побитового ИЛИ (включающего) результирующий бит устанавливается в 1, если любой из входных битов или они оба равняются 1. Результирующий бит устанавливается в 0 только в том случае, если оба входных бита равняются 0. 00001010 (10) 00000011 ( 3) ---------------- bOR (включающее ИЛИ) 00001011 (11) При операции побитового ИЛИ (исключающего) результирующий бит устанавливается в 1 только в том случае, если один из входных битов равняется 1. 00001010 (10) 00000011 ( 3) ---------------- bXOR (исключающее) 00001001 ( 9) СМ. ТАКЖЕ about_Operators about_Regular_Expressions about_Wildcards Compare-Object

winintro.ru

operators - Что такое период? ". оператор делает в powershell?

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

Длинный:

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

  • Арифметика
  • Назначение
  • Сравнение
  • Логическое
  • Перенаправление
  • Элемент списка
  • Разделить и присоединиться
  • Тип
  • Унарное

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

Эти Специальные операторы Включить:

  • @() Оператор подвыражения массива
  • & Оператор вызова
  • [ ] Оператор роли
  • , Командный оператор
  • . Оператор Dot sourcing
  • -f Оператор формата
  • [ ] Оператор индекса
  • | Оператор трубопровода
  • . Оператор разыменования свойств
  • .. Оператор диапазона
  • :: Оператор статического члена
  • $( ) Оператор подвыражения

. Оператор Dot sourcing: используется в этом контексте, чтобы позволить script работать в текущей области, по существу позволяя любым функциям, алиасам и переменным, которые были созданы script для добавления в текущий script.

Пример:

. c:\scripts.sample.ps1

Примечание. За этим приложением специального оператора . следует пробел, чтобы отличить его от символа (.), который представляет текущий каталог

Пример:

. .\sample.ps1

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

Пример:

$myProcess.peakWorkingSet (get-process PowerShell).kill()

Отказ от ответственности и источники:

У меня был такой же вопрос, глядя на PowerShell script, который я пытался расширить на своих наборах функций и приземлился здесь, когда делал свое исследование для ответа. Однако мне удалось найти мой ответ, используя этот великолепный напиток в Microsoft Development Network, дополненный это дальнейшее расширение тех же идей от IT Pro.

Приветствия.

qaru.site