Есть ли другие варианты использования скобок в powershell? - PullRequest
7 голосов
/ 06 апреля 2011

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

Знаете ли вы еще?Можете ли вы добавить сюда?

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

# 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 ]

5 голосов
/ 06 апреля 2011

Заставить оператор привести результат в выражении:

($x=3) + 5   # yields 8
4 голосов
/ 06 апреля 2011

При использовании шаблонов вам нужно обернуть тип в [..]:

New-Object Collections.Generic.LinkedList[string]

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

2 голосов
/ 06 апреля 2011

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

Вокруг условия в операторе If (или Elseif)

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

Редактировать: Забыл условие в операторе while.

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

1 голос
/ 06 апреля 2011

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

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

Пример:

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

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

select-xml $config -xpath "./configuration/connectionStrings/add[@name='LocalSqlServer']"
0 голосов
/ 12 октября 2014

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

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

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

(. $customScript 2>&1 ) | %{"CAPTURING SCRIPT OUTPUT: "+$_}
0 голосов
/ 06 апреля 2011

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

# 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
...