Powershell in: об операторах — PowerShell | Microsoft Learn

Содержание

PowerShell for beginners / Хабр

При работе с PowerShell первое с чем мы сталкиваемся это команды (Cmdlet).

Вызов команды выглядит так:

Verb-Noun -Parameter1 ValueType1 -Parameter2 ValueType2[]

Help

Вызов справки в PowerShell осуществляется с помощью команды Get-Help. Можно указать один из параметров: example, detailed, full, online, showWindow.

Get-Help Get-Service -full вернет полное описание работы команды Get-Service

Get-Help Get-S* покажет все доступные команды и функции начинающиеся с Get-S*

Также на официальном сайте Microsoft есть подробная документация.

Вот пример справки по команде Get-Evenlog

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

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

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

Информацию о том является ли параметр обязательным мы можем увидеть в описании ниже в поле Required. В примере выше атрибут After является необязательным, так как напротив Required стоит false. Далее мы видим поле Position напротив которого написано Named. Это обозначает что обратиться к параметру можно только по имени, то есть:

Get-EventLog -LogName Application -After 2020.04.26

Поскольку у параметра LogName вместо Named было указано число 0 это значит что мы можем обратиться к параметру без имени, а указав его в нужной последовательности:

Get-EventLog Application -After 2020.04.26

Допустим и такой порядок:

Get-EventLog -Newest 5 Application

Alias

Чтобы мы могли использовать привычные команды из консоли в PowerShell есть псевдонимы (Alias).

Пример псевдонима для команды Set-Location является cd.

То есть вместо вызова команды

Set-Location “D:\”

мы можем использовать

cd “D:\”

History

Чтобы посмотреть историю вызовов команд можно использовать Get-History

Выполнить команду из истории Invoke-History 1; Invoke-History 2

Очистить историю Clear-History

Pipeline

Пайплайн в powershell это когда результат выполнения первой функции передается во вторую. Вот пример использования пайплайна:

Get-Verb | Measure-Object

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

Get-Verb "get"

Если вызвать справку Get-Help Get-Verb -Full, то мы увидим что параметр Verb принимает pipline input и в скобках написано ByValue.

Это значит что мы можем переписать Get-Verb «get» на «get» | Get-Verb.

То есть результат первого выражения это строка и она передается в параметр Verb команды Get-Verb через pipline input по значению.

Также pipline input может быть ByPropertyName. В этом случае мы будем передавать объект у которого есть проперти со схожим названием Verb.

Variables

Переменные не являются строго типизированными и задаются с указанием символа $ впереди

$example = 4

Символ > означает поместить данные в

Например, $example > File.txt

Этим выражением мы поместим данные из переменной $example в файл

Аналогично команде Set-Content -Value $example -Path File. txt

Arrays

Инициализация массива:

$ArrayExample = @(“First”, “Second”)

Инициализация пустого массива:

$ArrayExample = @()

Получение значения по индексу:

$ArrayExample[0]

Получить весь массив:

$ArrayExample

Добавление элемента:

$ArrayExample += “Third”
$ArrayExample += @(“Fourth”, “Fifth”)

Сортировка:

$ArrayExample | Sort
$ArrayExample | Sort -Descending

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

$ArrayExample = $ArrayExample | Sort

По факту удаления из массива элемента в PowerShell нет, но можно это сделать вот таким образом:

$ArrayExample = $ArrayExample | where { $_ -ne “First” }
$ArrayExample = $ArrayExample | where { $_ -ne $ArrayExample[0] }

Удаление массива:

$ArrayExample = $null

Loops

Синтаксис циклов:

for($i = 0; $i -lt 5; $i++){}
$i = 0
while($i -lt 5){}
$i = 0
do{} while($i -lt 5)
$i = 0
do{} until($i -lt 5)
ForEach($item in $items){}

Выход из цикла break.

Пропуск элемента continue.

Conditional Statements

if () {} elseif () {} else
switch($someIntValue){
  1 { “Option 1” }
  2 { “Option 2” }
  default { “Not set” }
}

Function

Определение функции:

function Example () {
  echo &args
}

Запуск функции:

Example “First argument” “Second argument”

Определение аргументов в функции:

function Example () {
  param($first, $second)
}
function Example ($first, $second) {}

Запуск функции:

Example -first “First argument” -second “Second argument”

Exception

try{
} catch [System.Net.WebException],[System.IO.IOException]{
} catch {
} finally{
}

PowerShell 3.0 -NotIn и -In

PowerShell 1.0 имеет не только операторы сравнения, такие как -Match, -Like и -Contains, но и их отрицательные аналоги, такие как -NotContains.

Здесь, в PowerShell 3, у нас есть два новых члена команды операторов сравнения: -In и -NotIn.

Windows PowerShell — в темах

  • Пример 1. Тестирование чисел в диапазоне
  • Пример 2: PowerShell -NotIn
  • Секрет понимания PowerShell 3 -In и -NotIn
  • Сравнение -In PowerShell с -Match
  • Устранение неполадок PowerShell -In и -NotIn

 ♣

Пример 1. Тестирование чисел в диапазоне

В этом примере мы задаем PowerShell вопрос: «Находится ли число 77 в диапазоне от 70 до 80?»

# PowerShell -In
77 -In 70..80
True

Примечание 1: Ключом к использованию -In (и -NotIn) является освоение точек диапазона .. между значениями

Пример 2: PowerShell’s -NotIn

После того, как вы освоите компаратор -In, у вас не возникнет проблем с родственной ему командой -NotIn, она работает взаимодополняющим образом в соответствии с тем, что предсказывает логика.

# PowerShell -NotIn
5 -NotIn 70..80
True

Секрет понимания PowerShell 3 -In и -NotIn

Самый простой способ узнать, какой компаратор выбрать для какого скрипта, это сравнить их! Вот так я оценил нюансы -Like и -Match. В случае -В замените -Содержит и обратите внимание на сходства и различия. Для меня все сводится к тем двум колеблющимся точкам, которые -In любит, но -Contains, кажется, игнорирует.

# Windows PowerShell -Contains
77 -Contains 70..80
False

Примечание 2: Это не имеет смысла, поэтому откажитесь от -Contains и вернитесь к -In. См. пример 2 выше.

Парень рекомендует:  Бесплатная пробная версия монитора производительности сети (NPM) v11.5

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

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

Загрузите бесплатную пробную версию монитора производительности сети Solarwinds

Сравнение Windows PowerShell -In с -Match

# PowerShell -Match
‘8080’ -Match ‘80’
True

Но ’80’ — соответствует ‘8080’ будет False

# PowerShell -In
‘8080’ -In ’80’
False

Также ’80’ -In ‘8080’ будет False

900 31 Вывод: PowerShell -In лучше всего работает с диапазоном, выраженным как: 0..8080. На мой взгляд -In (или -NotIn) редко являются лучшими операторами сравнения для текста.

# PowerShell -In
’80’ -In ‘1..8080’
True

Устранение неполадок PowerShell -In и -NotIn

Неверная версия PowerShell

Вы должны предоставить выражение значения справа от оператора «-».
В строке: 2 символ: 6

Неожиданный токен «in» в выражении или операторе.

Это то, что вы получаете в PowerShell 1.0 или 2.0, -В новой версии PowerShell 3.0

Dottiness
Вы получаете «неправильный» результат, «Ложь», когда вся логика говорит вам, что это должно быть правдой. Убедитесь, что у вас две точки дальности… а не три… точки. Странно, но это правда!

Парень рекомендует: набор инструментов инженера SolarWinds v10

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

Есть так много хороших гаджетов; это как иметь полную свободу действий в кондитерской. К счастью, утилиты отображаются логично: мониторинг, обнаружение сети, диагностика и инструменты Cisco. Попробуйте набор инструментов инженера SolarWinds прямо сейчас!

Загрузите полнофункциональную пробную копию набора инструментов инженера v10

Дальнейшее исследование условных операторов

-In и -NotIn являются членами условных операторов PowerShell. Хороший способ исследовать эти операторы:

Help about_Comparison_Operators

-eq
-ne
-gt
-ge
-lt
-le
-Like
-NotLike
-Match 9002 7 — Не соответствует
— Содержит
— NotContains
-In
-NotIn
-Replace

См. Больше того, что нового в PowerShell V 3.0 »

»

Резюме PowerShell -in и -notin

PowerShell 1.0 использует операторы сравнения, такие как, -thatch, -lik и -contains, powershell 3.0 Brings. -В и -НеВ. Ключом к пониманию этих последних операторов является пристальное внимание к ранжированию .. точек.

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

 


Подробнее Microsoft PowerShell v 3.0

• PowerShell 3.0  • Что нового в PowerShell 3.0 • PowerShell 3.0 Foreach-Object

• PowerShell Show-Command • Out-GridView -PassThru  • Упорядоченные хэш-таблицы PowerShell

• PowerShell Home • PowerShell 3.0 Get- Дочерний элемент  • PowerShell 3 – NotIn • PowerShell 3.0 Где

об операторах — PowerShell | Microsoft Learn

  • Статья

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Операторы сравнения сдерживания определяют, появляется ли тестовое значение в
набор ссылок ( — в , — не в , — содержит , — не содержит ).

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

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

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

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

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

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

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

Для получения дополнительной информации см. about_Redirection

Разделение и объединение операторов

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

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

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

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

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

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

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

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

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

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

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

( )

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

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

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

 PS> (Get-Item *.txt).Count -gt 10
Истинный
 
Группировка операторов присваивания

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

 PS> ($var = 1 + 2)
3
PS> ($var = 1 + 2) -eq 3
Истинный
 

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

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

 PS> $i = 0
PS> (++$i) # префикс
1
ПС> $i = 0
PS> ($i++) # постфикс
0
PS> $я
1
 

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

Вы также можете использовать эту технику в контексте условного оператора, такого
как , если оператор .

 если ($textFiles = Get-ChildItem *.txt) {
    $textFiles.Count
}
 

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

Примечание

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

Сгруппированные выражения конвейера

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

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

$( )

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

 PS> "Сегодня $(Get-Date)"
Сегодня 02.12.2019г.13:15:20
PS> "Список папок: $((dir c:\ -dir).Name -join ', ')"
Список папок: 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
-------- -------- ---- --------
True True Object[] System.Array
PS> $list.Count
20
PS> $list = @(Get-Service | Where-Object Status -eq Starting)
PS> $list.GetType()
Базовый тип имени IsPublic IsSerial
-------- -------- ---- --------
True True Object[] System.Array
PS> $list.Count
0
 

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

@{}

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

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

и

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

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

 PS> $c = "получить политику выполнения"
PS> $с
get-executionpolicy
PS> & $с
AllSigned
 

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

 PS> $c = "Get-Service -Name Spooler"
PS> $с
Get-Service -Name Spooler
PS> & $с
& : Термин «Get-Service -Name Spooler» не распознается как имя
командлет, функция, файл сценария или исполняемая программа. Проверьте правильность написания
имя или, если путь был включен, проверьте правильность пути и
Попробуйте еще раз.
 

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

 PS> & "1+1"
&: термин «1+1» не распознается как имя командлета, функции, скрипта.
файл или исполняемая программа. Проверьте написание имени, или если путь был
включены, проверьте правильность пути и повторите попытку.
PS> Вызов-выражение "1+1"
2
 

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

 PS C:\Scripts> Get-ChildItem
    Каталог: C:\Scripts
Режим LastWriteTime Длина Имя
---- ------------- ------ ----
-a---- 28.08.2018 13:36 58 имя скрипта с пробелами.ps1
PS C:\Scripts> ".\имя скрипта с пробелами.ps1"
.\имя скрипта с пробелами.ps1
PS C:\Scripts> & ".\имя сценария с пробелами.ps1"
Привет, мир!
 

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

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

и

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

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

 Get-Process -Имя pwsh &
 

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

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

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

 $job = Get-Process -Name pwsh &
Получить-Задание $job-Подождать
 
 NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
 ------ ----- ----- ------ -- -- -----------
      0 0,00 221,16 25,90 6988 988 рвш
      0 0,00 140,12 29,87 14845 845 ршш
      0 0,00 85,51 0,91 19639 988 рвш
 
 Удалить задание $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 рвш
      0 0,00 140,12 29,87 14845 845 ршш
      0 0,00 85,51 0,91 19639 988 пвш
 

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

 $job = Start-Job -ScriptBlock {Get-Process -Name pwsh}
Получить-Задание $job-Подождать
 

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

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

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

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

[ ]

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

 [DateTime] '20.02.88' - [DateTime] '20.01.88' -eq [TimeSpan] '31'
 

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

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

,

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

 $мой массив = 1,2,3
$SingleArray = ,1
Запись-вывод (,1)
 

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

Оператор поиска точек

.

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

 . c:\scripts\sample.ps1 1 2 -Также:3
 

Примечание

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

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

 . .\sample.ps1
 

Оператор формата

-f

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

 "{0} {1,-10} {2:N}" -f 1,"привет",[математика]::pi
 
 1 привет 3.14
 

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

 "{0:00} {1:000} {2:000000}" -f 7, 24, 365
 
 07 024 000365
 

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

 "{0} против {{0}}" -f 'foo'
 
 foo против {0}
 

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

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

[ ]

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

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

 PS> $а = 1, 2, 3
ПС> $а[0]
1
PS> $а[-1]
3
PS> $а[2, 1, 0]
3
2
1
 
 (Get-HotFix | Сортировать-объект установлен)[-1]
 
 $h = @{key="value"; имя="PowerShell"; версия = "2. 0"}
$h["имя"]
 
 PowerShell
 
 $x = [xml]"Жили-были..."
$х["документ"]
 
 введение
-----
Давным-давно...
 

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

 PS> (2)[0]
2
ПС> (2)[-1]
2
PS> (2)[1] -eq $null
Истинный
PS> (2)[0,0] -eq $null
Истинный
 

Оператор трубопровода

|

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

 Процесс получения | Get-Member
Получить-Сервис | Где-Объект {$_.StartType -eq 'Автоматически'}
 

Операторы цепей трубопроводов

&& и ||

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

 # Если Get-Process успешно находит процесс с именем блокнот,
# Stop-Process -Имя блокнота называется
Блокнот Get-Process && Блокнот Stop-Process -Name
 
 # При сбое установки npm каталог node_modules удаляется
нпм установить || Remove-Item -Recurse ./node_modules
 

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

Оператор диапазона

..

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

Примечание

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

 1..10
$макс. = 10
foreach ($a в 1..$max) {Write-Host $a}
 

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

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

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

 PS> 'а'. .'ф'
а
б
с
д
е
ф
 
 PS> 'Ф'..'А'
Ф
Е
Д
С
Б
А
 

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

 PS> [строка]$s = 'a'..'e'
$s
а б в г д
$а = 'а', 'б', 'с', 'г', 'е'
$а
а б в г д
 

Символы массива объединяются в строку. Персонажи
разделенные значением 9]
\
[
Z
Д
Икс

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

 PS> перечисление еды {
      Яблоко
      Банан = 3
      Киви = 10
    }
PS> [Еда]::Яблоко..[Еда]::Киви
0
1
2
3
4
5
6
7
8
9
10
 

Важно

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

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

.

Доступ к свойствам и методам объекта. Имя участника может быть
выражение.

 $myProcess.peakWorkingSet
(Get-процесс PowerShell).kill()
«ОС», «Платформа» | Foreach-Object { $PSVersionTable. $_ }
 

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

Оператор статического члена

::

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

 [дата/время]::Сейчас
'Мин.значение', 'Макс.значение' | Foreach-Object { [int]:: $_ }
 

Тернарный оператор

? :

Вы можете использовать тернарный оператор вместо оператор if-else
в простых условных падежах.

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

Оператор объединения с нулевым значением

??

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

 $x = $null
$х ?? 100
 
 100
 

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

 [строка] $todaysDate = '10.01.2020'
$ сегодняшняя дата ?? (Получить дату).ToShortDateString()
 
 10.01.2020
 

Оператор присваивания, объединяющий нулевые значения

??=

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

 $х = $нуль
$х ??= 100
$х
 
 100
 

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

 [строка] $todaysDate = '10.01.2020'
$todaysDate ??= (Get-Date).ToShortDateString()
 
 10.01.2020
 

Нулевые условные операторы

?. и ?[]

Примечание

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

Оператор с нулевым условием применяет доступ к члену, ?. или доступ к элементу,
?[] , операция со своим операндом, только если этот операнд оценивается как ненулевой;
в противном случае возвращается ноль.

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