我正在尝试使用以下命令从数组中获取数据:
$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 = @{}
到目前为止似乎没有任何效果。我做错了什么?
答案 0 :(得分: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()