Поделиться через


Сведения об операторах

Краткое описание

Описывает операторы, поддерживаемые PowerShell.

Подробное описание

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

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

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

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

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

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

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

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

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

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

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

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

Операторы сравнения вложения определяют, отображается ли тестовое значение в наборе ссылок (-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.

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

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

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

Операторы работы с типами

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

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

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

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

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

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

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

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

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

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

    PS> (Get-Item *.txt).Count -gt 10
    True
    
  • При использовании в качестве первого сегмента конвейера упаковка команды или выражения в круглые скобки неизменно приводит к перечислению результата выражения. Если круглые скобки создают оболочку для команды, она выполняется до завершения со всеми выходными данными , собранными в памяти , прежде чем результаты будут отправлены через конвейер.

Примечание

Перенос команды в круглые скобки приводит к тому, что автоматическая переменная $? будет иметь значение $true, даже если сама заключенная команда имеет значение $?$false. Например, (Get-Item /Nosuch); $? неожиданно возвращает значение True. Дополнительные сведения о $?см. в разделе about_Automatic_Variables.

Оператор subexpression $( )

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

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

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

Возвращает результат одного или нескольких инструкций в виде массива. Если имеется только один элемент, массив имеет только один элемент.

@(Get-CimInstance win32_logicalDisk)

Синтаксис литерала хэш-таблицы @{}

Как и вложенное выражение массива, этот синтаксис используется для объявления хэш-таблицы. Дополнительные сведения см. в разделе 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.
At line:1 char:2
+ & $c
+  ~~
    + CategoryInfo          : ObjectNotFound: (Get-Service -Name Spooler:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

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

PS> & "1+1"
& : The term '1+1' 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.
At line:1 char:2
+ & "1+1"
+  ~~~~~
    + CategoryInfo          : ObjectNotFound: (1+1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
PS> Invoke-Expression "1+1"
2

Оператор вызова можно использовать для выполнения скриптов с использованием их имен файлов. В приведенном ниже примере показано имя файла скрипта, содержащее пробелы. При попытке выполнить скрипт 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 (&), который выполняет команду перед асинхронным выполнением во вложенной оболочке в качестве задания.

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

Get-Process -Name pwsh &

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

Start-Job -ScriptBlock {Get-Process -Name pwsh}

Как и 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

Оператор & background также является признаком конца инструкции, как и оператор элемента управления 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 {Get-Process -Name pwsh}
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"
[Int] (7/2)
[String] 1 + 0
[Int] '1' + 0

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

Оператор "Запятая" ,

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

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

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

Оператор dot sourcing .

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

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

Примечание

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

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

. .\sample.ps1

Оператор Format -f

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

"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello      3.14

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

"{0} vs. {{0}}" -f 'foo'
foo vs. {0}

Дополнительные сведения см. в разделах Метод String.Format и Составное форматирование.

Оператор Index [ ]

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

PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
(Get-HotFix | Sort-Object installedOn)[-1]
$h = @{key="value"; name="PowerShell"; version="2.0"}
$h["name"]
PowerShell
$x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
$x["doc"]
intro
-----
Once upon a time...

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

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

Get-Process | Get-Member
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}

Оператор Range ..

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

1..10
foreach ($a in 1..$max) {Write-Host $a}

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

10..1
5..-5 | ForEach-Object {Write-Output $_}

Начиная с PowerShell 6, оператор range работает как с символами , так и с целыми числами.

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

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

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

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

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

Статический оператор-член ::

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

[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }

См. также раздел

about_Arithmetic_Operators

about_Assignment_Operators

about_Comparison_Operators

about_Logical_Operators

about_Operator_Precedence

about_Type_Operators

about_Split

about_Join

about_Redirection