Перейти к содержимому

Powershell lt это что

  • автор:

about_Operators

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

Арифметические операторы

Используйте арифметические операторы ( + , , — * , / ) % для вычисления значений в команде или выражении. С помощью этих операторов можно добавлять, вычитать, умножать или разделять значения, а также вычислять оставшуюся часть (модулу) операции деления.

Оператор добавления объединяет элементы. Оператор умножения возвращает указанное количество копий каждого элемента. Вы можете использовать арифметические операторы для любого типа .NET, реализующего их, например, Int , String , DateTime Hashtable и массивов.

Побитовые операторы ( -band , , -bor -bnot -bxor , -shl , ) -shr управляют битовых шаблонов в значениях.

Дополнительные сведения см. в about_Arithmetic_Operators .

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

Используйте операторы назначения ( = , , += , /= -= *= , ) %= для назначения, изменения или добавления значений в переменные. Можно объединить арифметические операторы с назначением, чтобы назначить результат арифметической операции переменной.

Дополнительные сведения см. в about_Assignment_Operators .

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

Используйте операторы сравнения ( -eq , , -ne -gt , -lt , -le ) -ge для сравнения значений и условий тестирования. Например, можно сравнить два строковых значения, чтобы определить, равны ли они.

Операторы сравнения также включают операторы, которые находят или заменяют шаблоны в тексте. Операторы ( -match , -replace -notmatch , ) используют регулярные выражения и ( -like , -notlike ) используют дикие карта. *

Операторы сравнения ограничений определяют, отображается ли тестовое значение в наборе ссылок ( -in , , -notin , -contains -notcontains ).

Операторы сравнения типов ( -is , -isnot ) определяют, является ли объект заданным типом.

Дополнительные сведения см. в about_Comparison_Operators .

Логические операторы

Используйте логические операторы ( -and , -or , -xor , -not ) ! для подключения условных инструкций к одному сложному условному условию. Например, можно использовать логический -and оператор для создания фильтра объектов с двумя разными условиями.

Дополнительные сведения см. в about_Logical_Operators .

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

Используйте операторы перенаправления ( > , , >> 2> и 2>> 2>&1 ) для отправки выходных данных команды или выражения в текстовый файл. Операторы перенаправления работают как Out-File командлет (без параметров), но также позволяют перенаправить выходные данные ошибок в указанные файлы. Вы также можете использовать командлет для перенаправления Tee-Object выходных данных.

Дополнительные сведения см. в about_Redirection

Операторы разделения и соединения

-join Операторы -split делят и объединяют подстроки. Оператор -split разбивает строку на подстроки. Оператор -join объединяет несколько строк в одну строку.

Дополнительные сведения см. в about_Split и about_Join.

Операторы типов

Используйте операторы типов ( -is , -isnot , -as ) для поиска или изменения типа объекта .NET.

Дополнительные сведения см. в about_Type_Operators .

Унарные операторы

Используйте унарные ++ и — операторы для увеличения или уменьшения значений и — для отрицания. Например, чтобы увеличить переменную $a из 9 10 , введите $a++ .

Дополнительные сведения см. в about_Arithmetic_Operators .

Специальные операторы

Специальные операторы имеют конкретные варианты использования, которые не соответствуют какой-либо другой группе операторов. Например, специальные операторы позволяют выполнять команды, изменять тип данных значения или извлекать элементы из массива.

Оператор группировки ( )

Как и в других языках, (. ) служит для переопределения приоритета оператора в выражениях. Например: (1 + 2) / 3

Однако в PowerShell существуют дополнительные действия.

Группирование выражений результатов

(. ) позволяет разрешить выходные данные команды участвовать в выражении. Например:

PS> (Get-Item *.txt).Count -gt 10 True 
Сгруппированные выражения piping

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

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

Инструкции группирования назначений

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

PS> ($var = 1 + 2) 3 PS> ($var = 1 + 2) -eq 3 True 

Упаковка инструкции в круглые скобки превращает ее в выражение, которое выводит значение $var .

Это поведение применяется ко всем операторам присваивания, включая составные операторы, такие как += , и добавочные ( ++ ) и декрементные ( — ) операторы. Однако порядок операций для увеличения и уменьшения зависит от их положения.

PS> $i = 0 PS> (++$i) # prefix 1 PS> $i = 0 PS> ($i++) # postfix 0 PS> $i 1 

В случае префикса значение $i увеличивается перед выходом. В случае постфикса значение $i увеличивается после вывода.

Этот метод также можно использовать в контексте условного оператора, например инструкции if .

if ($textFiles = Get-ChildItem *.txt)

В этом примере, если файлы не совпадают, Get-ChildItem команда возвращает ничего и не назначает ничего $textFiles , что считается $false логическим контекстом. Если назначено $textFiles одно или несколько объектов FileInfo, условный результат оценивается $true . Вы можете работать со значением $textFiles в тексте if инструкции.

Хотя этот метод является удобным и кратким, это может привести к путанице между оператором назначения ( = ) и оператором сравнения равенства ( -eq ).

Оператор вложенных выражений $( )

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

PS> "Today is $(Get-Date)" Today is 12/02/2019 13:15:20 PS> "Folder list: $((dir c:\ -dir).Name -join ', ')" Folder list: Program Files, Program Files (x86), Users, Windows 

Оператор вложенных выражений массива @( )

Возвращает результат одной или нескольких инструкций в виде массива. Результат всегда представляет собой массив из 0 или более объектов.

PS> $list = @(Get-Process | Select-Object -First 10; Get-Service | Select-Object -First 10 ) PS> $list.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array PS> $list.Count 20 PS> $list = @(Get-Service | Where-Object Status -eq Starting ) PS> $list.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array PS> $list.Count 0 

Синтаксис хэш-таблицы @<>

Как и вложенное выражение массива, этот синтаксис используется для объявления хэш-таблицы. Дополнительные сведения см. в about_Hash_Tables .

Оператор вызова &

Выполняет команду, скрипт или блок скрипта. Оператор вызова, также известный как оператор вызова, позволяет выполнять команды, хранящиеся в переменных и представленные строками или блоками скриптов. Оператор вызова выполняется в дочернем область. Дополнительные сведения о область см. в about_Scopes .

В этом примере команда хранится в строке и выполняется с помощью оператора вызова.

PS> $c = "get-executionpolicy" PS> $c get-executionpolicy PS> & $c AllSigned 

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

PS> $c = "Get-Service -Name Spooler" PS> $c Get-Service -Name Spooler PS> & $c & : The term 'Get-Service -Name Spooler' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. 

Командлет Invoke-Expression может выполнять код, который приводит к ошибкам синтаксического анализа при использовании оператора вызова.

PS> & "1+1" &: The term '1+1' is not recognized as a name of a cmdlet, function, script file, or executable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. PS> Invoke-Expression "1+1" 2 

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

PS C:\Scripts> Get-ChildItem Directory: C:\Scripts Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 8/28/2018 1:36 PM 58 script name with spaces.ps1 PS C:\Scripts> ".\script name with spaces.ps1" .\script name with spaces.ps1 PS C:\Scripts> & ".\script name with spaces.ps1" Hello World! 

Дополнительные сведения о блоках скриптов см. в about_Script_Blocks .

Фоновый оператор &

Запускает конвейер перед ним в фоновом режиме в задании PowerShell. Этот оператор действует аналогично оператору управления UNIX ampersand ( & ), который выполняет команду перед асинхронно в подshell в качестве задания.

Этот оператор функционально эквивалентен Start-Job . По умолчанию фоновый оператор запускает задания в текущем рабочем каталоге вызывающего объекта, запускающего параллельные задачи. В следующем примере показано базовое использование оператора фонового задания.

Get-Process -Name pwsh & 

Эта команда функционально эквивалентна следующему использованию Start-Job :

Start-Job -ScriptBlock

Как и в случае Start-Job с фоновым оператором & Job , возвращается объект. Этот объект можно использовать и Receive-Job Remove-Job так же, как если бы вы использовали Start-Job для запуска задания.

$job = Get-Process -Name pwsh & Receive-Job $job -Wait 
 NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName ------ ----- ----- ------ -- -- ----------- 0 0.00 221.16 25.90 6988 988 pwsh 0 0.00 140.12 29.87 14845 845 pwsh 0 0.00 85.51 0.91 19639 988 pwsh 
Remove-Job $job 

Фоновый & оператор также является терминатором операторов, как и оператор управления UNIX амперсанд ( & ). Это позволяет вызывать дополнительные команды после фонового & оператора. В следующем примере показано вызов дополнительных команд после фонового & оператора.

$job = Get-Process -Name pwsh & Receive-Job $job -Wait 
 NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName ------ ----- ----- ------ -- -- ----------- 0 0.00 221.16 25.90 6988 988 pwsh 0 0.00 140.12 29.87 14845 845 pwsh 0 0.00 85.51 0.91 19639 988 pwsh 

Это эквивалентно следующему скрипту:

$job = Start-Job -ScriptBlock Receive-Job $job -Wait 

Если вы хотите выполнить несколько команд, каждый из них в собственном фоновом процессе, но все в одной строке, просто поместите & между каждой из команд.

Get-Process -Name pwsh & Get-Service -Name BITS & Get-CimInstance -ClassName Win32_ComputerSystem & 

Дополнительные сведения о заданиях PowerShell см. в about_Jobs .

Оператор приведения [ ]

Преобразует или ограничивает объекты указанным типом. Если объекты не могут быть преобразованы, PowerShell создает ошибку.

[DateTime] '2/20/88' - [DateTime] '1/20/88' -eq [TimeSpan] '31' 

Приведение также можно выполнить, когда переменная назначается с использованием нотации приведения.

Оператор запятой ,

В качестве двоичного оператора запятая создает массив или добавляется к создаваемому массиву. В режиме выражения в качестве унарного оператора запятая создает массив только с одним элементом. Поместите запятую перед элементом.

$myArray = 1,2,3 $SingleArray = ,1 Write-Output (,1) 

Так как Write-Output ожидает аргумент, необходимо поместить выражение в скобки.

Оператор dot sourcing .

Выполняет скрипт в текущем область, чтобы все функции, псевдонимы и переменные, создаваемые скриптом, были добавлены в текущую область, переопределяя существующие. Параметры, объявленные скриптом, становятся переменными. Параметры, для которых значение не было задано, становятся переменными без значения. Однако автоматическая переменная $args сохраняется.

. c:\scripts\sample.ps1 1 2 -Also:3 

За оператором dot sourcing следует пробел. Используйте пробел, чтобы отличить точку от символа точки ( . ), представляющего текущий каталог.

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

. .\sample.ps1 

Оператор форматирования -f

Форматирует строки с помощью метода форматирования строковых объектов. Введите строку форматирования в левой части оператора и объекты, отформатированные в правой части оператора.

"  " -f 1,"hello",[math]::pi 
1 hello 3.14 

Числовое значение с помощью настраиваемого описателя «0» можно с нуля. Число нулей, указанных ниже : , указывает максимальную ширину для заполнения форматируемой строки.

"  " -f 7, 24, 365 
07 024 000365 

Если вам нужно сохранить фигурные скобки ( <> ) в форматируемой строке, вы можете избежать их, удвоив фигурные скобки.

" vs. <>" -f 'foo' 
foo vs.

Оператор индекса [ ]

Выбирает объекты из индексированных коллекций, таких как массивы и хэш-таблицы. Индексы массива основаны на нулях, поэтому первый объект индексируется как [0] . Для получения последних значений можно также использовать отрицательные индексы. Хэш-таблицы индексируются по значению ключа.

При наличии списка индексов оператор индекса возвращает список элементов, соответствующих этим индексам.

PS> $a = 1, 2, 3 PS> $a[0] 1 PS> $a[-1] 3 PS> $a[2, 1, 0] 3 2 1 
(Get-HotFix | Sort-Object installedOn)[-1] 
$h = @ $h["name"] 
PowerShell 
$x = [xml]"Once upon a time. " $x["doc"] 
intro ----- Once upon a time. 

Если объект не является индексированной коллекцией, с помощью оператора индекса для доступа к первому элементу возвращается сам объект. Значения индекса за пределами первого возвращаемого $null элемента.

PS> (2)[0] 2 PS> (2)[-1] 2 PS> (2)[1] -eq $null True PS> (2)[0,0] -eq $null True 

Оператор конвейера |

Отправляет («каналы») выходные данные команды, которая предшествует команде, следующей за ней. Если выходные данные включают несколько объектов (коллекция), оператор конвейера отправляет объекты по одному за раз.

Get-Process | Get-Member Get-Service | Where-Object

Операторы цепочки конвейеров && и ||

Условное выполнение правого конвейера на основе успеха левого конвейера.

# If Get-Process successfully finds a process called notepad, # Stop-Process -Name notepad is called Get-Process notepad && Stop-Process -Name notepad 
# If npm install fails, the node_modules directory is removed npm install || Remove-Item -Recurse ./node_modules 

Дополнительные сведения см. в About_Pipeline_Chain_Operators .

Оператор range ..

Оператор диапазона можно использовать для представления массива последовательных целых чисел или символов. Значения, присоединенные оператором диапазона, определяют начальные и конечные значения диапазона.

Добавлена поддержка диапазонов символов в PowerShell 6.

1..10 $max = 10 foreach ($a in 1..$max)

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

10..1 5..-5 | ForEach-Object

Чтобы создать диапазон символов, заключите их в кавычки.

PS> 'a'..'f' a b c d e f 
PS> 'F'..'A' F E D C B A 

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

PS> [string]$s = 'a'..'e' $s a b c d e $a = 'a', 'b', 'c', 'd', 'e' $a a b c d e 

Символы в массиве объединяются в строку. Символы разделяются значением переменной $OFS предпочтения. Дополнительные сведения см. в about_Preference_Variables .

Порядок символов в массиве определяется значением ASCII символа. Например, значения c ASCII и X 99 и 88 соответственно. Этот диапазон будет представлен в обратном порядке.

PS> 'c'..'X' c b a ` _ ^ ] \ [ Z Y X 

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

PS> enum Food < Apple Banana = 3 Kiwi = 10 >PS> [Food]::Apple..[Food]::Kiwi 0 1 2 3 4 5 6 7 8 9 10 

Результирующий диапазон не ограничивается значениями перечисления. Вместо этого он представляет диапазон значений между двумя указанными значениями. Оператор диапазона нельзя использовать для надежного представления элементов перечисления.

Оператор доступа к членам .

Обращается к свойствам и методам объекта. Имя члена может быть выражением.

$myProcess.peakWorkingSet (Get-Process PowerShell).kill() 'OS', 'Platform' | Foreach-Object

Начиная с PowerShell 3.0 при использовании оператора в объекте коллекции списков, который не имеет элемента, PowerShell автоматически перечисляет элементы в этой коллекции и использует оператор для каждого из них. Дополнительные сведения см. в разделе about_Member-Access_Enumeration.

Оператор статических элементов ::

Вызывает статические свойства и методы класса .NET. Чтобы найти статические свойства и методы объекта, используйте статический параметр командлета Get-Member . Имя члена может быть выражением.

[datetime]::Now 'MinValue', 'MaxValue' | Foreach-Object

Оператор Ternary ? :

Оператор ternary можно использовать в качестве замены инструкции if-else в простых условных случаях.

Дополнительные сведения см. в about_If .

Оператор объединения со значением NULL ??

Оператор объединения со значением NULL ?? возвращает значение левого операнда, если оно не равно NULL. В противном случае он вычисляет правый операнд и возвращает результат. Оператор ?? не вычисляет правый операнд, если значение левого операнда отлично от NULL.

$x = $null $x ?? 100 

В следующем примере правый операнд не вычисляется.

[string] $todaysDate = '1/10/2020' $todaysDate ?? (Get-Date).ToShortDateString() 
1/10/2020 

Оператор присваивания объединения со значением NULL ??=

Оператор назначения объединения со значением NULL ??= присваивает значение правого операнда левому операнду только в том случае, если левый операнд имеет значение NULL. Оператор ??= не вычисляет правый операнд, если значение левого операнда отлично от NULL.

$x = $null $x ??= 100 $x 

В следующем примере правый операнд не вычисляется.

[string] $todaysDate = '1/10/2020' $todaysDate ??= (Get-Date).ToShortDateString() $todaysDate 
1/10/2020 

Операторы с условным ?. значением NULL и ?[]

Эта функция была перенесена из экспериментальной в основную версию PowerShell 7.1.

Условный оператор со значением NULL применяет операцию доступ к операнду, являющемуся элементом ( ?. ) или элементом ( ?[] ), только если значение операнда отлично от NULL. В противном случае он возвращает значение NULL.

Так как в PowerShell символ ? может быть частью имени переменной, для использования этих операторов требуется формальное указание имени переменной. Необходимо использовать фигурные скобки ( <> ) вокруг имен переменных, таких $ как или когда ? является частью имени $ переменной.

Синтаксис имени переменной $> не следует путать с оператором вложенных выражений $() . Дополнительные сведения см. в разделе «Имя переменной» about_Variables.

В следующем примере возвращается значение PropName.

В следующем примере возвращается значение NULL, не пытаясь получить доступ к имени участника PropName.

$a = $null $?.PropName 

В этом примере возвращается значение индексированного элемента.

$a = 1..10 $?[0] 

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

$a = $null $?[0] 

См. также

  • about_Arithmetic_Operators
  • about_Assignment_Operators
  • about_Comparison_Operators
  • about_Logical_Operators
  • about_Operator_Precedence
  • about_Member-Access_Enumeration
  • about_Type_Operators
  • about_Split
  • about_Join
  • about_Redirection

Совместная работа с нами на GitHub

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

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

Как и в любом языке программирования в PowerShell также присутствуют операторы сравнения, при чём не в обычном для людей виде знаков , = .

Вместо знаков в PowerShell используются буквы, которые обозначают сами слова сравнения, например -gt означает Greater than (Больше) .

Таблица операторов сравнения

Оператор Значение Описание
-le Less than or equal Меньше или равно
-lt Less than Меньше чем
-ge Greater than or equal Больше или равно
-gt Greater than Больше чем
-ne Not equal Не равно
-eq Equal Равно
-like Wildcard comparison Поиск по шаблону
-notlike Wildcard comparison Поиск по несоответствию шаблонов
-match Regular expression comparison Поиск соответствия по регулярным выражениям
-notmatch Regular expression comparison Поиск несоответствия по регулярным выражениям
-in Containment operator Поиск по коллекции
-notin Containment operator Поиск по коллекции (не содержит)
-replace Replace operator Заменяет часть или всё значение
-is Type Возвращает true если объекты одинаковы
-isnot Type Возвращает true если объекты неодинаковы

le

Этот оператор означает меньше или равно и эквивалентен

5 -le 8 5 -le 5 
True True 

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

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

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

В Powershell используются операторы сравнения на основе букв, что поначалу не привычно. Очень хочется написать знак > вместо -gt или знак = вместо -eq. Но со временем к такому именованию привыкаешь. Перед оператором сравнения или логическим оператором обязательно нужно ставить знак

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

По умолчанию все операторы сравнения нечувствительны к регистру. Чтобы сделать оператор сравнения чувствительным к регистру, перед именем оператора поставьте букву c. К примеру, чувствительной к регистру оператор -eq пишется как -ceq. Чтобы сделать нечувствительность к регистру явной, перед оператором ставится i. К примеру, явно нечувствительная к регистру версия оператора -eq это -ieq.

Когда входные данные для оператора являются скалярным значением (число), операторы сравнения возвращают логическое значение. Если входные данные представляют собой набор значений, операторы сравнения возвращают любые совпадающие значения. Если в коллекции нет совпадений, операторы сравнения возвращают пустой массив. Исключение составляют операторы contains, notcontains, in, notin, is, isnot которые всегда возвращают логическое значение.

1, 2, 4, 8 -eq 2 1, 2, 4, 8 -eq 3

В первом варианте при сравнении набора чисел с 2 такое число есть в массиве. Во втором варианте при сравнении с 3 возвращается пустой массив, такого числа нет.

Операторы равенства

Операторы равенства (-eq, -ne) возвращают значение TRUE или совпадения, когда одно или несколько входных значений идентичны указанному шаблону. Шаблон должен полностью соответствовать значению.

Рассмотрим несколько простых примеров

20 -eq 20 21 -eq 20 "Проверка" -eq "Проверка" "Проверка" -eq "Проверка не прошла" "Test_ne" -ne "Test"

Сравним между собой две даты.

(Get-Date) -eq [datetime]("09.15.2020") (Get-Date).Date -eq [datetime]("09.15.2020")

Давайте посмотрим на окошко вывода и разберемся что произошло. В первой строке я воспользовался командлетом Get-Date для получения текущей даты и времени. И сравнил его со строкой преобразованной в дату. Однако результат сравнения отрицательный т.е. False. Как видно число полностью совпадает, но, не совпадает время. Поэтому я взял командлет Get-Date и вывел из него только текущую дату (в таком случае время устанавливается в 0). И уже второй строкой результат сравнения положительный.

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

Get-ChildItem -Path c:\ -Recurse|Where-Object

Итак, командлетом Get-ChildItem я хочу вывести список всех файлов и папок на диске C включая подпапки. Далее отправляя по конвееру командлету Where-Object я фильтрую вывод, чтобы показывались только файлы больше или равные (оператор -ge) 40 Мбайт. Как видите очень удобный инструмент получается. Особенно в качестве автоматизации чистки логов.

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

Операторы сопоставления (-like и -notlike) находят элементы, которые соответствуют или не соответствуют заданному шаблону, используя подстановочные выражения.

Рассмотрим на примере списка запущенных процессов. Получим список запущенных процессов firefox

Get-Process|Where-Object

Командлетом Where-Object я выбрал из списка процессов (при помощи оператора -like) все с названием fire и дальше любые символы (*-любое кол-во символов)

Очень удобная конструкция. Всегда её использую для поиска необходимых процессов.

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

Операторы соответствия (-match и-notmatch) находят элементы, которые соответствуют или не соответствуют заданному шаблону, используя регулярные выражения.

Оператор сопоставляет строку с помощью регулярных выражений. Если данные на входе являются скалярными, они заполняют автоматическую переменную $Matches. Если входными данными является коллекция, операторы -match и -notmatch возвращают соответствующие члены этой коллекции, но при этом, оператор не заполняет переменную $Matches.

Перейдем к примерам

"Вася","Петя","Маша" -match "маш" $Matches "Маша" -match "маш" $Matches

В случае сравнения с одной строкой -match возвращает логическое значение и заполняет автоматическую переменную $Matches. Автоматическая переменная $Matches – это хэш-таблица. Если группировка или захват не используются, заполняется только один ключ. Клавиша 0 представляет весь текст, который был сопоставлен.

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

Операторы сдерживания (-contains и -notcontains) аналогичны операторам равенства. Только операторы сдерживания всегда возвращают логическое значение, даже если входными данными является коллекция.
В отличие от операторов равенства, операторы сдерживания возвращают значение, как только они обнаруживают первое совпадение. Операторы равенства оценивают все входные данные, а затем возвращают все совпадения в коллекции.

Посмотрим на практике

"Вася","Петя","Маша" -contains "маш" "Вася","Петя","Маша" -contains "маша"

Как видно из примера, в случае не полного совпадения имени результат False. Если имя совпадает результат True.

Оператор -in указывает, появляется ли тестовое значение в коллекции эталонных значений. Всегда возвращает логическое значение. Возвращает TRUE только в том случае, если тестовое значение точно соответствует хотя бы одному из эталонных значений. Когда тестовое значение является коллекцией, оператор -in использует ссылочное равенство. Он возвращает TRUE только в том случае, если одно из опорных значений является тем же экземпляром объекта. Оператор -in был введен в PowerShell 3.0

"Лада" -in "УАЗ", "ЛадаКалина" "Лада" -in "Лада", "ЛадаКалина"

Оператор замены

Оператор замены (-replace) заменяет все или часть значения указанным значением с помощью регулярных выражений. Оператор -replace можно использовать для многих административных задач, таких как переименование файлов, замена текста в файле и прочее.

Рассмотрим пример по массовому переименованию файлов *.log в *.bak

Get-ChildItem *.log | Rename-Item -NewName

И немного простых примеров с текстом

"Привет" -replace "ив","" "Вася" -ireplace "я", "О" "Насталя заря коммунизма" -replace "заря","эра"

Мы закончили рассматривать операторы сравнения Powershell. Теперь рассмотрим логические операторы.

Логические операторы Powershell
Оператор Описание
-and Оба условия должны быть истины, чтобы выражение было истинно
-or Одно или оба условия должны быть истины, чтобы выражение было истинно
-xor Одно условие должно быть истинно, а второе должно иметь значение ложь, чтобы выражение было истинно
-not Указанные условия должны иметь значение ложь, чтобы выражение было истинно
! Указанное условие должно иметь значение ложь, чтобы выражение было истинно

Логические операторы PowerShell соединяют выражения и операторы, позволяя использовать одно выражение для проверки нескольких условий.

Снова обратимся к примеру из жизни. Появилась у меня задача найти файлы определенного размера. А именно чтобы они были больше одного числа но меньше другого. Реализуем на Powershell

Get-ChildItem|Where-Object

В данном примере мы получили список файлов в папке Windows объемом больше 30 Кбайт но меньше 40 Кбайт.

Мы рассмотрели все операторы сравнения Powershell. Их более чем достаточно для любых задач.

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

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

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

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

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

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