2

次のコマンドを使用して、配列からデータを取得しようとしています。

$newarray = $current_ds2_data -match $codenumber

この場合、$ current_ds2_dataは「Import-Csv」コマンドの結果としての配列であり、$codenumberには配列で検索する値が含まれています。この作品はOKです。

以下は、$newarrayの値の例です。

P_SYS_InternalName  : #D_OCEV_ABC-
P_OCEV_Price        : 0.15
P_NDS_ValidPN       : 12345678
P_OCEV_PriceUnit    : 
P_NDS_VersionNumber : 1

次に、P_OCEV_Priceフィールドの値を変更します。

$newarray.P_OCEV_Price = 0.2

ただし、これは機能していないようです。$newarray.P_OCEV_Priceに値が含まれていないようです。どういうわけか、PSはP_OCEV_Priceを配列のセルとして認識しません。

私も使ってみました

$newarray.["P_OCEV_Price"] = 0.2

ハッシュテーブルフォーマットに準拠するため

次に、$newarrayを配列またはハッシュテーブルとして明示的に定義してみました。

$newarray = @()

また

$newarray = @{}

これまでのところ、何も機能していないようです。私は何が間違っているのですか?

4

1 に答える 1

1

変数は配列であるため、単純な構文を$newarray使用してその値を変更することはできません。$newarray.P_OCEV_Priceソースデータに応じて、役立つ2つの代替オプションを次に示します。

# Change the price of the first matching item
$newarray[0].P_OCEV_Price = 0.2

# Change the price for all matching items
$newarray | Foreach-Object { $_.P_OCEV_Price = 0.2 }

このような場合、私は通常、サイズ1の配列がPowershellの単一のオブジェクトと混同されやすいことを指摘したいと思います。単純な出力ステートメントを見てみてみると$newarray$newarray[0]結果はおそらく同じに見えます。GetType()このような場合は、手元に置いておくことをお勧めします。

# This will show a type of Object[]
$newarray.GetType()

# The type here will show PSCustomObject instead
($newarray[0]).GetType()
于 2012-10-11T12:44:32.010 に答える