質問

最新バージョンのPowershellにはJavaScriptのような機能があります:

var point = new Object();
point.x = 12;
point.y = 50;

そうでない場合、同等または回避策は何ですか?

更新
すべてのコメントを読む

役に立ちましたか?

解決

構文は、add-memberコマンドレットを介した機能によって直接サポートされていません。少し前に、この機能を汎用タプル関数でラップしました。

これにより、これらのオブジェクトを1行で作成できるようになります。

$point = New-Tuple "x",12,"y",50

New-Tupleのコードは次のとおりです

function New-Tuple()
{
    param ( [object[]]$list= $(throw "Please specify the list of names and values") )

    $tuple = new-object psobject
    for ( $i= 0 ; $i -lt $list.Length; $i = $i+2)
    {
        $name = [string]($list[$i])
        $value = $list[$i+1]
        $tuple | add-member NoteProperty $name $value
    }

    return $tuple
} 

テーマに関するブログ投稿: http://blogs.msdn.com/jaredpar/archive/2007/11/29/tuples-in-powershell.aspx#comments

他のヒント

簡単な方法では、まず、ハッシュテーブル(V1で利用可能)です

$obj = @{}
$obj.x = 1
$obj.y = 2

2番目はPSObjectです(V2ではより簡単です)

$obj = new-object psobject -property @{x = 1; y =2}

おおよそ同じオブジェクトを提供しますが、psobjectsはそれらをソート/グループ化/フォーマット/エクスポートしたい場合により優れています

申し訳ありませんが、選択された答えは良いのですが、ハッキーな1行の答えに抵抗できませんでした:

New-Object PsObject | Select-Object x,y | %{

申し訳ありませんが、選択された答えは良いのですが、ハッキーな1行の答えに抵抗できませんでした:

<*>.x = 12;

申し訳ありませんが、選択された答えは良いのですが、ハッキーな1行の答えに抵抗できませんでした:

<*>.y = 50; $foo =

申し訳ありませんが、選択された答えは良いのですが、ハッキーな1行の答えに抵抗できませんでした:

<*>; }

次のようにできます:

$point = New-Object Object |
    Add-Member NoteProperty x ([int] 12) -passThru |
    Add-Member NoteProperty y ([int] 15) -passThru

コメントのいずれかについて、カスタムオブジェクトは、オブジェクトに名前付きプロパティがあることを期待するコマンドレットでより適切に機能するため、ハッシュテーブルよりも便利です。例:

$mypoints | Sort-Object y   # mypoints sorted by y-value
$point = "" | Select @{Name='x'; Expression={12}} ,@{Name='y'; Expression={15}}

またはより直感的に

$point = "" | Select x,y
$point.x=12; $point.y=15
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top