2012-10-11 122 views
2

我想用下面的命令來擺脫一個數組的數據:PowerShell的:取出數據陣列,並放入到新陣列

$newarray = $current_ds2_data -match $codenumber 

在這種情況下,$ current_ds2_data是一個數組「Import-Csv」命令的結果和$ codenumber包含我想要在數組中搜索的值。這工作確定。

以下是$ newarray價值的例子:

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

現在我想通過做

$newarray.P_OCEV_Price = 0.2 

修改P_OCEV_Price字段的值,但是這似乎並沒有工作。看來$ newarray.P_OCEV_Price不包含任何值。不知何故,PS不會將P_OCEV_Price識別爲數組的單元。

我也使用

$newarray.["P_OCEV_Price"] = 0.2 

遵守哈希表格式化

下一步此我試圖通過使用

$newarray = @() 
限定$ newarray明確地爲陣列或哈希表試圖

$newarray = @{} 

到目前爲止似乎沒有任何工作。我究竟做錯了什麼??

回答

1

由於您的$newarray變量是一個數組,因此您將無法使用簡單的$newarray.P_OCEV_Price語法更改該值。這裏有兩個備選方案,可以幫助您,這取決於您的源數據:

# 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() 
+0

是的,這是訣竅。非常感謝您的迅速回復! – user1737974