2

我正在尝试使用以下命令从数组中获取数据:

$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

现在我想修改 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语法来更改该值。以下是两个可能对您有所帮助的替代选项,具体取决于您的源数据:

# 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 回答