Сведения об операторах
Краткое описание
Описывает операторы, поддерживаемые PowerShell.
Подробное описание
Оператор — это элемент языка, который можно использовать в команде или выражении. PowerShell поддерживает несколько типов операторов, помогающие управлять значениями.
Арифметические операторы
Используйте арифметические операторы (+
, -
, *
, /
, %
) для вычисления значений в команде или выражении. С помощью этих операторов можно сложить, вычесть, умножить или разделить значения, а также вычислить остаток (модуль) операции деления.
Оператор сложения объединяет элементы. Оператор умножения возвращает указанное количество копий каждого элемента. Арифметические операторы можно использовать в любом типе .NET, который их реализует, например , Int
String
, 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]:: $_ }