Есть ли другие варианты использования скобок в powershell?

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

Вы знаете еще? Вы можете добавить сюда?

Здесь мое (исключено базовое использование curly в конвейере и round в вызовах методов):

# empty array
$myarray = @()

# empty hash
$myhash = @{}

# empty script block
$myscript = {}

# variables with special characters
${very strange variable @ stack !! overflow ??}="just an example"

# Single statement expressions
(ls -filter $home\bin\*.ps1).length

# Multi-statement expressions inside strings
"Processes: $($p = “a*”; get-process $p )"

# Multi statement array expression
@( ls c:\; ls d:\)

6 ответов

Решение

Вызвать оператор, чтобы получить результат в выражении:

($x=3) + 5   # yields 8

При использовании дженериков, вы должны обернуть тип в [..]:

New-Object Collections.Generic.LinkedList[string]

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

Оператор Param() (в функции, скрипте или блоке скрипта)

Вокруг условия в If (или в выражении Elseif)

Вокруг выражения в операторе switch.

Изменить: Забыл условие в заявлении в то время как.

Edit2: также $() для подвыражений (например, в строках).

Скобка очень сильно.

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

$customScript = {  "This i as test"; This will be procedure error!  }

(. $customScript 2>&1 ) | %{"CAPTURING SCRIPT OUTPUT: "+$_}

Регулярные выражения, возможно, являются первоклассной конструкцией в Powershell.

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

Пример:

$obj.connectionString = $obj.connectionString -replace '(Data Source)=[^;]+', '$1=serverB\SQL2008_R2'

Благодаря поддержке XML вы можете зайти так далеко, чтобы включить квадратные скобки, используемые в XPath. (Это действительно тянет длинный лук, хотя:-)

select-xml $config -xpath "./configuration/connectionStrings/add[@name='LocalSqlServer']"

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

# Var property inside a string
$a = get-process a*
write-host "Number of process : $a.length" # Get a list of process and then ".length
Number of process : System.Diagnostics.Process (accelerometerST) System.Diagnostics.Process (AEADISRV) System.Diagnostics.Process (agr64svc).length

write-host "Number of process : $($a.length)" # To get correct number of process
Number of process : 3
Другие вопросы по тегам