Существуют ли другие применения скобок в powershell?

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

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

здесь mine (осталось базовое использование 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 $homebin*.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 () (в функции, скрипте или scriptblock)

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

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

Edit: забыл условие в инструкции while.

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


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

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

пример:

$obj.connectionString = $obj.connectionString -replace '(Data Source)=[^;]+', '=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

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

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

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

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