Powershell 2の構造体またはオブジェクト
-
22-07-2019 - |
質問
最新バージョンの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
PowerShellでオブジェクトを作成する方法
http: //blogs.msdn.com/powershell/archive/2009/03/11/how-to-create-an-object-in-powershell.aspx
$point = "" | Select @{Name='x'; Expression={12}} ,@{Name='y'; Expression={15}}
またはより直感的に
$point = "" | Select x,y
$point.x=12; $point.y=15