2011-10-17 5 views

答えて

5

Powershellにはすでにきれいな構文がありますので、改善が必要なことはあまりありません。私は好きではないこと

一つの新しい追加は、あなたがそのプロパティでhastableを渡すことによって、オブジェクトを作成することができHash Table as objects、次のとおりです。

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

だから、カスタムオブジェクトを作成するための新しい、より簡潔な方法は次のとおりです。

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

リダイレクトが強化されました。 5>&1

$PSDefaultParameterValuesコマンドレットの既定のパラメーター値を設定すると、冗長、デバッグ、警告のストリームが作成されます。注文したhastableを作成するための新しい[ordered]加速器(辞書)があり

:ここSOで別の答えから

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

は、私は-inは、PowerShellのバージョン3.0で追加されたことに気づい:

ですから、 1 -in 1,2,3のようにしてください。あなたはUpdate-Helpコマンドレットのヘルプを更新することができ

:以前我々は唯一-contains

コマンドレットを持っていました。 Invoke- WebRequestのようなWeb関連のコマンドレットがあります。 ConverTo-JSONおよびConvertFrom-JSONコマンドレットを使用してJSONを処理することもできます。

+0

「順序付けられたhastable(辞書)」:私は「辞書」および「ハッシュテーブル」があったと思った同義語。たぶん私はPythonの辞書と混同しているかもしれませんが、辞書は命令を課すものではありませんか?それを明確にすることはできますか? –

7

は、ここに例です:foreachのオブジェクト

dir | foreach-object length

で別の例は、この時間:3.0前

dir | where length -lt 10

、それは

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

編集されているだろう

+0

+1 - 前に気付かなかった。 – manojlds

+0

私は提出者に同意します。これは、スクリプトを少し読みやすくするために、私がいくつかの投稿を見ることを期待していたものです。私はそれが好きだとは思わない。 '$ PSItem'の場合は+1。 –

9

多くの共通の*-Objectコマンドレットは、簡略化された構文を達成するために複数のパラメータセットを使用します。

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

注:V3にこれを見てください新しい演算子をチェック-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です。ところで、どうやってこれらのことを知ることができますか?全体が文書化されていますか? – manojlds

+1

ええ、私は単純な構文が好きではありません。 – manojlds

+1

私は単純な構文について心配しています。私は管理者がPowerShellに乗りやすいようにしたいと思っていますが、これは 'bait&switch'以上のものではないかと私は確信しています。時間は私が推測するでしょう。これらのことを知る限り、MVPであることはその特権を持っています。 :-)しかし、PowerShellチームとMVPのやりとりは、2006年にPowerShellでMVPを開始して以来、非常に良いものでした。 –

関連する問題