【发布时间】:2014-12-22 08:54:58
【问题描述】:
我在脚本中有以下内容:
$Loc = Read-Host "Please select a location number"
$ImpCSV = Import-Csv -Delimiter ";" -Path "file.csv" -Header loc,add | Where-Object {$_.loc -eq "$Loc"}
Foreach ($CIM in $ImpCSV) {$LocInfo = $CIM}
这似乎为 $Loc=1 创建了某种散列/数组/某个变量。如果我输入:
$LocInfo.add
它为我提供了该键的值(?),因为它应该在哈希表中,但如果我这样做:
$LocInfo
我明白了:
loc :[1]
添加 :[一些值]
这不是通常的哈希输出。应该是这样的:
名称 值
---- -----
loc [1]
添加 [一些值]
这首先导致我的问题是,如果我尝试使用$LocInfo.Set_Item("add", "HI") 编辑条目,它什么也不做。另外,我创建了一个表格来显示创建新对象的那些变量,但是如果没有给我一个语法错误,新的 -property 命令不会采用$LocInfo.add,返回一个"@{loc=1; add=some value}"。我必须做的是:
Set-Variable -Name add -Value $LocInfo.add
这组添加到[some value],然后我可以将它放在new-object 字段中,没有任何问题。
这也是有问题的,因为我的脚本会循环,因此他们可以添加另一个位置 (loc) 编号(比如说 2)并根据需要提取该位置的数据。如果他们正在搜索的新位置说缺少添加(地址),而不是创建一个空白 $LocInfo.add 然后是一个空白 $add,它会跳过它,这意味着当再次创建 new-object 时,它使用 $add从上一次运行,[一些值];即 loc 1 和 2 都具有相同的 $add 值。
我到底创造了什么,我该怎么做呢?有没有更好的方法从 CSV 文件中提取变量,不会像这样搞砸我?我打破了Powershell吗?我翻遍了,找不到这种变数的排列方式。
这是我尝试执行 Set_Item 时遇到的错误:
方法调用失败,因为 [System.Management.Automation.PSCustomObject] 不包含名为“Set_Item”的方法。
在 line:1 char:1
+ $LocInfo.Set_Item("add", "HI")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Set_Item:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
我使用New-Object 创建了对象,甚至这些对象都显示为哈希表,即根据对象大小具有标题和多个列。
【问题讨论】:
-
在网上搜索了几个小时后,我开始自己回答了。
标签: arrays powershell csv hash