2011-10-17 2 views
5

Я видел упоминания о улучшенном синтаксисе PowerShell 3.0, но пока не показан, как он будет выглядеть?У PowerShell 3.0 должен быть более чистый синтаксис, как он выглядит?

+0

Какая часть этого не была полезной? Похоже, вы можете скачать его. http://social.technet.microsoft.com/Forums/en-AU/ITCG/thread/4807949e-58e6-4533-b35d-580d938dfbb2 –

ответ

5

У Powershell уже есть довольно чистый синтаксис, поэтому нет необходимости в улучшении.

одно новое дополнение, которое я люблю это Hash Table as objects, где вы можете создавать объекты, передавая hastable с его свойствами:

[<ClassName>]$Variable = @{<Property>=<Value>;<Property>=<Value>} 

Так новый, более емким способом создания пользовательских объектов является:

$obj = [PSCustomObject]@{a=1; b=2; c=3; d=4} 

Перенаправление увеличено. У вас теперь есть потоки для подробных, отладочных и предупреждений в дополнение к нормальным (конвейер) и ошибкам, и поэтому вы можете выполнять перенаправления, например 5>&1

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

Существует новый [ordered] ускоритель создать упорядоченную hastable (словарь):

$a = [ordered]@{a=1;b=2;d=3;c=4} 

С другой ответ здесь в SO, я понял, что -in нового в Powershell v3.0:

Так вы сделайте что-нибудь вроде 1 -in 1,2,3. Раньше у нас было только -contains

Cmdlets:

Вы можете обновить справку с Update-Help командлета. Есть связанные с сетью командлеты, такие как Invoke- WebRequest. Вы также можете обрабатывать JSON с помощью командлетов ConverTo-JSON и ConvertFrom-JSON.

+0

«Приказано hastable (dictionary)»: я думал, что «словарь» и «хэш-таблица» были синонимы. Может быть, меня путают с питонами Питона, но словари не навязывают порядок, не так ли? Можете ли вы это уточнить? –

7

Вот пример:

dir | where length -lt 10

до 3,0, это был бы

dir | where {$_.length -lt 10}

редактировать: еще один пример, на этот раз с Еогеасп-объекта

dir | foreach-object length

+0

+1 - Не замечал этого раньше. – manojlds

+0

Согласен с автором. Это то, что я ожидал увидеть в некоторых сообщениях, потому что это упрощает чтение скриптов. Я не думаю, что мне это нравится. –

9

Некоторые общие командлеты *-Object используют несколько наборов параметров для выполнения упрощенного синтаксиса. Посмотрите на это в V3:

C:\PS> Get-Command Where-Object -Syntax 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] [-EQ] [<CommonParameters>] 

Where-Object [-FilterScript] <scriptblock> [-InputObject <psobject>] [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CGT [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNE [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -LT [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CEQ [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NE [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -GT [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CLT [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -GE [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CGE [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -LE [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CLE [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -Like [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CLike [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NotLike [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNotLike [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -Match [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CMatch [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NotMatch [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNotMatch [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -Contains [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CContains [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NotContains [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNotContains [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -In [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CIn [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NotIn [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNotIn [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -Is [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -IsNot [<CommonParameters>] 

ПРИМЕЧАНИЕ: Проверьте новые операторы -NotIn и -In например:

C:\PS> 1 -In 1..5 
C:\PS> 10 -NotIn 1..5 

Так упрощенный синтаксис хорош для «общих» дел, но смотреть, как вы можете легко упасть в острые камни и лаву, например:

C:\PS> Get-ChildItem | Where LastWriteTime.Year -eq 2010 

Это ничего не возвращает, и даже хуже, нет никакой ошибки, так что вы думаете, что результирующий набор «правильно» пустой, когда на самом деле этот синтаксис просто не работает, как вы могли бы ожидать. То есть вы не можете получить доступ к свойству свойства. В приведенном выше примере PowerShell ищет свойство, называемое LastWriteTime.Year, которого не существует.

Также отметим, что в рамках упрощенного синтаксиса вы можете использовать $PSItem вместо $_ в случае, если вы или те, писать скрипты для иметь какую-то аллергическая реакция на $_. :-)

И хотя это не обязательно связано с упрощенным синтаксисом, я считаю, что это упрощает мою жизнь, и я люблю его:

C:\PS> Get-ChildItem -Directory 
C:\PS> Get-ChildItem -File 
C:\PS> dir -ad 
C:\PS> Get-ChildItem -Attributes System+Hidden+Directory+!Archive 
+0

+1 для '$ PSItem'. Кстати, как вы узнаете об этих вещах? Все ли документировано? – manojlds

+1

Да, мне не нравится упрощенный синтаксис с тем, где и т. Д. ... больше проблем, чем выигрыш, я думаю. – manojlds

+1

Я немного беспокоюсь об упрощенном синтаксисе. Я понимаю желание облегчить для администраторов доступ к PowerShell, но я не уверен, что это нечто большее, чем «приманка и переключатель». Время покажет, я думаю. Что касается узнавания об этих вещах, то у MVP есть свои привилегии. :-) Серьезно, однако, взаимодействие между командой PowerShell и их MVP было неплохим, так как они начали присуждать MVP в PowerShell еще в 2006 году. –

Смежные вопросы